GSP393

概要
チャレンジラボでは、シナリオと一連のタスクが提供されます。手順ガイドに沿って進める形式ではなく、コース内のラボで習得したスキルを駆使して、ご自身でタスクを完了していただきます。タスクが適切に完了したかどうかは、このページに表示される自動スコアリング システムで確認できます。
チャレンジラボは、Google Cloud の新しいコンセプトについて学習するためのものではありません。デフォルト値を変更する、エラー メッセージを読み調査を行ってミスを修正するなど、習得したスキルを応用する能力が求められます。
100% のスコアを達成するには、制限時間内に全タスクを完了する必要があります。
このラボは、「Implement CI/CD Pipelines on Google Cloud」コースに登録している受講者に推奨されます。準備が整ったらチャレンジを開始しましょう。
テスト対象トピック
- コンテナで Cloud Build と Artifact Registry を使用する。
- Skaffold を使用して Cloud Deploy パイプラインを設定する。
- プロモーションを承認して複数の環境にデプロイする。
- デプロイをロールバックする。
設定
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
環境に対するすべての変更は、ラボのプロビジョニングが完了してから行う必要があります。ラボの準備が整うと、作業に必要な事前構成された環境が使用可能になります。
チャレンジ シナリオ
あなたは Jooli Inc. のクラウド エンジニアという新たな役割を担うことになりました。モダナイゼーションの実施を決定した新しい経営陣は、従来のシステムをマネージド インフラストラクチャと自動化された統合およびデリバリー パイプラインに完全に置き換えることが最善だと考えています。これを達成するために、あなたは最適なツールとサービスを見つけてテストするよう指示されました。
経営陣は、以下のすべてに対応できる概念実証を今日中に確認することを希望しています。
- 安全で信頼性の高いレジストリに保存されたコンテナ イメージ。
- セキュリティの脆弱性に関する詳細なレポートとコンテナ イメージの自動スキャン。
- マネージド インフラストラクチャで実行されるテスト ウェブ アプリケーション。
- 手動エラーを排除するためにコードとして定義された CI / CD パイプライン。
- コードをデプロイし、本番のような環境にプロモートする、または必要に応じてロールバックするための簡単かつ迅速で信頼性の高い方法。
あなたには、Jooli Inc. のクラウド インフラストラクチャとデプロイのツールを管理することが求められています。この役割の一般的なタスクには、Jooli Inc. が効果的にモダナイズを行ってベスト プラクティスに沿えるようにするための新しいプロダクトとサービスの実装や、プロジェクトのリソースのプロビジョニングなどが含まれます。
これらのタスクに関するスキルや知識があるという前提のため、手順ガイドは提供されません。
従う必要がある Jooli Inc. の規則は以下のとおりです。
- 特別な指示がない限り、すべてのリソースを リージョンに作成すること。
- プロジェクトのデフォルト VPC を使用すること。
- 費用対効果の高いリソースサイズを割り当てること。プロジェクトはモニタリングされており、リソースが過剰に使用された場合、そのリソースを含むプロジェクトが終了する(あなたのプロジェクトも終了する可能性がある)ため注意が必要です。これはモニタリング チームによるガイダンスであり、指示がない限りデフォルトのマシンタイプを使用します。
チャレンジ
席に着いてノートパソコンを開くと、次の一連のタスクを完了してほしいというリクエストが届いていました。それでは始めましょう。
- 事前準備 - API を有効にし、GKE クラスタを作成して、Artifact Registry で Docker リポジトリを作成する。
- ソースコードのクローンを作成し、イメージをビルドして Artifact Registry に push する。
- デリバリー パイプライン、ターゲット、リリースを作成する。
- イメージを再ビルドして push し、「latest」でタグ付けする。
- 最新バージョンで新しいリリースを作成する。
- 最新リリースを 2 つ目のクラスタにプロモートする。
- 2 つ目のクラスタへの変更をロールバックし、変更して再リリースする。
タスク 1. 事前準備 - 環境を設定し、API を有効にしてクラスタを作成する
- プロジェクト ID の環境変数を設定します(これは、以下の複数の構成ファイルで使用されるため重要です)。以下のコマンドを使用できます。
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION={{{ project_0.default_region }}}
gcloud config set compute/region $REGION
- 次のコマンドを使用して、Google Cloud プロジェクトで次のサービスを有効にします。
- container.googleapis.com
- clouddeploy.googleapis.com
- artifactregistry.googleapis.com
- cloudbuild.googleapis.com
gcloud services enable \
container.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
- 次のコマンドを使用して、Kubernetes と Cloud Deploy の両方で権限を有効にします。
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"
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 Build でソースとログを保存するための Cloud Storage バケットを作成します。
gsutil mb -p $PROJECT_ID gs://${PROJECT_ID}_cloudbuild
- アーティファクト リポジトリを作成します。
Docker コンテナを保存するリポジトリを作成します。
リポジトリに以下の名前を付けます: cicd-challenge
gcloud artifacts repositories create cicd-challenge \
--description="Image registry for tutorial web app" \
--repository-format=docker \
--location=$REGION
- Google Kubernetes Engine クラスタを作成します。
ステージングと本番環境用に cd-staging
と cd-production
という名前の 2 つの GKE クラスタを作成します。クラスタは、シングルゾーンかつシングルノードである必要があります。
gcloud container clusters create cd-staging --node-locations={{{ project_0.default_zone }}} --num-nodes=1 --async
gcloud container clusters create cd-production --node-locations={{{ project_0.default_zone }}} --num-nodes=1 --async
タスク 2. イメージをビルドしてリポジトリにアップロードする
- 以下のコマンドを使用して、ラボ用のリポジトリのクローンをホーム ディレクトリに作成します。
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
これにより、アプリケーションのコンテナ イメージを Skaffold でビルドする方法を指定する skaffold.yaml 構成ファイルが web ディレクトリに配置されます。
- skaffold コマンドを実行してアプリケーションをビルドし、前に作成した Artifact Registry リポジトリにコンテナ イメージをデプロイします。
ヒント: 先ほど作成したリポジトリのフルパスを使用します
cd web
skaffold build --interactive=false \
--default-repo <ここにアーティファクト リポジトリを挿入> \
--file-output artifacts.json
cd ..
コンテナが作成され、リポジトリに追加されたことを確認します。
タスク 3.
デリバリー パイプラインを作成する
次のコマンドを実行して、パイプライン テンプレート ファイルをコピーします。
- delivery-pipeline.yaml ファイルを使用して delivery-pipeline リソースを作成します。
cp clouddeploy-config/delivery-pipeline.yaml.template clouddeploy-config/delivery-pipeline.yaml
sed -i "s/targetId: staging/targetId: cd-staging/" clouddeploy-config/delivery-pipeline.yaml
sed -i "s/targetId: prod/targetId: cd-production/" clouddeploy-config/delivery-pipeline.yaml
sed -i "/targetId: test/d" clouddeploy-config/delivery-pipeline.yaml
-
deploy/region
構成パラメータを使用して、デプロイ リージョンを設定します。
-
gcloud beta deploy
コマンドを使用して、上記で作成したパイプライン構成を適用します。
- 以下のコマンドを使用して、デリバリー パイプラインが作成されたことを確認します。
gcloud beta deploy delivery-pipelines describe web-app
デプロイ ターゲットを構成する
2 つのデリバリー パイプライン ターゲット(GKE クラスタごとに 1 つずつ)が作成されます。
クラスタの準備が完了していることを確認する
2 つの GKE クラスタはすでに実行中になっているはずですが、ここで確認しておくことをおすすめします。
gcloud container clusters list --format="csv(name,status)"
以下の出力に示されるように、すべてのクラスタが RUNNING 状態になっているはずです。RUNNING とマークされていない場合は、それらのステータスが RUNNING に変わるまで上記のコマンドを再試行します。
各クラスタのコンテキストを作成する
- 以下のコマンドを使用して、各クラスタの認証情報を取得し、後でクラスタを参照するときに簡単に使えるように kubectl コンテキストを作成します。
CONTEXTS=({INSERT YOUR TARGETS HERE})
for CONTEXT in ${CONTEXTS[@]}
do
gcloud container clusters get-credentials ${CONTEXT} --region ${REGION}
kubectl config rename-context gke_${PROJECT_ID}_${REGION}_${CONTEXT} ${CONTEXT}
done
各クラスタに名前空間を作成する
- 以下のコマンドを使用して、クラスタのそれぞれに Kubernetes 名前空間(web-app)を作成します。
for CONTEXT in ${CONTEXTS[@]}
do
kubectl --context ${CONTEXT} apply -f kubernetes-config/web-app-namespace.yaml
done
デリバリー パイプライン ターゲットを作成する
- 以下のコマンドを使用して、各ターゲットのターゲット定義ファイルを作成します(変更は不要です)。
envsubst < clouddeploy-config/target-staging.yaml.template > clouddeploy-config/target-cd-staging.yaml
envsubst < clouddeploy-config/target-prod.yaml.template > clouddeploy-config/target-cd-production.yaml
sed -i "s/staging/cd-staging/" clouddeploy-config/target-cd-staging.yaml
sed -i "s/prod/cd-production/" clouddeploy-config/target-cd-production.yaml
- ターゲット ファイルを Cloud Deploy に適用します。
ターゲットは yaml ファイルに記述されます。ターゲットごとに、関連するクラスタの情報が構成されます。
ステージング ターゲットの詳細を表示します。
cat clouddeploy-config/target-cd-staging.yaml
Cloud Deploy ターゲットが作成されていることを確認します。
タスク 4. リリースを作成する
-
gcloud beta deploy releases
コマンドと、先ほど作成した skaffold ファイルと artifacts.json ファイルを使用してリリースを作成します。
- リリースに
web-app-001
という名前を付け、delivery-pipeline web-app
を使用します。
ヒント: ソース ディレクトリは web/にする必要があります
- 以下のコマンドまたはコンソールを使用して、アプリケーションがステージング環境(cd-staging)にデプロイされていることを確認します。
gcloud beta deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001

ステージング環境へのリリースを確認します。
タスク 5. アプリケーションを本番環境にプロモートする
- アプリケーションをステージング(cd-staging)環境から本番(cd-production)環境にプロモートします。
ヒント: 必ずデプロイを承認するようにしてください
本番環境へのリリースを確認します。
タスク 6. アプリケーションを変更して再デプロイする
- エディタを使用して、
cloud-deploy-tutorials/tutorials/base/web/leeroy-app/
ディレクトリを開き、app.go
ファイルを変更します。24 行目を fmt.Fprintf(w, "leeroooooy app v2!!\n")
に変更します。
-
アプリケーションをビルドして Artifact Registry に push します。
-
先ほど作成したパイプラインで新しいリリースを作成します。そのリリースに
web-app-002
という名前を付けます。
- 新しいバージョンがステージング環境にデプロイされていることを確認します。
gcloud beta deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-002
タスク 7. 変更をロールバックする
ステージングへのリリースでQA エンジニアがバグを発見したため、以前のバージョンにロールバックする必要があります。
-
Cloud Deploy を使用して、アプリケーションの元のバージョン(
web-app-001
)にロールバックします。
- 元のバージョンが実行されていることを確認します。
ロールバックが正常に実行されたことを確認します。
お疲れさまでした
このラボでは、Google Cloud Deploy と Artifact Registry を使用して CI / CD パイプラインを設定し、経営陣からのすべての要件を満たす概念実証を作成しました。Jooli Inc. は、アプリケーションのモダナイゼーションによってもたらされたメリットを活かしながら、ROI の向上に向けて順調に進んでいます。

次のスキルバッジを獲得する
このラボは、「Implement CI/CD Pipelines on Google Cloud」コースの一部です。このスキルバッジ コースを完了すると、成果が認められて上のようなバッジが贈られます。獲得したバッジを履歴書やソーシャル プラットフォームに掲載し、#GoogleCloudBadge を使用してスキルをアピールしましょう。
このコースは、Google Cloud の DevSecOps 学習プログラムの一部です。DevSecOps 学習プログラムで学習を続けましょう。
次のステップと詳細情報
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 5 月 19 日
ラボの最終テスト日: 2025 年 5 月 19 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。