デプロイ パラメータを使用する
このページでは、Cloud Deploy を使用して、それぞれのレンダリングされたマニフェストまたはサービス定義に異なる 3 つの方法を使用して異なるパラメータ値を渡し、サンプル アプリケーションを 2 つのターゲットに同時に配信する(並列デプロイ)方法を説明します。
このクイックスタートでは、以下の内容を行います。
2 つの GKE クラスタまたは 2 つの Cloud Run サービスを作成します。
GKE 接続クラスタも使用できますが、このクイックスタートでは GKE と Cloud Run のみを使用します。
Skaffold 構成および、Kubernetes マニフェストまたは Cloud Run サービス定義のいずれかを作成します。
マニフェストまたはサービス定義は両方の子ターゲットで同じですが、デプロイ時に、このクイックスタートで構成された特定のパラメータに対して、子ターゲットごとにレンダリングされたマニフェストまたはサービスの定義には異なる値が設定されます。
Cloud Deploy デリバリー パイプラインとデプロイ ターゲットを定義します。
このパイプラインには、2 つのクラスタまたは 2 つのサービスにアプリを配信するための、2 つの子ターゲットを参照するマルチターゲットが 1 つあります。
3 つの異なる 場所でデプロイ パラメータを定義します。
- パイプラインの進行中に
- 子ターゲットで
- コマンドラインで、リリースを作成するとき
リリースを作成してデリバリー パイプラインをインスタンス化します。リリースは自動的に 2 つのターゲットに並行してデプロイされます。
コンソールで「コントローラのロールアウト」と子のロールアウトを表示します。 Google Cloud
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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, 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 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, 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 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
- 最初に、
CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。
gcloud components update
ランタイム環境を作成する
Cloud Run にデプロイする場合は、以下のコマンドをスキップできます。
GKE の場合は、デフォルト設定で deploy-params-cluster-prod1 と deploy-params-cluster-prod2 の 2 つのクラスタを作成します。クラスタの Kubernetes API エンドポイントは、公共のインターネットからネットワークに到達可能である必要があります。
GKE クラスタには、デフォルトで外部からアクセス可能です。
gcloud container clusters create-auto deploy-params-cluster-prod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto deploy-params-cluster-prod2 \
--project=PROJECT_ID \
--region=us-west1
Skaffold 構成とマニフェストを準備する
Cloud Deploy では、Skaffold を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。
このクイックスタートでは、skaffold.yaml ファイルを作成して、サンプルアプリのデプロイに使用する Kubernetes マニフェストまたは Cloud Run サービス定義を識別します。
ターミナル ウィンドウを開きます。
新しいディレクトリを作成し、そのディレクトリに移動します。
GKE
mkdir deploy-params-gke-quickstart cd deploy-params-gke-quickstartCloud Run
mkdir deploy-params-run-quickstart cd deploy-params-run-quickstart次の内容のファイルを
skaffold.yamlという名前で作成します。GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}このファイルは、最小限の Skaffold 構成ファイルです。このクイックスタートでは、このファイルを作成します。ただし、Cloud Deploy で作成することで、単純な非本番環境アプリケーション用に作成することもできます。
この構成ファイルの詳細については、
skaffold.yamlリファレンスをご覧ください。Cloud Run サービス定義または GKE Kubernetes マニフェストでアプリケーションの定義を作成します。
GKE
次の内容のファイルを
kubernetes.yamlという名前で作成します。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 # from-param: ${replicaCount} selector: matchLabels: app: my-app template: metadata: labels: app: my-app annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - name: nginx image: my-app-image env: - name: envvar1 value: default1 # from-param: ${application_env1} - name: envvar2 value: default2 # from-param: ${application_env2}このファイルは Kubernetes マニフェストで、クラスタに適用してアプリケーションを デプロイします。デプロイするコンテナ イメージは、プレースホルダ
my-app-imageとして設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。Cloud Run
次の内容のファイルを
service.yamlという名前で作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances} selector: matchLabels: app: my-app template: metadata: annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - image: my-app-image env: - name: envvar1 value: defaultValue1 # from-param: ${application_env1} - name: envvar2 value: defaultValue2 # from-param: ${application_env2}このファイルは基本的な Cloud Run サービス定義であり、アプリケーションのデプロイに使用されます。デプロイするコンテナ イメージ は、プレースホルダ
my-app-imageとして設定されます。これは、リリースを作成するときに 特定のイメージに置き換えられますcreate the release。
デリバリー パイプラインとターゲットの作成
パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、1 つのファイルを作成します。
デリバリー パイプラインとターゲット定義を作成:
GKE
deploy-params-gke-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: replicaCount: "2" # Apply the deploy parameter replicaCount: "2" to the target with this label matchTargetLabels: label1: label1 - values: replicaCount: "3" # Apply the deploy parameter replicaCount: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2Cloud Run
deploy-params-run-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: minInstances: "2" # Apply the deploy parameter minInstances: "2" to the target with this label matchTargetLabels: label1: label1 - values: minInstances: "3" # Apply the deploy parameter minInstances: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" run: location: projects/PROJECT_ID/locations/us-west1パイプラインとターゲットを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_IDこれで、2 つの GKE ターゲットまたは Cloud Run ターゲットから成るマルチターゲットを有するパイプラインが作成されました。これで、アプリケーションをデプロイする準備が整いました。
次のように、パイプラインとターゲットを確認します。
コンソールで、Cloud Deploy の [**デリバリー パイプライン**] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。 Google Cloud
作成したデリバリー パイプラインが表示されます。
clouddeploy.yamlファイルで 3 つのターゲット(1 つのマルチ ターゲットと 2 つの子ターゲット)を構成している場合でも、[ターゲット] 列に 1 つのターゲットが表示されます。
リストにあるターゲットはマルチターゲット
params-prod-multiのみです。子ターゲットは表示されません。
リリースを作成する
リリースは Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。このライフサイクルの詳細については、Cloud Deploy のサービス アーキテクチャをご覧ください。
GKE
deploy-gke-parallel-quickstart
ディレクトリから次のコマンドを実行して、デプロイするコンテナ
イメージを表す release リソースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-params-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
--deploy-parameters="git-sha=f787cac"
--images= フラグに注意してください。
このフラグを使用して、
マニフェスト
内のプレースホルダ(my-app-image)を特定の SHA 修飾イメージに置き換えます。このようにマニフェストを
テンプレート化し、リリース作成時に SHA 修飾イメージ
名を使用することをおすすめします。
Cloud Run
deploy-run-parallel-quickstart
ディレクトリから次のコマンドを実行して、デプロイするコンテナ
イメージを表す release リソースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-params-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
--deploy-parameters="git-sha=f787cac"
--images= フラグに注意してください。
このフラグを使用して、
サービス定義
内のプレースホルダ(my-app-image)を特定の SHA 修飾イメージに置き換えます。このようにサービス定義とジョブ定義をテンプレート化し、リリース作成時に SHA 修飾イメージ名を使用することをおすすめします。
通常どおり、リリースを作成すると、パイプラインの最初のターゲット(
--to-target= を使用して特定のターゲットが指定されている場合)のロールアウトが自動的に作成されます。このクイックスタートでは、このターゲットはマルチターゲットです。そのため、
rollout は 2 つの
子ターゲットの「コントローラ ロールアウト」であり、デリバリー パイプラインには後続のターゲットはありません。
つまり、ロールアウトが作成されるたびにアプリケーションがデプロイされます。
コンソールで結果を表示する Google Cloud
リリースの作成が完了し、コントローラのロールアウトと子ロールアウトが作成されたので、それらの子ロールアウトはそれぞれの GKE クラスタまたは Cloud Run サービスにデプロイされ(またはすでにデプロイ処理中)ます。
コンソールで、Cloud Deploy の [**デリバリー パイプライン**] ページに移動し、**my-parallel-demo-app-1** デリバリー パイプラインを表示します。 Google Cloud
デリバリー パイプラインの名前「my-parallel-demo-app-1」をクリックします。
可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。パイプラインには 1 つのステージしかないため、可視化されたパイプラインにはノードが 1 つだけ表示されます。

リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。
リリース名
test-release-001をクリックします。ロールアウトが [ロールアウト] に表示されます。ロールアウトをクリックすると、デプロイログなどの詳細を表示できます。

[リリースの詳細] で、[アーティファクト] タブを選択します。
[デプロイ パラメータ] テーブルには、マニフェストで構成したすべてのパラメータと、それらのパラメータに指定した値が表示されます。
GKE

Cloud Run

パラメータと値に加えて、各パラメータが適用されるターゲットも表示されます。
[リリース インスペクタ] 列で、いずれかのターゲットの [アーティファクトを表示] をクリックします。
[差分を表示] をクリックし、1 つのターゲットに
params-prod-aを選択し、もう 1 つのターゲットにparams-prod-bを選択します。指定した値など、2 つのターゲットのレンダリングされたマニフェストを比較した差分が表示されます。
GKE

Cloud Run

クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、 次の手順を実施します。
GKE クラスタまたは Cloud Run サービスを削除します。
GKE
gcloud container clusters delete deploy-params-cluster-prod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete deploy-params-cluster-prod2 --region=us-west1 --project=PROJECT_IDCloud Run
gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_IDデリバリー パイプライン、マルチターゲット、子ターゲット、リリース、ロールアウトを削除します。
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDCloud Deploy によって作成された Cloud Storage バケットを削除します。
1 つは
_clouddeployで終わり、もう 1 つは[region].deploy-artifacts.[project].appspot.comで終わります。
これでクイックスタートの演習はすべて終了です。
次のステップ
デプロイ パラメータの使用の詳細を確認する。
詳細を確認する 複数のターゲットに同時にデプロイする方法について。
Cloud Deploy のチュートリアルをお試しください。
マニフェストを管理する方法を学習します。
CI/CD ツールを組み合わせてソフトウェアを効果的に開発し、GKE に提供する方法を確認する。 Google Cloud