Cloud Deploy を使用してアプリを Cloud Run にデプロイする
このページでは、Cloud Deploy を使用して、hello
という名前のサンプル アプリケーション イメージを連続する 2 つの Cloud Run サービスまたは 2 つの Cloud Run ジョブに配信する方法を説明します。
このクイックスタートでは、以下の内容を行います。
Skaffold 構成を作成する
2 つの Cloud Run サービスまたは 2 つのジョブの構成ファイルを作成します。
これらのファイルによって、サービスまたはジョブを定義し、デプロイする(ビルド済みの)コンテナ イメージが指定されます。
Cloud Deploy デリバリー パイプラインとデプロイ ターゲットを定義します。これらは、2 つのサービスまたは 2 つのジョブを指します。
リリースを作成してデリバリー パイプラインをインスタンス化します。リリースは自動的に最初のターゲットにデプロイされます。
リリースを 2 番目のターゲットにプロモートします。
Google Cloud コンソールで両方のロールアウトを表示します。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- デフォルトの Compute Engine サービス アカウントに十分な権限があることを確認します。
このサービス アカウントにはすでに必要な権限が付与されている場合があります。これらの手順は、デフォルトのサービス アカウントの自動的なロール付与を無効にするプロジェクトに含まれています。
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"
- デフォルトの実行サービス アカウントに
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
- 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"
これらのロールのいずれかを追加できない場合は、プロジェクト管理者にお問い合わせください。
CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。
gcloud components update
Skaffold 構成を準備する
Cloud Deploy では、Skaffold を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。
このクイックスタートでは、skaffold.yaml
ファイルを作成します。このファイルは、サンプルアプリのデプロイに使用する Cloud Run サービス定義またはジョブ定義を指定します。
ターミナル ウィンドウを開きます。
deploy-run-quickstart
という名前で新しいディレクトリを作成し、そのディレクトリに移動します。mkdir deploy-run-quickstart cd deploy-run-quickstart
次の内容のファイルを
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 プロファイルを使用する必要がない場合もあります。
サービス
次の内容のファイルを
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
サービスであり、デリバリー パイプラインの進行での最初のラベルに対応します。次の内容のファイルを
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
として設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。
ジョブ
次の内容のファイルを
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
ジョブであり、デリバリー パイプラインの進行での最初のターゲットに対応します。次の内容のファイルを
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 つのファイルを作成します。
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
パイプラインとターゲットを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
これで、ターゲットを持つパイプラインが用意され、最初のターゲットにアプリケーションをデプロイする準備が整いました。
次のとおりに、パイプラインとターゲットを確認します。
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
作成したデリバリー パイプラインが表示され、[ターゲット] 列に 2 つのターゲットが一覧表示されます。
リリースを作成する
リリースは 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 ではロールアウト リソースも自動的に作成されます。アプリケーションは、進行中の最初のターゲットに自動的にデプロイされます。
リリースを昇格する
[デリバリー パイプライン] ページで、
my-run-demo-app-1
パイプラインをクリックします。デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。この場合、リリースが
run-qsdev
ターゲットにデプロイされたことを示します。デリバリー パイプラインの可視化の最初のターゲットで、[Promote] をクリックします。
[リリースの昇格] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。
[Promote] をクリックします。
これで、リリースは
run-qsprod
へのデプロイのためにキューに入れられます。デプロイが完了すると、デリバリー パイプラインの可視化にデプロイ済みとして表示されます。
Google Cloud コンソールで結果を表示する
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、[my-run-demo-app-1] デリバリー パイプラインを表示します。
デリバリー パイプラインの名前「my-run-demo-app-1」をクリックします。
パイプラインの可視化では、パイプラインを介したアプリの進行状況を確認できます。
リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。
リリース名
test-release-001
をクリックします。ロールアウトは [ロールアウト] に表示されます。ロールアウトをクリックすると、デプロイログなどの詳細を表示できます。
Cloud Run サービスへのアクセス
デフォルトでは、新しく作成された Cloud Run サービスにアクセスするには認証が必要です。認証情報を提供する方法と、認証なしでサービスにアクセスするために必要な Identity and Access Management の構成については、Cloud Run の認証の概要をご覧ください。これは Cloud Run ジョブには適用されません。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
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
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 deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Cloud Deploy によって作成された Cloud Storage バケットを削除します。
1 つは
_clouddeploy
で終わり、もう 1 つは[region].deploy-artifacts.[project].appspot.com
で終わります。
これでクイックスタートの演習はすべて終了です。