Cloud Run を使用すると、サーバーレス環境でステートレス コンテナを実行できます。Cloud Build を使用すると、Container Registry(非推奨) と Artifact Registry から Cloud Run にコンテナ イメージをデプロイできます。既存のイメージのデプロイ、イメージのビルドとデプロイ、デプロイの自動化が可能です。
始める前に
-
Enable the Cloud Build, Cloud Run, Container Registry, and Resource Manager APIs.
アプリケーションのソースコードを用意します。 ソースコードは、Cloud Source Repositories、GitHub、Bitbucket などのリポジトリに保存する必要があります。
このページで
gcloud
コマンドを実行するには、Google Cloud CLI をインストールします。
必要な IAM 権限
デプロイ先と同じ Google Cloud プロジェクトにイメージが保存されている場合、またはイメージが Container Registry で公開されている場合は、次の IAM 権限が必要です。
Cloud Run にデプロイするには、ビルドに使用するサービス アカウントに Cloud Run 管理者とサービス アカウント ユーザーのロールを付与します。
Google Cloud コンソールで Cloud Build の設定ページを開きます。
プルダウン リストから、ロールを変更するサービス アカウントを選択します。
[サービス アカウント権限] パネルで、Cloud Run 管理者ロールのステータスを [有効] に設定します。
[追加の手順が必要になることがあります] ポップアップで [すべてのサービス アカウントにアクセス権を付与] をクリックします。
コンテナのビルドとデプロイ
Cloud Build を使用すると、コンテナ イメージをビルドして Container Registry にビルドイメージを保存し、そのイメージを Cloud Run にデプロイできます。
コンテナ イメージをビルドしてデプロイするには:
プロジェクトのルート ディレクトリに、
cloudbuild.yaml
という名前で構成ファイルを作成します。ビルド構成ファイルで、イメージをビルドする
docker
ビルドステップを追加し、イメージを Container Registry に push します。さらに、gcloud run deploy
コマンドを呼び出すgcloud
ビルドステップを追加し、Cloud Run にイメージをデプロイします。steps: # Build the container image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.'] # Push the container image to Container Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/PROJECT_ID/IMAGE'] # Deploy container image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'SERVICE_REGION'] images: - gcr.io/PROJECT_ID/IMAGE
ここで
SERVICE_NAME
は、Cloud Run サービスの名前です。SERVICE_REGION
は、デプロイする Cloud Run サービスのリージョンです。PROJECT_ID
は、イメージが保存されている Google Cloud プロジェクト ID です。IMAGE
は、Container Registry 内のイメージの名前です。
プロジェクトのルート ディレクトリに移動し、次のコマンドを実行します。
BUILD_REGION
は、サポートされているビルド リージョンのいずれかで、ビルドを実行します。gcloud builds submit --region=BUILD_REGION
正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。
継続的デプロイ
Cloud Build トリガーを作成すると、ソフトウェアの Cloud Run へのデプロイを自動化できます。トリガーを構成すると、ソースコードを更新するたびにイメージをビルドしてデプロイできます。
デプロイを自動化するには:
リポジトリのルートに、イメージをビルドするステップを含む
cloudbuild.yaml
という名前の構成ファイルを追加し、イメージを Container Registry に push して、gcloud run deploy
コマンドを呼び出します。steps: # Build the container image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA', '.'] # Push the container image to Container Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA'] # Deploy container image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: - 'run' - 'deploy' - 'SERVICE_NAME' - '--image' - 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA' - '--region' - 'SERVICE_REGION' images: - 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA'
ここで
SERVICE_NAME
は、Cloud Run サービスの名前です。SERVICE_REGION
は、デプロイする Cloud Run サービスのリージョンです。
$COMMIT_SHA
置換変数は、Git リポジトリからトリガーされたときに Cloud Build によって事前入力されます。前のステップで作成した構成ファイルを使用して、ビルドトリガーを作成します。
[トリガー] ページを開く
[トリガーを作成] をクリックします。
[名前] 欄にトリガーの名前を入力します。
[リージョン] で、トリガーのリージョンを選択します。
[イベント] で、リポジトリ イベントを選択してトリガーを開始します。
[ソース] で、トリガーを開始するリポジトリとブランチまたはタグ名を選択します。自動ビルドのブランチを指定する方法については、ビルドトリガーの作成をご覧ください。
[構成] で [Cloud Build 構成ファイル(YAML または JSON)] を選択します。
[Cloud Build 構成ファイルの場所] フィールドで、
/
の後に「cloudbuild.yaml
」と入力します。[作成] をクリックして、ビルドトリガーを保存します。
これで完了です。これで、リポジトリに push するたびに、Cloud Run サービスのビルドとデプロイが自動的に開始されます。
リポジトリに新しいコードを push するたびに、ビルドが自動的にトリガーされ、Cloud Run サービスにデプロイされます。
Cloud Build トリガーの作成方法については、ビルドトリガーの作成と管理をご覧ください。
最小限の IAM 権限の使用
コンテナが Cloud Run サービスにデプロイされると、この Cloud Run サービスのランタイム サービス アカウントの ID でコンテナが実行されます。 Cloud Build は新しいコンテナを自動的にデプロイできます。このため、Cloud Run サービスのランタイム サービス アカウントとして機能できるように Cloud Build を構成する必要があります。
Cloud Build に Cloud Run サービスにデプロイする制限付きアクセス権を付与するには、次の手順を行います。
コンソール
Google Cloud Console の [サービス アカウント] ページに移動します。
Cloud Run サービスのランタイム サービス アカウントのメールアドレス(デフォルトは
PROJECT_NUMBER-compute@developer.gserviceaccount.com
)をクリックします。[権限] タブをクリックします。
[
アクセスを許可] をクリックします。Cloud Build サービス アカウントを入力します(
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
)[ロールを選択] プルダウンで、[サービス アカウント] > [サービス アカウント ユーザー] ロールを選択します。
[保存] をクリックします。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドを使用します。ここで、PROJECT_NUMBER はプロジェクトの数値 ID です。
gcloud iam service-accounts add-iam-policy-binding \ PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"
PROJECT_NUMBER は、プロジェクトの数値 ID に置き換えます。
カスタマイズされたサービス ID を使用して Cloud Run を使用する場合は、PROJECT_NUMBER-compute@developer.gserviceaccount.com
をサービス アカウントのアドレスに置き換えます。
詳しくは、デプロイ権限をご覧ください。
コードの例
以下では、いくつかのサンプル リポジトリを紹介します。各リポジトリには、サンプル アプリケーションと、Cloud Run にアプリケーションをデプロイするためのビルド構成ファイルが含まれています。
- deploy-prebuilt: ビルド済みのイメージを Cloud Run にデプロイするコードの例。
- run-example-builddeploy: イメージをビルドして Cloud Run にデプロイするコードの例。
次のステップ
- Cloud Deploy を使用して Cloud Run にデプロイする方法を学習する。
- GKE にデプロイする方法を学習する。
- Cloud Functions にデプロイする方法を学習する。
- App Engine にデプロイする方法を学習する。
- Firebase にデプロイする方法を学習する。
- Compute Engine で Blue/Green デプロイを実行する方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。