Cloud Deploy を使用してアプリを Cloud Run にデプロイする

このページでは、Cloud Deploy を使用して、hello という名前のサンプル アプリケーション イメージを連続する 2 つの Cloud Run サービス、2 つの Cloud Run ジョブ、または 2 つの Cloud Run ワーカープールに配信する方法を説明します。(Cloud Run ワーカープールはプレビュー版です)。

このクイックスタートでは、以下の内容を行います。

  1. Skaffold 構成を作成する

  2. 2 つの Cloud Run サービス、2 つのジョブ、または 2 つのワーカープールの構成ファイルを作成します。

    これらのファイルによって、サービスまたはジョブを定義し、デプロイする(ビルド済みの)コンテナ イメージが指定されます。

  3. Cloud Deploy デリバリー パイプラインとデプロイ ターゲットを定義します。これらは、2 つのサービス、2 つのジョブ、または 2 つのワーカープールを指します。

  4. リリースを作成してデリバリー パイプラインをインスタンス化します。リリースは自動的に最初のターゲットにデプロイされます。

  5. リリースを 2 番目のターゲットにプロモートします。

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  4. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  6. Google Cloud CLI をインストールします。

  7. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  8. gcloud CLI を初期化するには、次のコマンドを実行します。

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  11. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  13. Google Cloud CLI をインストールします。

  14. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  15. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init

必要なロール

Cloud Deploy の配信パイプラインとリリースを作成するために必要な権限を取得するには、プロジェクトに対する Cloud Deploy ジョブ実行者 roles/clouddeploy.jobrunner)IAM ロールを付与するよう管理者に依頼してください。

Cloud Deploy オペレーションを実行して Cloud Run にデプロイするために必要な権限が Cloud Deploy サービス アカウントに付与されるように、プロジェクトに対する次の IAM ロールを Cloud Deploy サービス アカウントに付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

管理者は、カスタムロールや他の事前定義ロールを使用して、Cloud Deploy サービス アカウントに必要な権限を付与することもできます。

Skaffold 構成を準備する

Cloud Deploy では、Skaffold を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。

このクイックスタートでは、skaffold.yaml ファイルを作成します。このファイルは、サンプルアプリのデプロイに使用する Cloud Run サービス定義またはジョブ定義を指定します。

  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: {}
    

    ワーカープール(プレビュー)

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

    このファイルは、Cloud Run のサービス、ジョブ、またはワーカープールを識別する最小限の Skaffold 構成ファイルです。この構成ファイルの詳細については、skaffold.yaml リファレンスをご覧ください。

Cloud Run サービス、ジョブ、ワーカープールを準備する

このクイックスタートでは、同じプロジェクトに 2 つの異なる Cloud Run サービス、2 つの Cloud Run ジョブ、または 2 つの Cloud Run ワーカープールを作成します。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 サービスであり、デリバリー パイプラインの進行での 2 番目のターゲットに対応しています。

これらのファイルは Cloud Run サービス定義であり、アプリケーションのデプロイに使用されます。デプロイするコンテナ イメージは、プレースホルダ my-app-image としてここに設定されます。このプレースホルダは、リリースを作成するときに特定のイメージに置き換えられます。

ジョブ

  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 ジョブであり、デリバリー パイプラインの進行での 2 番目のターゲットに対応します。

これらのファイルは、アプリケーションのデプロイに使用される Cloud Run ジョブ定義です。デプロイするコンテナ イメージは、プレースホルダ my-app-image としてここに設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。

ワーカープール(プレビュー)

  1. 次の内容のファイルを run-worker-pool-dev.yaml という名前で作成します。

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: deploy-run-worker-pool-dev
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    このファイルは Cloud Run ワーカープールを定義します。deploy-run-worker-pool-dev という名前が示すように、これは dev ワーカープールであり、デリバリー パイプラインの進行での最初のターゲットに対応します。

  2. 次の内容のファイルを run-worker-pool-prod.yaml という名前で作成します。

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: deploy-run-worker-pool-prod
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    このファイルは、別の Cloud Run ワーカープールを定義します。deploy-run-worker-pool-prod という名前が示すように、これは prod ワーカー プールであり、デリバリー パイプラインの進行での 2 番目のターゲットに対応します。

これらのファイルは Cloud Run ワーカープールの定義であり、アプリケーションのデプロイに使用されます。デプロイするコンテナ イメージは、プレースホルダ my-app-image としてここに設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。

デリバリー パイプラインとターゲットの作成

パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、1 つのファイルを作成します。

  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 の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

    [デリバリー パイプライン] ページを開く

    作成したデリバリー パイプラインが表示され、[ターゲット] 列に 2 つのターゲットが一覧表示されます。

     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:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a

ジョブ

 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:8eb3f5e72586de6375abe95aa67511c57c61d35fb37d5670e4d68624a68ef916

ワーカープール(プレビュー)

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

--images= フラグに注目してください。このフラグは、サービス、ジョブ、ワーカープールの定義のプレースホルダ(my-app-image)を、SHA 修飾された特定のイメージに置き換えるために使用します。Google は、この方法でサービスとジョブの定義をテンプレート化し、リリースの作成時に SHA 修飾イメージ名を使用することをおすすめします。

--skaffold-version= フラグは、デプロイに使用する Skaffold のバージョンを指定します。Cloud Run ワーカープールのサポートには、Skaffold バージョン 2.17 以降を使用する必要があります。

すべてのリリース(--disable-initial-rollout を含むものを除き)において、Cloud Deploy ではロールアウト リソースも自動的に作成されます。アプリケーションは、進行中の最初のターゲットに自動的にデプロイされます。

リリースを昇格する

  1. [デリバリー パイプライン] ページで、my-run-demo-app-1 パイプラインをクリックします。

    [デリバリー パイプライン] ページを開く

    デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。この場合、リリースが run-qsdev ターゲットにデプロイされたことを示します。

     Google Cloud コンソールでのデリバリー パイプラインの可視化

  2. デリバリー パイプラインの可視化の最初のターゲットで、[Promote] をクリックします。

    [リリースの昇格] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。

  3. [Promote] をクリックします。

    これで、リリースは 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 サービスまたはワーカープールにアクセスするには、認証が必要です。認証なしでサービスにアクセスするために必要な Identity and Access Management 構成を確認するには、Cloud Run の認証の概要をご覧ください。これは 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
    

    ワーカープール(プレビュー)

    gcloud beta run worker-pools delete deploy-run-worker-pool-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
    

    ワーカープール(プレビュー)

    gcloud beta run worker-pools delete deploy-run-worker-pool-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 バケットを削除します。

    1 つは _clouddeploy で終わり、もう 1 つは [region].deploy-artifacts.[project].appspot.com で終わります。

    Cloud Storage ブラウザページを開く

これでクイックスタートの演習はすべて終了です。

次のステップ