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

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

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

始める前に

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

必要な Identity and Access Management 権限

  1. Google Cloud コンソールで、 Cloud Build の [権限] ページに移動します。

    [権限] に移動

  2. 指定した Cloud Build サービス アカウントまたはデフォルトの Cloud Build サービス アカウントで、次のロールのステータスを [有効] に設定します。

    • Cloud Run 管理者(roles/run.admin)| Cloud Build が新しいサービスを Cloud Run にデプロイできるようにします。
    • ストレージ管理者(roles/storage.admin)| Cloud Storage からの読み取りと書き込みを有効にします。
    • Artifact Registry 書き込み(roles/artifactregistry.writer)| Artifact Registry からのイメージの pull と Artifact Registry への書き込みを許可します。
    • ログ書き込み(roles/logging.logWriter)| ログエントリを Cloud Logging に書き込むことができます。
    • Cloud Build 編集者(roles/cloudbuild.builds.editor)| サービス アカウントでビルドを実行できます。

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

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 という名前の構成ファイルを追加し、イメージを Artifact 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 トリガーの作成方法については、ビルドトリガーの作成と管理をご覧ください。

コードの例

以下では、いくつかのサンプル リポジトリを紹介します。各リポジトリには、サンプル アプリケーションと、Cloud Run にアプリケーションをデプロイするためのビルド構成ファイルが含まれています。

  • deploy-prebuilt: ビルド済みのイメージを Cloud Run にデプロイするコードの例。
  • run-example-builddeploy: イメージをビルドして Cloud Run にデプロイするコードの例。

次のステップ