概要
Google Cloud Deploy は、定義したプロモーション シーケンスでの一連のターゲット環境へのアプリケーションの配信を自動化するマネージド サービスです。更新したアプリケーションをデプロイする場合は、リリースを作成します。リリースのライフサイクルは、デリバリー パイプラインによって管理されます。
このラボでは、Google Cloud Deploy を使用してデリバリー パイプラインを作成します。その後、基本的なアプリケーションのリリースを作成し、一連の Google Kubernetes Engine(GKE)ターゲットを通してアプリケーションをプロモートします。
サンプル アプリケーションは、ポートをリッスンして、HTTP レスポンス コードを返し、ログエントリを追加するシンプルなウェブアプリです。
目標
このラボでは、次のタスクの実行方法について学びます。
- Skaffold を使用してコンテナ イメージを Google Cloud Artifact Registry にデプロイする
- Google Cloud Deploy デリバリー パイプラインを作成する
- デリバリー パイプラインのためのリリースを作成する
- デリバリー パイプライン内のターゲットを通してアプリケーションをプロモートする
ラボの設定
Qwiklabs にアクセスする
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。
左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] パネルでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] パネルでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
最初のログイン手順を完了すると、プロジェクト ダッシュボードが表示されます。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
タスク 1. 3 つの GKE クラスタを作成する
このタスクでは、デリバリー パイプラインのターゲットになる 3 つの GKE クラスタを作成します。
3 つの GKE クラスタが作成され、デリバリー パイプラインの 3 つのターゲットが示されます。
- さまざまなコマンドで使用される環境変数を宣言します。
export PROJECT_ID=$(gcloud config get-value project)
export REGION={{{ project_0.default_region | "REGION" }}}
gcloud config set compute/region $REGION
- Google Kubernetes Engine API を有効にします。
gcloud services enable \
container.googleapis.com \
clouddeploy.googleapis.com
- Cloud Shell で kubectl のタブ補完を構成します。
source <(kubectl completion bash)
- 3 つの GKE クラスタを作成します。
gcloud container clusters create-auto test --async
gcloud container clusters create-auto staging --async
gcloud container clusters create-auto prod --async
注: --async フラグも使用することで、クラスタをバックグラウンドでプロビジョニングしながら、パイプラインの他の要素の設定を続けることができます。
- 3 つのクラスタのステータスを確認します。
gcloud container clusters list --format="csv(name,status)"
注: --async フラグを使用しているため、このコマンドがクラスタ デプロイのステータスを取得する手段になります。
出力
name,status
prod,PROVISIONING
staging,PROVISIONING
test,RUNNING
クラスタの作成には数分かかることがあります。クラスタの準備が完了するまで待つ必要はありません。ラボを続けます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
3 つの GKE クラスタを作成する
タスク 2. ウェブ アプリケーションのコンテナ イメージを準備する
このタスクでは、ウェブ アプリケーションのコンテナ イメージを格納する Artifact Registry のリポジトリを作成します。
- Artifact Registry API を有効にします。
gcloud services enable artifactregistry.googleapis.com
- コンテナ イメージを格納する web-app リポジトリを作成します。
gcloud artifacts repositories create web-app \
--description="Image registry for sample web app" \
--repository-format=docker \
--location=$REGION
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
web-app リポジトリを作成する
タスク 3. コンテナ イメージをビルドして Artifact Registry にデプロイする
このタスクでは、ウェブ アプリケーションを含む git リポジトリのクローンを作成し、アプリケーションのコンテナ イメージを Artifact Registry にデプロイします。
アプリケーションの構成を準備する
- ラボ用にリポジトリのクローンをホーム ディレクトリに作成します。
cd ~/
git clone https://github.com/GoogleCloudPlatform/cloud-deploy-tutorials.git
cd cloud-deploy-tutorials
git checkout c3cae80 --quiet
cd tutorials/base
-
skaffold.yaml
構成ファイルを作成します。
envsubst < clouddeploy-config/skaffold.yaml.template > web/skaffold.yaml
cat web/skaffold.yaml
注: envsubst コマンドは、検索と置換を行うコマンドです。
これにより、アプリケーションのコンテナ イメージを Skaffold でビルドする方法を指定する skaffold.yaml
構成ファイルが web ディレクトリに配置されます。この構成で記述する項目は次のとおりです。
build セクションで以下を構成します。
- ビルドする 2 つのコンテナ イメージ(アーティファクト)
- イメージのビルドに使用する Google Cloud Build プロジェクト
deploy
セクションでは、クラスタへのワークロードのデプロイで必要になる Kubernetes マニフェストを構成します。
portForward
の構成は、デプロイ用の Kubernetes サービスの定義に使用します。
出力
apiVersion: skaffold/v2beta7
kind: Config
build:
artifacts:
- image: leeroy-web
context: leeroy-web
- image: leeroy-app
context: leeroy-app
googleCloudBuild:
projectId: {{project-id}}
deploy:
kubectl:
manifests:
- leeroy-web/kubernetes/*
- leeroy-app/kubernetes/*
portForward:
- resourceType: deployment
resourceName: leeroy-web
port: 8080
localPort: 9000
注: ファイルを確認するには、vi、emacs、nano を使用するか、Cloud Shell で [エディタを開く] アイコンをクリックして Cloud Shell コードエディタを使用します。
ウェブ アプリケーションをビルドする
Cloud Build へのコードベースの送信は skaffold ツールで処理されます。
- Cloud Build API を有効にします。
gcloud services enable cloudbuild.googleapis.com
- skaffold コマンドを実行してアプリケーションをビルドし、前に作成した Artifact Registry リポジトリにコンテナ イメージをデプロイします。
cd web
skaffold build --interactive=false \
--default-repo $REGION-docker.pkg.dev/$PROJECT_ID/web-app \
--file-output artifacts.json
cd ..
- skaffold によるビルドが完了したら、Artifact Registry でコンテナ イメージを確認します。
gcloud artifacts docker images list \
$REGION-docker.pkg.dev/$PROJECT_ID/web-app \
--include-tags \
--format yaml
--format yaml
パラメータは、読みやすくするために出力を YAML として返します。出力は次のようになります。
出力
---
createTime: '2024-09-11T02:07:54.995807Z'
package: us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-app
tags: '9181623'
updateTime: '2024-09-11T02:07:54.995807Z'
version: sha256:6af6a0a72d13dd6597c0fc0191f697e2da2c3892d1bf8e87a3df8d96612e1495
---
createTime: '2024-09-11T02:07:53.629263Z'
package: us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-web
tags: '9181623'
updateTime: '2024-09-11T02:07:53.629263Z'
version: sha256:a0179673d1876f205875b223557c83162e56e91c5e3313f5e99465a224adb6c9
デフォルトで Skaffold は、イメージのタグをその関連する git タグに設定します(利用可能な場合)。同様の情報は、skaffold コマンドで作成された artifacts.json
ファイルで確認できます。
デプロイされたイメージの詳細を含む web/artifacts.json
ファイルが Skaffold で生成されます。
cat web/artifacts.json | jq
出力
{
"builds": [
{
"imageName": "leeroy-web",
"tag": "us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-web:9181623@sha256:a0179673d1876f205875b223557c83162e56e91c5e3313f5e99465a224adb6c9"
},
{
"imageName": "leeroy-app",
"tag": "us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-app:9181623@sha256:6af6a0a72d13dd6597c0fc0191f697e2da2c3892d1bf8e87a3df8d96612e1495"
}
]
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
コンテナ イメージをビルドして Artifact Registry にデプロイする
タスク 4. デリバリー パイプラインを作成する
このタスクでは、デリバリー パイプラインを設定します。パイプラインでアプリを test から staging に、staging から prod にプロモートします。
- Google Cloud Deploy API を有効にします。
gcloud services enable clouddeploy.googleapis.com
-
delivery-pipeline.yaml
ファイルを使用して delivery-pipeline リソースを作成します。
gcloud config set deploy/region $REGION
cp clouddeploy-config/delivery-pipeline.yaml.template clouddeploy-config/delivery-pipeline.yaml
gcloud deploy apply --file=clouddeploy-config/delivery-pipeline.yaml
- デリバリー パイプラインが作成されたことを確認します。
gcloud deploy delivery-pipelines describe web-app
デリバリー パイプラインが次のように表示されます。
出力
Unable to get target test
Unable to get target staging
Unable to get target prod
Delivery Pipeline:
createTime: '2024-09-11T14:03:18.294884547Z'
description: web-app delivery pipeline
etag: 2539eacd7f5c256d
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app
serialPipeline:
stages:
- targetId: test
- targetId: staging
- targetId: prod
uid: eb0601aa03ac4b088d74c6a5f13f36ae
updateTime: '2024-09-11T14:03:18.680753520Z'
Targets: []
出力の最初の 3 行に注目してください。現在は、まだ作成されていない 3 つのターゲット環境をデリバリー パイプラインで参照しています。次のタスクで、それらのターゲットを作成します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
デリバリー パイプラインを作成する
タスク 5. デプロイ ターゲットを構成する
GKE クラスタごとに 1 つずつ、3 つのデリバリー パイプライン ターゲットが作成されます。
クラスタの準備が完了していることを確認する
3 つの GKE クラスタはすでに実行中になっているはずですが、ここで確認しておくことをおすすめします。
gcloud container clusters list --format="csv(name,status)"
以下の出力に示すように、3 つのクラスタがいずれも RUNNING 状態になっているはずです。まだ RUNNING とマークされていない場合は、それらのステータスが RUNNING に変わるまで上記のコマンドを再試行します。
出力
name,status
prod,RUNNING
staging,RUNNING
test,RUNNING
すべてのクラスタのステータスが「RUNNING」になったら、ラボを続けます。
各クラスタのコンテキストを作成する
以下のコマンドを使用して、各クラスタの認証情報を取得し、後でクラスタを参照するときに簡単に使えるように kubectl
コンテキストを作成します。
CONTEXTS=("test" "staging" "prod")
for CONTEXT in ${CONTEXTS[@]}
do
gcloud container clusters get-credentials ${CONTEXT} --region ${REGION}
kubectl config rename-context gke_${PROJECT_ID}_${REGION}_${CONTEXT} ${CONTEXT}
done
各クラスタに Namespace を作成する
以下のコマンドを使用して、3 つのクラスタのそれぞれに Kubernetes Namespace(web-app)を作成します。
for CONTEXT in ${CONTEXTS[@]}
do
kubectl --context ${CONTEXT} apply -f kubernetes-config/web-app-namespace.yaml
done
アプリケーションが(web-app)Namespace にデプロイされるようになります。
デリバリー パイプライン ターゲットを作成する
- 各ターゲットのターゲット定義を送信します。
for CONTEXT in ${CONTEXTS[@]}
do
envsubst < clouddeploy-config/target-$CONTEXT.yaml.template > clouddeploy-config/target-$CONTEXT.yaml
gcloud deploy apply --file clouddeploy-config/target-$CONTEXT.yaml
done
ターゲットは yaml ファイルに記述されます。ターゲットごとに、そのターゲットに関連するクラスタの情報が構成されます。test ターゲットと staging ターゲットの構成はほぼ同じです。
- test ターゲットの詳細を表示します。
cat clouddeploy-config/target-test.yaml
出力
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: test
description: test cluster
gke:
cluster: projects/{{project-id}}/locations/us-central1/clusters/test
prod ターゲットは、リリースをクラスタにプロモートする前に承認が必要なため少し異なります(出力の requireApproval
の設定を参照)。
- prod ターゲットの詳細を表示します。
cat clouddeploy-config/target-prod.yaml
出力
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
description: prod cluster
requireApproval: true
gke:
cluster: projects/{{project-id}}/locations/us-central1/clusters/prod
- 3 つのターゲット(test、staging、prod)が作成されたことを確認します。
gcloud deploy targets list
以上で、デリバリー パイプライン用のすべての Google Cloud Deploy ターゲットが作成されました。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
デプロイ ターゲットを構成する
タスク 6. リリースを作成する
このタスクでは、アプリケーションのリリースを作成します。
Google Cloud Deploy リリースは、特定のデリバリー パイプラインに関連付けられた 1 つ以上のコンテナ イメージの特定のバージョンです。リリースを作成すると、複数のターゲット(プロモーション シーケンス)を通じてプロモートできます。さらに、リリースを作成すると、skaffold を使用してアプリケーションがレンダリングされ、そのリリース期間に使用されるポイントインタイム リファレンスとして出力が保存されます。
これがアプリケーションの最初のリリースであるため、web-app-001
という名前を付けます。
- 次のコマンドを実行してリリースを作成します。
gcloud deploy releases create web-app-001 \
--delivery-pipeline web-app \
--build-artifacts web/artifacts.json \
--source web/
--build-artifacts
パラメータは、前に skaffold で作成された artifacts.json
ファイルを参照します。--source
パラメータは、skaffold.yaml があるアプリケーションのソース ディレクトリを参照します。
リリースを作成すると、承認が不要な場合はパイプラインの最初のターゲットに自動的にロールアウトされます(承認が必要な場合については、このラボの後半のステップで説明します)。
- test ターゲットにアプリケーションがデプロイされていることを確認するには、次のコマンドを実行します。
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
出力
---
approvalState: DOES_NOT_NEED_APPROVAL
createTime: '2024-09-11T14:05:21.961604Z'
deployEndTime: '2024-09-11T14:06:35.278604Z'
deployStartTime: '2024-09-11T14:06:22.420091744Z'
deployingBuild: projects/{{project-id}}/locations/us-central1/builds/4815b788-ec5e-4185-9141-a5b57c71b001
enqueueTime: '2024-09-11T14:06:21.760830Z'
etag: 5cb7b6c342b5f29b
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-test-0001
state: SUCCEEDED
targetId: test
uid: cccd9525d3a0414fa60b2771036841d9
Google Cloud Deploy では、リリースの作成時にすべてのターゲットのマニフェストをレンダリングするため、リリースの最初のロールアウトには数分かかります。また、デプロイに必要なリソースが GKE クラスタから提供されるまでに数分かかることもあります。
前のコマンドの出力に「state: SUCCEEDED
」が表示されない場合は、ロールアウトが完了するまで定期的にコマンドを再実行して待ってください。
- 次のコマンドを実行して、アプリケーションが test GKE クラスタにデプロイされたことを確認します。
kubectx test
kubectl get all -n web-app
出力
NAME READY STATUS RESTARTS AGE
pod/leeroy-app-5547cf9d9b-rgc2l 1/1 Running 0 3m27s
pod/leeroy-web-6768b49c46-w7vt9 1/1 Running 0 3m27s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/leeroy-app ClusterIP None <none> 50051/TCP 3m28s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/leeroy-app 1/1 1 1 3m28s
deployment.apps/leeroy-web 1/1 1 1 3m28s
NAME DESIRED CURRENT READY AGE
replicaset.apps/leeroy-app-5547cf9d9b 1 1 1 3m28s
replicaset.apps/leeroy-web-6768b49c46 1 1 1 3m28s
注: kubectx コマンドを使用することで、コンテキストを簡単に切り替えることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
リリースを作成する
タスク 7. アプリケーションを staging にプロモートする
このタスクでは、アプリケーションを test ターゲットから staging ターゲットにプロモートします。
- アプリケーションを staging ターゲットにプロモートします。
gcloud deploy releases promote \
--delivery-pipeline web-app \
--release web-app-001
プロモーションの開始前に、続行するかどうかを確認するプロンプトが表示されます。
- Enter キーを押してデフォルト(Y = はい)を受け入れます。
- staging ターゲットにアプリケーションがデプロイされていることを確認するには、次のコマンドを実行します。
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
出力を確認する
「targetId: staging
」とマークされたセクションを探します。前と同じように、前のコマンドの出力に「state: SUCCEEDED
」が表示されない場合は、ロールアウトが完了するまで定期的にコマンドを再実行して待ちます。
出力
---
approvalState: DOES_NOT_NEED_APPROVAL
createTime: '2024-09-11T02:19:32.539468Z'
deployEndTime: '2024-09-11T02:19:45.970949Z'
deployStartTime: '2024-09-11T02:19:33.111948770Z'
deployingBuild: projects/743805075658/locations/us-central1/builds/2316517c-3a2f-4cd3-80ad-6d133b653746
etag: 1109b802ff586df5
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-staging-0001
state: SUCCEEDED
targetId: staging
uid: 80a35a5f044844708d2050f8c556e07e
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
アプリケーションを staging にプロモートする
タスク 8. アプリケーションを prod にプロモートする
このタスクでは、アプリケーションをもう一度プロモートしますが、今回は承認も行います。
- アプリケーションを prod ターゲットにプロモートします。
gcloud deploy releases promote \
--delivery-pipeline web-app \
--release web-app-001
プロモーションの開始前に、続行するかどうかを確認するプロンプトが表示されます。
- Enter キーを押してデフォルト(Y = はい)を受け入れます。
- prod ターゲットのステータスを確認するには、次のコマンドを実行します。
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
出力で approvalState
が NEEDS_APPROVAL
、state が PENDING_APPROVAL
になっていることに注意してください。
出力
---
approvalState: NEEDS_APPROVAL
createTime: '2024-09-11T14:12:07.466989Z'
etag: 6e9303e5a1b04084
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-prod-0001
state: PENDING_APPROVAL
targetId: prod
uid: a5c7d6007fee4d80904d49142581aaa7
- 次のようにしてロールアウトを承認します。
gcloud deploy rollouts approve web-app-001-to-prod-0001 \
--delivery-pipeline web-app \
--release web-app-001
プロモーションの開始前に、ロールアウトを承認するように求められます。
- Enter キーを押してデフォルト(Y = はい)を受け入れます。
- prod ターゲットにアプリケーションがデプロイされていることを確認するには、次のコマンドを実行します。
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
前のロールアウトと同じように、ターゲットのエントリ(targetId: prod
)を探し、ロールアウトが完了(state: SUCCEEDED
)したことを確認します。ロールアウトが完了するまで定期的にコマンドを再実行します。
-
kubectl
を使用して、デプロイされたアプリケーションのステータスを確認します。
kubectx prod
kubectl get all -n web-app
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
アプリケーションを prod にプロモートする
お疲れさまでした
Cloud Deploy を使用して継続的デリバリー パイプラインを作成できるようになりました。
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。