デプロイ ポリシーを使用してロールアウトを制限する
このクイックスタートでは、指定した期間に Cloud Deploy のターゲットへのロールアウトを防止する方法と、その制限をオーバーライドする方法について説明します。
このクイックスタートでは、以下の内容を行います。
Skaffold 構成と Kubernetes マニフェストまたは Cloud Run サービス定義を作成して、デプロイする(ビルド済みの)コンテナ イメージを指定します。
Cloud Deploy デリバリー パイプラインと 1 つのデプロイ ターゲットを定義します。これは、1 つの GKE クラスタまたは Cloud Run サービスを指します。
このパイプラインには、1 つのターゲットに対して 1 つのステージのみが含まれます。
ターゲットに対するデプロイ ポリシーを構成します。
このポリシーでは、そのターゲットへのロールアウトを禁止する期間の範囲を定義します。
リリースを作成します。
通常、リリースを作成すると、Cloud Deploy はデリバリー パイプラインの進行で最初のターゲットに対するロールアウトを作成します。この場合、ターゲットへのデプロイを禁止するポリシーがあるため、そのターゲットに対するロールアウトは作成されません。
Google Cloud コンソールで結果を表示します。
ポリシーにより、リリースに対するロールアウトは表示されず、デリバリー パイプラインの可視化に保留中のアクションがありません。
デプロイ ポリシーをオーバーライドします。
このオーバーライドにより、Cloud Deploy ではターゲットに対するロールアウトが作成されます。
Google Cloud コンソールで結果を表示します。
これでポリシーがオーバーライドされたので、ロールアウトが進行中であること(または、十分な時間が経過している場合は完了済みであること)を確認できます。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, 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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, 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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
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" - 特定のランタイム向けのデベロッパー ロールを追加します。
- GKE の場合:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - 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" -
iam.serviceAccountUserロールを追加します。これには、ランタイムにデプロイする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
Google Cloud CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。
gcloud components update
ランタイム環境を作成する
Cloud Run にデプロイする場合は、以下のコマンドをスキップできます。
GKE の場合は、クラスタ quickstart-cluster-qsprod を 1 つ作成します。クラスタの Kubernetes API エンドポイントは、公共のインターネットからネットワークに到達可能である必要があります。GKE クラスタには、デフォルトで外部からアクセス可能です。
gcloud container clusters create-auto quickstart-cluster-qsprod \
--project=PROJECT_ID \
--region=us-central1
Skaffold 構成とアプリケーション マニフェストを準備する
Cloud Deploy では、Skaffold を使用して、デプロイする対象と、それをターゲットにデプロイする方法の詳細を提供します。
このクイックスタートでは、skaffold.yaml ファイルを作成して、サンプルアプリのデプロイに使用する Kubernetes マニフェストを識別します。
ターミナル ウィンドウを開きます。
新しいディレクトリを作成し、そのディレクトリに移動します。
mkdir deploy-policy-quickstart cd deploy-policy-quickstart次の内容のファイルを
skaffold.yamlという名前で作成します。GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}このファイルは最小限の Skaffold 構成ファイルです。このクイックスタートでは、このファイルを作成します。ただし、Cloud Deploy で作成することで、基本的な非本番環境アプリケーション用に作成することもできます。
この構成ファイルの詳細については、
skaffold.yamlリファレンスをご覧ください。Cloud Run のサービス定義または GKE の Kubernetes マニフェストで、アプリケーションのマニフェストを作成します。
GKE
次の内容のファイルを
k8s-pod.yamlという名前で作成します。apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-imageこのファイルは、基本的な Kubernetes マニフェストであり、アプリケーションをデプロイするためにクラスタに適用されます。デプロイするコンテナ イメージは、プレースホルダ
my-app-imageとしてここに設定されます。このプレースホルダは、リリースを作成するときに特定のイメージに置き換えられます。Cloud Run
次の内容のファイルを
service.yamlという名前で作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-deploy-policy-run-service spec: template: spec: containers: - image: my-app-imageこのファイルは基本的な Cloud Run サービス定義であり、アプリケーションのデプロイに使用されます。デプロイするコンテナ イメージは、プレースホルダ
my-app-imageとしてここに設定されます。このプレースホルダは、リリースを作成するときに特定のイメージに置き換えられます。
デリバリー パイプラインとターゲットを作成する
デリバリー パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、両方を含む 1 つのファイルを作成します。
デリバリー パイプラインとターゲット定義を作成:
GKE
deploy-policy-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprodCloud Run
deploy-policy-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production Run service run: location: projects/PROJECT_ID/locations/us-central1パイプラインとターゲット リソースを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
これで、1 つのデリバリー パイプラインと 1つのターゲットが作成されました。
次のとおりに、パイプラインとターゲットを確認します。
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
作成したデリバリー パイプラインが表示され、[ターゲット] 列に 1 つのターゲットが表示されます。

デプロイ ポリシーを作成する
デプロイ ポリシーは、デリバリー パイプラインとターゲットと同じファイルで定義することも、別のファイルで定義することもできます。このクイックスタートでは、別に定義します。
デリバリー パイプラインとターゲットを作成したディレクトリに、次の内容の新しいファイル
deploypolicy.yamlを作成します。apiVersion: deploy.cloud.google.com/v1 description: Restrict all rollouts in the deploy-policy-pipeline resource for the next ten years kind: DeployPolicy metadata: name: quickstart-deploy-policy selectors: - deliveryPipeline: id: 'deploy-policy-pipeline' rules: - rolloutRestriction: id: no-rollouts timeWindows: timeZone: America/New_York oneTimeWindows: - start: 2024-01-01 00:00 end: 2034-01-01 24:00このポリシーにより、2024 年 1 月 1 日から 10 年間ロールアウトがブロックされます。これは現実的なポリシーではありません。このクイックスタートでのみ、リリースを作成するときにポリシーが確実に適用されるように、このように設定されています。
デプロイ ポリシー リソースを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
デプロイ ポリシーを確認します。
Google Cloud コンソールで、Cloud Deploy の [デプロイ ポリシー] ページに移動し、使用可能なポリシーのリストを表示します。
作成したデプロイ ポリシーが表示されます。
![Google Cloud コンソールの [ポリシーのデプロイ] ページ](https://docs.cloud.google.com/static/deploy/images/deploy-policies-page.png?hl=ja)
リリースを作成する
リリースは Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。このライフサイクルの詳細については、Cloud Deploy のサービス アーキテクチャをご覧ください。
GKE
deploy-policy-quickstart ディレクトリから次のコマンドを実行して、リリースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
--images= フラグに注目してください。これは、マニフェストまたはサービス定義のプレースホルダ(my-app-image)を特定の SHA 修飾イメージに置き換えるために使用します。Google は、この方法でマニフェストをテンプレート化し、リリース作成時に SHA 修飾イメージ名を使用することをおすすめします。
Cloud Run
deploy-policy-quickstart ディレクトリから次のコマンドを実行して、リリースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
--images= フラグに注目してください。これは、マニフェストまたはサービス定義のプレースホルダ(my-app-image)を特定の SHA 修飾イメージに置き換えるために使用します。Google は、この方法でマニフェストをテンプレート化し、リリース作成時に SHA 修飾イメージ名を使用することをおすすめします。
通常、このコマンドを使用してリリースを作成すると、Cloud Deploy は最初のターゲットへのロールアウトを作成します。この場合、ロールアウトはデプロイ ポリシーに従って制限されるため、ロールアウトは作成されません。コマンドラインにエラー メッセージが表示されます。
ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy"
policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no-rollouts"
ポリシーの制限をオーバーライドする
デプロイ ポリシーによってブロックされているサンプル アプリケーションをデプロイするには、そのポリシーをオーバーライドする必要があります。これを行うために、今回は --override-deploy-policies オプションを含めた新しいロールアウトをこのリリースに対して作成します。
GKE
deploy-policy-quickstart ディレクトリから次のコマンドを実行して、リリースを作成します。
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Cloud Run
deploy-policy-quickstart ディレクトリから次のコマンドを実行して、リリースを作成します。
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
--override-deploy-policies=quickstart-deploy-policy を含めており、roles/clouddeploy.policyAdmin ロールが付与されているため、Cloud Deploy は作成したデプロイ ポリシーを無視し、prod-target へのロールアウトを作成します。
Google Cloud コンソールで結果を表示する
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動して、デリバリー パイプライン(
deploy-policy-pipeline)を表示します。デリバリー パイプラインの名前(
deploy-policy-pipeline)をクリックします。可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。この場合、ポリシーがオーバーライドされたため、ロールアウトが作成され、成功しました。

リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
GKE クラスタまたは Cloud Run サービスを削除します。
GKE
gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_IDCloud Run
gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_IDデプロイ ポリシーを削除します。
gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID次のように、デリバリー パイプライン、ターゲット、リリース、ロールアウトを削除します。
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDCloud Deploy によって作成された Cloud Storage バケットを両方とも削除します。
これでクイックスタートの演習はすべて終了です。