Cloud Build を使用した Cloud Run へのデプロイ

このページでは、Cloud Build を使用して Cloud Run サービスを自動的にデプロイする方法を説明します。Cloud Build を初めて使用する場合は、最初にクイックスタートビルド構成の概要をご覧ください。

Cloud Run を使用すると、サーバーレス環境でステートレス イメージを実行できます。Cloud Build を使用すると、Container Registry(非推奨)と Artifact Registry から Cloud Run にイメージをデプロイできます。既存のイメージのデプロイ、イメージのビルドとデプロイ、デプロイの自動化が可能です。

始める前に

  • Enable the Cloud Build, Cloud Run, Container Registry, and Resource Manager APIs.

    Enable the APIs

必要な Identity and Access Management 権限

Cloud Build を使用して Cloud Run にデプロイするために必要な権限を取得するには、デフォルトのコンピューティング サービス アカウントに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

イメージのビルドとデプロイ

Cloud Build を使用すると、イメージをビルドして Artifact Registry にビルドイメージを保存し、そのイメージを Cloud Run にデプロイできます。

イメージをビルドしてデプロイするには:

  1. プロジェクトのルート ディレクトリに、cloudbuild.yaml という名前で構成ファイルを作成します。

  2. ビルド構成ファイルで、イメージをビルドする docker ビルドステップを追加し、イメージを Artifact Registry に push します。さらに、gcloud run deploy コマンドを呼び出す gcloud ビルドステップを追加し、Cloud Run にイメージをデプロイします。

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
    

    ここで

    • REPOSITORY は、イメージをデプロイする Artifact Registry リポジトリの名前です。
    • LOCATION は、Artifact Registry リポジトリのロケーションです(例: us-east1)。
    • PROJECT_ID は、イメージが保存されている Google Cloudプロジェクト ID です。
    • SERVICE_NAME は、Cloud Run サービスの名前です。
    • SERVICE_REGION は、デプロイする Cloud Run サービスのリージョンです。
    • IMAGE は、Artifact Registry 内のイメージの名前です。
  3. プロジェクトのルート ディレクトリに移動し、次のコマンドを実行します。LOCATION は、サポートされているビルド リージョンのいずれかで、ビルドを実行します。

     gcloud builds submit --region=LOCATION
    

正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。

継続的デプロイ

Cloud Build トリガーを作成すると、ソフトウェアの Cloud Run へのデプロイを自動化できます。トリガーを構成すると、ソースコードを更新するたびにイメージをビルドしてデプロイできます。

デプロイを自動化するには:

  1. リポジトリのルートに、イメージをビルドするステップを含む cloudbuild.yaml という名前の構成ファイルを追加し、イメージを Container Registry に push して、gcloud run deploy コマンドを呼び出します。

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: 
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
        - 'region'
        - 'SERVICE_REGION'
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
    

    ここで

    • REPOSITORY は、イメージをデプロイする Artifact Registry リポジトリの名前です。
    • LOCATION は、Artifact Registry リポジトリのロケーションです(例: us-east1)。
    • PROJECT_ID は、イメージが保存されている Google Cloudプロジェクト ID です。
    • SERVICE_NAME は、Cloud Run サービスの名前です。
    • SERVICE_REGION は、デプロイする Cloud Run サービスのリージョンです。
    • IMAGE は、Artifact Registry 内のイメージの名前です。

    $COMMIT_SHA 置換変数は、Git リポジトリからトリガーされたときに Cloud Build によって設定されます。

  2. 前のステップで作成した構成ファイルを使用して、ビルドトリガーを作成します。

    1. [トリガー] ページを開く

      [トリガー] ページに移動

    2. [トリガーを作成] をクリックします。

    3. [名前] 欄にトリガーの名前を入力します。

    4. [リージョン] で、トリガーのリージョンを選択します。

    5. [イベント] で、リポジトリ イベントを選択してトリガーを開始します。

    6. [ソース] で、トリガーを開始するリポジトリとブランチまたはタグ名を選択します。自動ビルドのブランチを指定する方法については、ビルドトリガーの作成をご覧ください。

    7. [構成] で [Cloud Build 構成ファイル(YAML または JSON)] を選択します。

    8. [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。

    9. [作成] をクリックして、ビルドトリガーを保存します。

    これで、リポジトリに新しいコードを push すると、Cloud Build がビルドを呼び出して、サービスを Cloud Run にデプロイします。

Cloud Build トリガーの作成方法については、ビルドトリガーの作成と管理をご覧ください。

最小限の IAM 権限の使用

イメージが Cloud Run サービスにデプロイされると、Cloud Run サービスのランタイム サービス アカウントの ID を使用してイメージが実行されます。Cloud Build は新しいイメージを自動的にデプロイできます。このため、Cloud Run サービスのランタイム サービス アカウントとして機能できるように Cloud Build を構成する必要があります。

Cloud Run サービスにデプロイする Cloud Build に制限付きアクセス権を付与するには、次の操作を行います。

コンソール

  1. Google Cloud Console の [サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. Cloud Run サービスのランタイム サービス アカウントのメールアドレス(デフォルトは PROJECT_NUMBER-compute@developer.gserviceaccount.com)をクリックします。

  3. [権限] タブをクリックします。

  4. [ アクセスを許可] をクリックします。

  5. Cloud Build サービス アカウントを入力します(PROJECT_NUMBER@cloudbuild.gserviceaccount.com

  6. [ロールを選択] プルダウンで、[サービス アカウント] > [サービス アカウント ユーザー] ロールを選択します。

  7. [保存] をクリックします。

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 にデプロイするコードの例。

次のステップ