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 を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。 - なお、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 Operator の権限を追加します。
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 コンソールで 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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。