API Axios 요청을 사용하여 Google Cloud Run 인스턴스를 업데이트하는 방법

이 튜토리얼에서는 Google Cloud Build Docker 이미지를 사용하여 기존 Google Cloud Run 인스턴스를 업데이트하는 방법을 설명합니다.

먼저 Google Cloud에 Docker 이미지를 푸시하려면 로컬 코드베이스에서 다음을 실행할 수 있습니다.gcloud builds submit --timeout=2000s --machine-type=e2-highcpu-32 --tag gcr.io/PROJECT-NAME/IMAGE-NAME .
이렇게 하면 Docker 프로젝트가 빌드되고 GCP 컨테이너 레지스트리에 이미지로 저장됩니다.

그런 다음 이미지를 Google Cloud 인스턴스로 배포하기 위해 다음 명령어를 실행할 수 있습니다.gcloud run deploy INSTANCE-NAME --image gcr.io/PROJECT-NAME/IMAGE-NAME --region us-east1 --platform managed --allow-unauthenticated --quiet
시원한! 이제 Docker 프로젝트가 Cloud Run에서 실행됩니다.

제 경우에는 웹 사이트 테마마다 다른 코드 기반을 사용하고 도커를 사용하여 빌드합니다. 그래서 첫 번째 명령을 사용하여 모든 테마를 Google Cloud에 제출했지만 프런트엔드 앱에서 테마 간에 전환할 때 Cloud Run 인스턴스를 새 도커 이미지로 덮어쓸 프로그래밍 방식이 필요했습니다.

일반적으로 gcloud run deploy CLI 명령을 실행할 수 있지만 CLI 명령을 내 백엔드의 클라우드 기능에 추가하는 axios API 요청으로 변환해야 했습니다.

내가 한 것은 다음과 같습니다.

try {
async function updateTheme() {
  let token: any
  const jwtClient = new google.auth.JWT(firebaseClientEmail, "", firebaseKey, [
    'https://www.googleapis.com/auth/cloud-platform',
  ])

  await jwtClient.authorize(async function (err: any, _token: any) {
    if (err) {
      console.log("JWT ERROR: ", err)
      return err
    } else {
      token = _token.access_token.split('.')
      token = token[0] + '.' + token[1] + '.' + token[2]

      const deploySteps = [
        {
          name: 'gcr.io/cloud-builders/gcloud',
          args: [
            'run',
            'deploy',
            `${name}`,
            '--image',
            `gcr.io/${googleCloudProject}/theme-${theme}`,
            '--region',
            'us-east1',
            '--allow-unauthenticated',
            '--platform',
            'managed',
            '--quiet',
          ],
        },
      ]

      const deployRevisions = async () => {
        await axios({
          method: "post",
          url: `https://cloudbuild.googleapis.com/v1/projects/${googleCloudProject}/builds`,
          headers: {
            Authorization: `Bearer ${token}`,
          },
          data: {
            steps: deploySteps,
            timeout: "1200s",
          },
        })
          .catch(function (error: any) {
            console.log("ERROR UPDATING THEME: ", error)
            return
          })
          .then(function (response: any) {
            console.log("SUCCESSFULLY DEPLOYED THEME UPDATE")
          })
      }

      if (token) {
        deployRevisions()
      } else {
        console.log("MISSING TOKEN")
      }
    }
  })
}

await updateTheme()

} catch (e) {
    console.log("tried updating theme but something went wrong")
    return
}


위의 코드 덩어리는 Cloud Build API를 활용하여 Cloud Run 인스턴스를 Google Cloud의 도커 이미지로 덮어씁니다. 요청에 사용할 Google Cloud 인증 코드도 가져옵니다.

Cloud Run 인스턴스를 업데이트하려는 경우 함수에 배치하고 이미지 이름을 간단히 전달합니다.

좋은 웹페이지 즐겨찾기