Cloud Deploy를 사용하여 Cloud Run에 앱 배포

이 페이지에서는 Cloud Deploy를 사용하여 hello라는 샘플 애플리케이션 이미지를 Cloud Run 서비스 2개 또는 Cloud Run 작업 2개의 시퀀스에 전달하는 방법을 보여줍니다.

이 빠른 시작에서 다루는 작업은 다음과 같습니다.

  1. Skaffold 구성을 만듭니다.

  2. Cloud Run 서비스 2개나 작업 2개에 대한 구성 파일을 만듭니다.

    이러한 파일은 서비스나 작업을 정의하고 배포할 (사전 빌드된) 컨테이너 이미지를 지정합니다.

  3. 서비스 2개나 작업 2개를 가리키는 Cloud Deploy 배포 파이프라인과 배포 대상을 정의합니다.

  4. 첫 번째 타겟에 자동으로 배포되는 출시를 만들어 배포 파이프라인을 인스턴스화합니다.

  5. 출시를 두 번째 타겟으로 승격합니다.

  6. Google Cloud 콘솔에서 두 출시를 확인합니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. CLI가 이미 설치되어 있으면 최신 버전으로 실행 중인지 확인합니다.

    gcloud components update
    

  13. 기본 Compute Engine 서비스 계정에 충분한 권한이 있는지 확인합니다.

    서비스 계정에 이미 필요한 권한이 있을 수 있습니다. 기본 서비스 계정의 자동 역할 부여를 중지한 프로젝트를 위해 포함된 단계입니다.

    1. clouddeploy.jobRunner 역할 추가:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      

    2. Cloud Run에 워크로드를 배포할 수 있는 권한을 기본 실행 서비스 계정 actAs에 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

    3. Cloud Run 개발자 권한을 추가합니다.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/run.developer"
      

      이러한 역할을 추가하는 데 문제가 발생하는 경우 프로젝트 관리자에게 문의하세요.

Skaffold 구성 준비

Cloud Deploy는 Skaffold를 사용하여 배포할 항목의 세부정보와 별도의 대상에 적절하게 배포하는 방법을 제공합니다.

이 빠른 시작에서는 샘플 앱을 배포하는 데 사용할 Cloud Run 서비스나 작업 정의를 식별하는 skaffold.yaml 파일을 만듭니다.

  1. 터미널 창을 엽니다.

  2. deploy-run-quickstart라는 이름의 새 디렉터리를 만들고 디렉터리로 이동합니다.

    mkdir deploy-run-quickstart
    cd deploy-run-quickstart
    
  3. 다음 콘텐츠로 skaffold.yaml라는 파일을 만듭니다.

    서비스

    apiVersion: skaffold/v4beta7
    kind: Config
    metadata: 
      name: deploy-run-quickstart
    profiles:
    - name: dev
      manifests:
        rawYaml:
        - run-service-dev.yaml
    - name: prod
      manifests:
        rawYaml:
        - run-service-prod.yaml
    deploy:
      cloudrun: {}
    

    작업

    apiVersion: skaffold/v4beta7
    kind: Config
    metadata: 
      name: deploy-run-quickstart
    profiles:
    - name: dev
      manifests:
        rawYaml:
        - run-job-dev.yaml
    - name: prod
      manifests:
        rawYaml:
        - run-job-prod.yaml
    deploy:
      cloudrun: {}
    

    이 파일은 Cloud Run 서비스나 작업을 식별하는 최소한의 Skaffold 구성입니다. 이 파일에 대한 자세한 내용은 skaffold.yaml 참조를 확인하세요.

Cloud Run 서비스 또는 작업 준비

이 빠른 시작에서는 같은 프로젝트에 서로 다른 Cloud Run 서비스 2개나 Cloud Run 작업 2개를 만듭니다. Cloud Deploy는 여러 프로젝트에서의 배포도 지원합니다. 또한 Skaffold 프로필을 사용하여 같은 프로젝트에서 서비스 또는 작업 2개를 사용할 수 있습니다. 다른 프로젝트를 사용하는 경우 Skaffold 프로필을 사용할 필요가 없을 수도 있습니다.

서비스

  1. 다음 콘텐츠로 run-service-dev.yaml라는 파일을 만듭니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: deploy-run-service-dev
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    이 파일은 Cloud Run 서비스를 정의합니다. deploy-run-service-dev 이름에서 알 수 있듯이 이는 dev 서비스이며 배포 파이프라인 진행의 첫 번째 대상에 해당합니다.

  2. 다음 콘텐츠로 run-service-prod.yaml라는 파일을 만듭니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: deploy-run-service-prod
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    이 파일은 또 다른 Cloud Run 서비스를 정의하며 deploy-run-service-prod 이름에서 알 수 있듯이 이는 prod 서비스이며 전달 파이프라인 진행의 두 번째 대상에 해당합니다.

작업

  1. 다음 콘텐츠로 run-job-dev.yaml라는 파일을 만듭니다.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: deploy-run-job-dev
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: my-app-image
    

    이 파일은 Cloud Run 작업을 정의합니다. deploy-run-job-dev 이름에서 알 수 있듯이 이는 dev 작업이며 배포 파이프라인 진행의 첫 번째 대상에 해당합니다.

  2. 다음 콘텐츠로 run-job-prod.yaml라는 파일을 만듭니다.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: deploy-run-job-prod
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: my-app-image
    

    이 파일은 또 다른 Cloud Run 작업을 정의합니다. deploy-run-job-prod 이름에서 알 수 있듯이 이는 prod 작업이며 배포 파이프라인 진행의 두 번째 대상에 해당합니다.

배포 파이프라인 및 대상 만들기

파이프라인 및 대상을 파일 하나 또는 별도의 파일로 정의할 수 있습니다. 이 빠른 시작에서는 단일 파일을 만듭니다.

  1. deploy-run-quickstart 디렉터리에서 다음 콘텐츠로 새 파일 clouddeploy.yaml을 만듭니다.

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-run-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: run-qsdev
        profiles: [dev]
      - targetId: run-qsprod
        profiles: [prod]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: run-qsdev
    description: Cloud Run development service
    run:
      location: projects/PROJECT_ID/locations/us-central1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: run-qsprod
    description: Cloud Run production service
    run:
      location: projects/PROJECT_ID/locations/us-central1
    
  2. Cloud Deploy 서비스에 파이프라인 및 대상을 등록합니다.

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    이제 타겟이 포함된 파이프라인을 사용하여 첫 번째 타겟에 애플리케이션을 배포할 수 있습니다.

  3. 파이프라인 및 대상을 확인합니다.

    Google Cloud 콘솔에서 Cloud Deploy 배포 파이프라인 페이지로 이동하여 사용 가능한 배포 파이프라인 목록을 확인합니다.

    배포 파이프라인 페이지 열기

    방금 만든 배포 파이프라인이 표시되고 두 타겟이 타겟 열에 나열됩니다.

    Google Cloud 콘솔에 표시된 배포 파이프라인

출시 버전 만들기

출시 버전은 배포되는 변경사항을 나타내는 중앙 Cloud Deploy 리소스입니다. 배포 파이프라인은 해당 출시의 수명 주기를 정의합니다. 수명 주기에 대한 자세한 내용은 Cloud Deploy 서비스 아키텍처를 참조하세요.

deploy-run-quickstart 디렉터리에서 다음 명령어를 실행하여 배포할 컨테이너 이미지를 나타내는 release 리소스를 만듭니다.

서비스

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-run-demo-app-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4

작업

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-run-demo-app-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/job@sha256:d7c33651fbad911a9a0a0c16f2f9b3a79f0b9e3e89afb205603af706067feac5

모든 출시 버전과 마찬가지로(--disable-initial-rollout을 포함하지 않는 경우) Cloud Deploy도 자동으로 출시 리소스를 만듭니다. 애플리케이션은 진행 상황의 첫 번째 대상에 자동으로 배포됩니다.

출시 버전 승격

  1. 배포 파이프라인 페이지에서 my-run-demo-app-1 파이프라인을 클릭합니다.

    배포 파이프라인 페이지 열기

    배포 파이프라인 세부정보 페이지에는 배포 파이프라인의 진행 상태가 그래픽으로 표시됩니다. 이 경우 출시 버전이 run-qsdev 타겟에 배포되었음을 보여줍니다.

    Google Cloud 콘솔의 배포 파이프라인 시각화

  2. 배포 파이프라인 시각화의 첫 번째 타겟에서 승격을 클릭합니다.

    출시 승격 대화상자가 표시됩니다. 승격하는 타겟의 세부정보가 표시됩니다.

  3. 승격을 클릭합니다.

    출시 버전이 run-qsprod에의 배포를 위해 큐에 추가되었습니다. 배포가 완료되면 배포 파이프라인 시각화에 배포된 것으로 표시됩니다.

    출시 버전이 프로덕션에 배포된 것을 표시하는 Google Cloud 콘솔의 배포 파이프라인 시각화

Google Cloud 콘솔에서 결과 보기

  1. Google Cloud 콘솔에서 Cloud Deploy 배포 파이프라인 페이지로 이동하여 my-run-demo-app-1 배포 파이프라인을 확인합니다.

    배포 파이프라인 페이지 열기

  2. 배포 파이프라인 이름 'my-run-demo-app-1'을 클릭합니다.

    파이프라인 시각화에서 파이프라인의 앱 진행 상황을 보여줍니다.

    Google Cloud 콘솔의 배포 파이프라인 시각화

    출시 버전은 배포 파이프라인 세부정보출시 탭에 표시됩니다.

  3. 출시 이름 test-release-001를 클릭합니다.

    출시 아래에 출시가 표시됩니다. 출시를 클릭하여 배포 로그를 비롯한 세부정보를 볼 수 있습니다.

    Google Cloud 콘솔의 출시

Cloud Run 서비스 액세스

기본적으로 새로 만든 Cloud Run 서비스에 액세스하려면 인증을 받아야 합니다. Cloud Run 인증 개요를 참조하여 사용자 인증 정보를 제공하는 방법을 알아보고 인증 없이 서비스에 액세스하기 위해 필요한 Identity and Access Management 구성이 무엇인지 확인합니다. Cloud Run 작업에는 적용되지 않습니다.

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

  1. deploy-qs-dev Cloud Run 서비스 또는 작업을 삭제합니다.

    서비스

    gcloud run services delete deploy-run-service-dev --region=us-central1 --project=PROJECT_ID
    

    작업

    gcloud run jobs delete deploy-run-job-dev --region=us-central1 --project=PROJECT_ID
    
  2. deploy-qs-prod 서비스를 삭제합니다.

    서비스

    gcloud run services delete deploy-run-service-prod --region=us-central1 --project=PROJECT_ID
    

    작업

    gcloud run jobs delete deploy-run-job-prod --region=us-central1 --project=PROJECT_ID
    
  3. 배포 파이프라인, 대상, 버전, 출시를 삭제합니다.

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  4. Cloud Deploy에서 만든 Cloud Storage 버킷을 삭제합니다.

    하나는 _clouddeploy로 끝나고 다른 하나는 [region].deploy-artifacts.[project].appspot.com입니다.

    Cloud Storage 브라우저 페이지 열기

빠른 시작을 완료하셨습니다.

다음 단계