1. 概要
このラボでは、Cloud Deploy を使用して .Net アプリケーションを Cloud Run にデプロイします。Dockerfile を使用せずに Cloud Build でコンテナ イメージをビルドします。Cloud Deploy で 3 つのターゲット環境を含むパイプラインを設定し、環境間でリリースをプロモートする手順を行います。最後に、本番環境にデプロイされるリリースを承認します。
Cloud Build とは
Cloud Build を使用すると、すべてのプログラミング言語でソフトウェアを迅速にビルドできます。
Cloud Deploy とは
Cloud Deploy は、フルマネージドの継続的デリバリー サービスです。Cloud Deploy を使用すると、GKE、Anthos、Cloud Run のデプロイ パイプラインを作成できます。
Cloud Run とは
Cloud Run を使用すると、あらゆる言語(Go、Python、Java、Node.js、.NET、Ruby など)で記述されたスケーラブルなコンテナ化されたアプリケーションをフルマネージド プラットフォームにデプロイできます。
Skaffold とは何ですか?
Skaffold は、Kubernetes ネイティブ アプリケーションの継続的な開発を可能にするコマンドライン ツールです。Cloud Deploy は、レンダリングとデプロイの操作に Skaffold を使用します。
学習内容
このラボでは、次の方法について学びます。
- Cloud Deploy パイプラインを作成する
- Dockerfile を使用せずに Cloud Build で .NET アプリケーションのコンテナ イメージを作成する
- Cloud Deploy を使用して Cloud Run にアプリケーションをデプロイする
- Cloud Deploy リリースを昇格する
前提条件
- このラボは、Cloud コンソールとシェル環境に精通していることを前提としています。
2. 設定と要件
Cloud プロジェクトの設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この場所はいつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_ID
と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
環境設定
検索バーの右側にあるアイコンをクリックして Cloud Shell を有効にします。
Cloud Shell で次のコマンドを実行して、プロジェクトの環境変数を設定します。
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
API の有効化:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
アプリケーション コンテナ イメージを保存する Artifact Registry リポジトリを作成します。
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. 構成ファイルを確認する
アプリケーションのソースコードのクローンを作成します。
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Cloud Deploy パイプラインの構成を確認します。
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
3 つの環境を定義し、ターゲット サービスとして Cloud Run を使用している skaffold.yaml
ファイルを確認します。
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
サービス構成ファイルを確認します。
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
コンテナ イメージのビルド手順と Cloud Deploy リリースの作成手順が記載された cloudbuild.yaml
ファイルを確認します。
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. Cloud Deploy パイプラインを作成する
clouddeploy.yaml の _PROJECT_ID の値を置き換えます。
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Cloud Deploy パイプラインを作成します。
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Cloud Deploy で作成されたパイプラインを確認します。
5. コンテナ イメージをビルドしてリリースを作成する
Cloud Build サービス アカウントに Cloud Deploy オペレータの権限を追加します。
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
コンテナ イメージと Cloud Deploy リリースを作成します。
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
Cloud Deploy で作成されたリリースを確認します。Dev 環境へのデプロイが完了するまで待ちます。
6. リリースを QA 環境と本番環境に昇格します。
Cloud コンソールまたは Cloud Shell を使用して、リリースを次のターゲット(qa-env)に昇格させます。
Cloud Shell でリリースを昇格させます。gcloud コマンドを実行してリリースを昇格させます。
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
QA 環境へのデプロイが完了するまで待ちます。リリースを次のターゲット(prod-env)にプロモートします。
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Cloud Console で Cloud Deploy を開き、本番環境デプロイ用のリリースを承認します。
Cloud Deploy パイプラインの状態と、利用可能な DORA 指標(「デプロイ数」、「デプロイの頻度」、「デプロイ失敗率」)を確認します。
指標 | 説明 |
デプロイの回数 | デリバリー パイプライン内の最終ターゲットへのデプロイの成功回数と失敗回数の合計。 |
デプロイの頻度 | デリバリー パイプラインがデリバリー パイプライン内の最終ターゲットにデプロイする頻度。DevOps Research and Assessment(DORA)プログラムで定義されている 4 つの主要な指標の 1 つ。 |
デプロイの失敗率 | デリバリー パイプラインの最終ターゲットへのロールアウトの失敗の割合。 |
Cloud Run でデプロイされたアプリケーションを確認します。
7. 完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- Cloud Deploy パイプラインを作成する方法
- Cloud Build を使用して .NET アプリケーションのコンテナ イメージを作成する方法
- Cloud Deploy を使用してアプリケーションを Cloud Run にデプロイする方法
- Cloud Deploy リリースを昇格させる方法
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。