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

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

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

  1. Skaffold 構成を作成する

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

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

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

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

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

  6. Google Cloud コンソールで両方のロールアウトを表示します。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

  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. デフォルトの実行サービス アカウントに actAs Cloud Run へのワークロードをデプロイする権限を付与します。

      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 を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。

このクイックスタートでは、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: {}
    

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

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 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、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: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

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

すべてのリリース(--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
    
  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 バケットを削除します。

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

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

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

次のステップ