Cloud Run で関数をデプロイする

このページでは、Cloud Run で関数をデプロイして変更する方法について説明します。Hello World 関数をデプロイするチュートリアルの例については、サンプル関数をデプロイするをご覧ください。

Cloud Run 関数のデプロイでは、バックグラウンドで Google Cloud の Buildpack と Cloud Build が使用され、関数のソースコードからコンテナ イメージが自動的にビルドされます。マシンに Docker をインストールしたり、Buildpack や Cloud Build を設定する必要はありません。

Cloud Run 関数のデプロイでも、Artifact Registry を使用してアーティファクトを保存し、コンテナ イメージを管理します。プロジェクトに cloud-run-source-deploy という Artifact Registry リポジトリがまだ作成されていない場合、Artifact Registry はこの名前のリポジトリを自動的に作成します。

始める前に

  1. 設定ページの説明に従って、Cloud Run に新しいプロジェクトを設定したことを確認してください。

  2. Artifact Registry、Cloud Build、Cloud Run Admin API、Cloud Logging API を有効にします。

     gcloud services enable artifactregistry.googleapis.com \
         cloudbuild.googleapis.com \
         run.googleapis.com \
         logging.googleapis.com
    

    必要に応じて、Eventarc API を有効にしてイベント トリガーを使用します。

     gcloud services enable eventarc.googleapis.com
    
  3. ドメイン制限の組織のポリシーでプロジェクトの未認証呼び出しが制限されている場合は、限定公開サービスのテストの説明に従って、デプロイされたサービスにアクセスする必要があります。

必要なロール

ソースから Cloud Run サービスをデプロイするために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run サービスが Google Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

サービス アカウントのロール

  • Cloud Build がソースを構築できるようにするには、次のコマンドを実行して、Compute Engine のデフォルト サービス アカウントに Cloud Build サービス アカウントのロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/cloudbuild.builds.builder

    PROJECT_NUMBER は Google Cloud プロジェクト番号に、PROJECT_ID は Google Cloud プロジェクト ID に置き換えます。プロジェクト ID とプロジェクト番号を確認する方法については、プロジェクトの作成と管理をご覧ください。

    Compute Engine のデフォルト サービス アカウントに Cloud Build サービス アカウントのロールを付与すると、ロールが伝播されるまでに数分かかることがあります。

  • 関数を作成してデプロイする

    関数は、Google Cloud コンソールまたは gcloud CLI を使用してデプロイできます。使用するツールのタブをクリックして、手順を確認してください。

    コンソール

    1. Google Cloud コンソールで [Cloud Run] ページに移動します。

      Cloud Run に移動

    2. [関数を作成] をクリックします。

    3. [サービス名] フィールドに、関数を表す名前を入力します。サービス名は、先頭を英字にして、49 文字以下の英字、数字、ハイフンで構成します。サービス名はハイフンで終わることはできません。また、リージョンとプロジェクトごとに一意にする必要があります。サービス名は後から変更することはできません。この名前は一般公開されます。

    4. [リージョン] リストで、デフォルト値を使用するか、コンテナをデプロイするリージョンを選択します。

    5. [ランタイム] リストで、デフォルト値を使用するか、ランタイム バージョンを選択します。

    6. 必要に応じて、[トリガー] セクションで [トリガーを追加] をクリックし、オプションを選択します。[Eventarc トリガー] ペインが開き、トリガーの詳細を変更できます。

      1. [トリガー名] フィールドにトリガーの名前を入力するか、デフォルトの名前を使用します。

      2. リストからトリガーのタイプを選択して、次のいずれかのトリガータイプを指定します。

        • Google のソース: Pub/Sub、Cloud Storage、Firestore などの Google イベント プロバイダのトリガーを指定できます。

        • カスタム: アプリケーション コードからイベントを生成して使用します。[Eventarc トリガー] ペインのプロンプトに従ってチャネルを作成します。チャネルは、カスタム イベントをプロデューサーからコンシューマーに配信するパイプラインとして使用されるリソースです。カスタム イベントはチャネルに公開され、Eventarc トリガーがこれらのイベントに登録されます。

        • サードパーティ: Eventarc ソースを提供する Google 以外のプロバイダと統合できます。詳細については、Eventarc のサードパーティ イベントをご覧ください。

      3. リストから [イベント プロバイダ] を選択し、関数をトリガーするイベントのタイプを提供するプロダクトを選択します。イベント プロバイダのリストについては、イベント プロバイダと宛先をご覧ください。

      4. リストからイベントタイプを選択します。トリガーの構成は、サポートされているイベントタイプによって異なります。詳細については、イベントタイプをご覧ください。

      5. [リージョン] フィールドで、Eventarc トリガーのロケーションを選択します。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、Cloud Functions の関数を同じリージョンにデプロイする必要があります。Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについてをご覧ください。

      6. [サービス アカウント] フィールドで、サービス アカウントを選択します。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run は Compute Engine のデフォルトのサービス アカウントを使用します。

      7. 受信リクエストの送信先であるサービスの URL パスを指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: //routerouteroute/subroute.

      8. 必須フィールドに値を入力したら、[トリガーを保存] をクリックします。

    7. [認証] で、次の構成を行います。

      • 公開 HTTP 関数(Webhook など)を作成する場合は、[未認証の呼び出しを許可する] を選択します。これをオンにすると、IAM 起動元ロールに特別な allUser が割り当てられます。サービスの作成後に、IAM を使用してこの設定を編集できます。これを選択する権限(Cloud Run 管理者ロール)がない場合は、サービスがデプロイされ、認証が必要になります。

      • イベント トリガー関数を作成する場合は、[認証が必要] を選択します。

    8. 必要に応じて、関数の次の追加構成を更新します。

      1. 必要に応じて CPU 割り当てと料金を設定します。

      2. [サービスの自動スケーリング] で、必要に応じてインスタンスの最小数を指定します。

      3. 必要に応じて、上り(内向き)の制御の設定を行います。

      4. [コンテナ、ボリューム、ネットワーキング、セキュリティ] セクションを開き、該当するタブでその他のオプション設定を指定します。

    9. [作成] をクリックし、Cloud Run がプレースホルダ リビジョンを使用してサービスを作成するのを待ちます。

    10. コンソールの [ソース] タブにリダイレクトされ、関数のソースコードが表示されます。[保存して再デプロイ] をクリックします。

    11. [ソース] タブで、必要に応じて [ペイロードを表示] をクリックして、受信イベントのペイロードの例を確認できます。

    12. デプロイが完了したら、[テスト] ボタンをクリックして、作成した関数をテストします。

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. gcloud コンポーネントを最新バージョンに更新します。

      gcloud components update
    3. サンプルコードを含むディレクトリで次のコマンドを実行します。

      gcloud beta run deploy FUNCTION \
             --source . \
             --function FUNCTION_ENTRYPOINT \
             --base-image BASE_IMAGE \
             --region REGION
      

      次のように置き換えます。

      • FUNCTION: デプロイする関数の名前。このパラメータは省略できますが、省略すると名前の入力を求められます。

      • FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。

      • BASE_IMAGE: 関数のベースイメージ環境。ベースイメージと各イメージに含まれるパッケージの詳細については、ランタイム ベースイメージをご覧ください。

      • REGION: 関数をデプロイする Google Cloud リージョン。例: us-central1

      オプション:

      • 公開 HTTP 関数(Webhook など)を作成する場合は、--allow-unauthenticated フラグを指定します。このフラグは、Cloud Run IAM 起動元ロールを特別な ID allUser に割り当てます。サービスの作成後に、IAM を使用してこの設定を編集できます。イベント トリガー関数または認証済みサービスを作成する場合は、このフラグを省略できます。

    必要に応じて、関数をデプロイした後、Eventarc トリガーを関数に追加できます。トリガーを追加するには、次のコマンドを実行します。

      gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \
          --location=EVENTARC_TRIGGER_LOCATION \
          --destination-run-service=FUNCTION \
          --destination-run-region=REGION \
          --event-filters="type=EVENTARC_FILTER_TYPE" \
          --event-filters="EVENTARC_EVENT_FILTER" \
          --service-account=EVENTARC_TRIGGER_SERVICE_ACCOUNT
    

    次のように置き換えます。

    • EVENTARC_TRIGGER_NAME: Eventarc トリガーの名前。

    • EVENTARC_TRIGGER_LOCATION: Eventarc トリガーのロケーション。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、Cloud Functions の関数を同じリージョンにデプロイする必要があります。Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについてをご覧ください。

    • FUNCTION: デプロイされた関数の名前。

    • REGION: 関数の Cloud Run リージョン

    • EVENTARC_FILTER_TYPE: トリガーがモニタリングするイベント フィルタ。--event-filters フィルタにすべて一致するイベントが関数の呼び出しをトリガーします。必須: 各トリガーには、サポートされているイベントタイプを --event-filters="type=EVENTARC_FILTER_TYPE" の形式で指定する必要があります。作成後は、このイベントタイプは変更できません。EVENT_FILTER_TYPE を変更するには、新しいトリガーを作成して古いトリガーを削除します。(省略可)さらにフィルタを追加するには、--event-filters フラグを繰り返し、サポートされているフィルタを ATTRIBUTE=VALUE の形式で指定します。

    • EVENTARC_TRIGGER_SERVICE_ACCOUNT: サービス アカウント。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run はデフォルトのコンピューティング サービス アカウントを使用します。

    Terraform

    Terraform を使用して関数を管理するには、関数コードをコンテナ イメージにビルドし、Google Cloud Platform Providergoogle_cloud_run_v2_service リソースを使用して Terraform 構成で Cloud Run サービスを定義する必要があります。

    1. 関数の作成の手順に沿って、コンテナ イメージを作成します。次の手順で使用する IMAGE_URL 変数にコンテナ イメージのフルパスをコピーします。

    2. 新しい main.tf ファイルをこの内容で作成します。

      provider "google" {
        project = "PROJECT-ID"
      }
      
      resource "google_cloud_run_v2_service" "default" {
        name     = "SERVICE"
        location = "REGION"
        client   = "terraform"
        template {
          containers {
            image = "IMAGE_URL"
          }
        }
      }
      
      resource "google_cloud_run_v2_service_iam_member" "noauth" {
        location = google_cloud_run_v2_service.default.location
        name     = google_cloud_run_v2_service.default.name
        role     = "roles/run.invoker"
        member   = "allUsers"
      }
      

      次のように置き換えます。

      • PROJECT-ID は、Google Cloud プロジェクト ID に置き換えます。
      • REGION は、Google Cloud リージョンに置き換えます。
      • SERVICE は、Cloud Run サービスの名前に置き換えます。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
      • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。

      この構成では公開アクセスが可能になります(--allow-unauthenticated と同等)。サービスを非公開にするには、google_cloud_run_v2_service_iam_member スタンザを削除します。

    3. Terraform を初期化します。

      terraform init
    4. Terraform 構成を適用します。

      terraform apply

      yes と入力して、記述されている操作を適用することを確認します。

    Cloud Run のロケーション

    Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

    レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloud サービスのロケーションも考慮する必要があります。使用する Google Cloud サービスが複数のロケーションにまたがっていると、サービスの料金だけでなくレイテンシにも影響します。

    Cloud Run は、次のリージョンで利用できます。

    ティア 1 料金を適用

    • asia-east1(台湾)
    • asia-northeast1(東京)
    • asia-northeast2(大阪)
    • asia-south1(ムンバイ、インド)
    • europe-north1(フィンランド) リーフアイコン 低 CO2
    • europe-southwest1(マドリッド) リーフアイコン 低 CO2
    • europe-west1(ベルギー) リーフアイコン 低 CO2
    • europe-west4(オランダ) リーフアイコン 低 CO2
    • europe-west8(ミラノ)
    • europe-west9(パリ) リーフアイコン 低 CO2
    • me-west1(テルアビブ)
    • us-central1(アイオワ) リーフアイコン 低 CO2
    • us-east1(サウスカロライナ)
    • us-east4(北バージニア)
    • us-east5(コロンバス)
    • us-south1(ダラス) リーフアイコン 低 CO2
    • us-west1(オレゴン) リーフアイコン 低 CO2

    ティア 2 料金を適用

    • africa-south1(ヨハネスブルグ)
    • asia-east2(香港)
    • asia-northeast3(ソウル、韓国)
    • asia-southeast1(シンガポール)
    • asia-southeast2 (ジャカルタ)
    • asia-south2(デリー、インド)
    • australia-southeast1(シドニー)
    • australia-southeast2(メルボルン)
    • europe-central2(ワルシャワ、ポーランド)
    • europe-west10(ベルリン) リーフアイコン 低 CO2
    • europe-west12(トリノ)
    • europe-west2(ロンドン、イギリス) リーフアイコン 低 CO2
    • europe-west3(フランクフルト、ドイツ) リーフアイコン 低 CO2
    • europe-west6(チューリッヒ、スイス) リーフアイコン 低 CO2
    • me-central1(ドーハ)
    • me-central2(ダンマーム)
    • northamerica-northeast1(モントリオール) リーフアイコン 低 CO2
    • northamerica-northeast2(トロント) リーフアイコン 低 CO2
    • southamerica-east1(サンパウロ、ブラジル) リーフアイコン 低 CO2
    • southamerica-west1(サンティアゴ、チリ) リーフアイコン 低 CO2
    • us-west2(ロサンゼルス)
    • us-west3(ソルトレイクシティ)
    • us-west4(ラスベガス)

    Cloud Run サービスをすでに作成している場合は、Google Cloud コンソールの Cloud Run ダッシュボードにリージョンが表示されます。

    イベントの再試行を有効にする

    Eventarc は、Pub/Sub をトランスポート層として使用します。デフォルトの再試行ポリシーは、関数でうまく機能しない場合があります。

    Eventarc トリガーを作成したら、Eventarc で再試行ポリシーを更新し、Pub/Sub でデッドレター トピックを構成することを強くおすすめします。

    既存の関数を変更する

    関数の構成またはコードを変更できます。

    構成を変更する

    CPU 割り当て、メモリ、VPC 接続などの構成パラメータを変更するには:

    コンソール

    1. Google Cloud コンソールで [Cloud Run] ページに移動します。

      Cloud Run に移動

    2. サービスリストで更新したいサービスをクリックして、サービスの詳細を表示します。

    3. [新しいリビジョンの編集とデプロイ] をクリックして、リビジョンのデプロイ フォームを表示します。

    4. 構成設定を変更します。

    5. [デプロイ] をクリックして、デプロイが完了するまで待ちます。

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. 1 つ以上のサービス構成設定を更新するには、更新する構成のコマンドライン フラグを指定して gcloud beta run services update SERVICE コマンドを使用します。SERVICE は、サービスの名前に置き換えます。

    新しいソースコードを再デプロイする

    関数のベースイメージ、ランタイム、ソースコードは、Google Cloud コンソールまたは gcloud CLI を使用して変更できます。

    使用するツールのタブをクリックして、手順を確認してください。

    コンソール

    1. Google Cloud コンソールで [Cloud Run] ページに移動します。

      Cloud Run に移動

    2. [サービス] リストで更新したいサービスをクリックして、サービスの詳細を表示します。

    3. [ソース] タブに移動し、[ソースを編集] をクリックします。

    4. ベースイメージの横にある [ランタイムとセキュリティ アップデートを編集] をクリックし、必要に応じてリストから別のランタイムまたは環境を選択して、[保存] をクリックします。

    5. 必要に応じて、関数のエントリ ポイントを変更します。

    6. [ファイル] セクションで、 [ファイルを追加] を選択して新しいファイルを作成するか、[ファイルの名前を変更] を選択してファイルの名前を変更するか、[ファイルを削除] を選択してファイルを削除します。

    7. [コード] セクションで、必要に応じてソースコードを変更します。

    8. [保存して再デプロイ] をクリックし、デプロイが完了するまで待ちます。

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. 関数のソースコードを含むディレクトリで、次のコマンドを実行します。

      gcloud beta run deploy FUNCTION \
             --source . \
             --function FUNCTION_ENTRYPOINT \
             --base-image BASE_IMAGE \
             --region REGION
      

      次のように置き換えます。

      • FUNCTION: 変更する関数の名前。

      • FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。

      • BASE_IMAGE: 関数のベースイメージ環境。ほとんどの場合、ランタイム ID(nodejs22 など)を指定できます。

        スタックで特定のシステム パッケージを使用する場合や、ベースイメージをダウンロードするリージョンを指定する場合は、次のいずれかを指定します。

        • ベースイメージの完全なパス(us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22 など)。このオプションを使用すると、ベースイメージ、スタック内の特定のシステム パッケージ、ベースイメージをダウンロードするリージョンを指定できます。
        • ベースイメージの完全なパスのエイリアス(google-22/nodejs22google-22-full/nodejs22 など)。この短いエイリアス オプションを使用すると、スタック内のベースイメージと特定のシステム パッケージを指定できます。

        ベースイメージと各イメージに含まれるパッケージの詳細については、ランタイム ベースイメージをご覧ください。

      • REGION: 関数をデプロイする Google Cloud リージョン。例: us-central1

      オプション フラグ

      関数を変更するときに、次のオプション フラグを構成できます。

      • ビルド環境変数フラグ。ビルドステップ中に環境変数を指定します(ビルド時に固有の証明書やパラメータの構成など)。

      • ワーカープール フラグ。VPC Service Controls で保護されたビルド コンテキストで使用するワーカープールを指定します。

      • カスタム ビルド サービス アカウント フラグ。セキュリティを強化するために、デフォルトのビルド サービス アカウントの代替を指定します。

      • ベースイメージの自動更新フラグ: 自動更新を無効にします。デフォルトでは、関数のセキュリティの自動更新が有効になっています。

    次のステップ

    新しいサービスをデプロイしたら、次のことを行うことができます。