Cloud Run へのデプロイ

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

Cloud Run は、サーバーレス環境でステートレス コンテナの実行を可能にするマネージド型コンピューティング プラットフォームです。Cloud Build を使用すると、Container Registry と Artifact Registry から Cloud Run にコンテナ イメージをデプロイできます。既存のイメージのデプロイ、イメージのビルドとデプロイ、デプロイの自動化が可能です。

Cloud Run の詳細については、Cloud Run のドキュメントをご覧ください。

始める前に

  • Cloud Build, Cloud Run, Container Registry, and Resource Manager API を有効にします。

    API を有効にする

  • アプリケーションのソースコードを用意します。

  • このページで gcloud コマンドを実行するには、gcloud コマンドライン ツールをインストールします。

必要な IAM 権限

デプロイする Cloud プロジェクトにイメージが保存されている場合、またはイメージが Container Registry で公開されている場合は、次の IAM 権限が必要です。

フルマネージド

Cloud Run(フルマネージド)にデプロイするには、Cloud Run 管理者とサービス アカウント ユーザーのロールを Cloud Build サービス アカウントに付与します。

  1. Cloud Console で Cloud Build の設定ページを開きます。

    Cloud Build の設定ページに移動

  2. [サービス アカウント権限] パネルで、Cloud Run 管理者ロールのステータスを [有効] に設定します。

    サービス アカウント権限ページのスクリーンショット

  3. [追加の手順が必要になることがあります] ポップアップで [すべてのサービス アカウントにアクセス権を付与] をクリックします。

Anthos on Google Cloud

Cloud Run for Anthos にデプロイするには、Kubernetes Engine デベロッパーのロールを Cloud Build サービス アカウントに付与します。

  1. Cloud Console で Cloud Build の設定ページを開きます。

    Cloud Build の設定ページに移動

  2. [サービス アカウント権限] パネルで、Kubernetes Engine デベロッパーのロールのステータスを [有効] に設定します。

    サービス アカウント権限ページのスクリーンショット

イメージがデプロイ先とは異なる Cloud プロジェクトに格納されている場合は、他の GCP プロジェクトからイメージをデプロイするで説明しているように、追加の IAM 権限が必要になります。

コンテナのビルドとデプロイ

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

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

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

  2. ビルド構成ファイルで、イメージをビルドする 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', 'REGION', '--platform', 'managed']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    ここで

    • SERVICE-NAME は、Cloud Run サービスの名前です。
    • REGION は、デプロイする Cloud Run サービスのリージョンです。
    • PROJECT_ID は、イメージが保存されている Google Cloud プロジェクト ID です。
    • IMAGE は、Container Registry 内のイメージの名前です。

    Anthos on Google Cloud

    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', '--cluster', 'CLUSTER', '--cluster-location', 'CLUSTER_LOCATION', '--platform', 'gke']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    ここで

    • SERVICE-NAME は、Cloud Run サービスの名前です。
    • CLUSTER は、Cloud Run for Anthos on Google Cloud クラスタの名前です。
    • CLUSTER_LOCATION は、Cloud Run for Anthos on Google Cloud クラスタの場所です。
    • PROJECT_ID は、イメージが保存されている Google Cloud プロジェクト ID です。
    • IMAGE は、Container Registry 内のイメージの名前です。
  3. プロジェクトのルート ディレクトリに移動し、次のコマンドを実行します。

     gcloud builds submit
    

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

継続的なデプロイ

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

Cloud Run へのデプロイを自動化するには:

  1. リポジトリのルートに、イメージをビルドするステップを含む構成ファイルを追加し、イメージを 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'
       - 'REGION'
       - '--platform'
       - 'managed'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    ここで

    • SERVICE-NAME は、Cloud Run サービスの名前です。
    • REGION は、デプロイする Cloud Run サービスのリージョンです。

    Anthos on Google Cloud

     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'
       - '--cluster'
       - 'CLUSTER'
       - '--cluster-location'
       - 'CLUSTER_LOCATION'
       - '--platform'
       - 'gke'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    ここで

    • SERVICE-NAME は、Cloud Run サービスの名前です。
    • CLUSTER は、Cloud Run for Anthos on Google Cloud クラスタの名前です。
    • CLUSTER_LOCATION は、Cloud Run for Anthos on Google Cloud クラスタの場所です。

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

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

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

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

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

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

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

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

    6. [ビルド構成] で [Cloud Build 構成ファイル] を選択します。

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

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

  3. これで完了です。これで、リポジトリに push するたびに、Cloud Run サービスのビルドとデプロイが自動的に開始されます。

リポジトリに新しいコードを push するたびに、ビルドが自動的にトリガーされ、Cloud Run サービスにデプロイされます。

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

最小限の IAM 権限の使用

コンテナが Cloud Run(フルマネージド)サービスにデプロイされると、この Cloud Run(フルマネージド)サービスのランタイム サービス アカウントの ID で実行されます。Cloud Build は新しいコンテナを自動的にデプロイできるため、 Cloud Run(フルマネージド)サービスのランタイム サービス アカウントとして機能する必要があります。

Cloud Build に Cloud Run(フルマネージド)サービスにデプロイする制限付きアクセス権を付与するには、次の手順を行います。

Console

  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 にアプリケーションをデプロイするためのビルド構成ファイルが含まれています。

次のステップ