リクエスト タイムアウトを設定する(サービス)

Cloud Run サービスの場合、リクエスト タイムアウトの設定には、Cloud Run にデプロイされたサービスがレスポンスを返すまでの制限時間を指定します。指定した時間内にレスポンスが返されない場合、リクエストが終了し、エラー 504 が返されます。リクエストを処理したコンテナ インスタンスは終了しません。

タイムアウト時間

タイムアウトはデフォルトで 5 分(300 秒)に設定されていますが、60 分(3,600 秒)まで延長できます。

この設定は、コンテナ イメージのデプロイ時に変更できます。また、サービス構成を更新して変更することもできます。

Cloud Run のリクエスト タイムアウトを変更するだけでなく、使用言語のフレームワークに独自のリクエスト タイムアウト設定があるかどうか確認する必要があります。Cloud Run サービスの一部のクライアントでは、制限がより厳格なタイムアウトが適用される場合もあります。

必要なロール

Cloud Run サービスの構成とデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

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

リクエスト タイムアウトの設定と更新

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

新しいサービスを作成するとき、または新しいリビジョンをデプロイするときに、Google Cloud コンソール、gcloud コマンドライン、または YAML ファイルを使用してリクエスト タイムアウトを設定できます。

コンソール

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

    Cloud Run に移動

  2. [コンテナをデプロイ] をクリックし、[サービス] を選択して、新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • [リクエスト タイムアウト] フィールドに、使用するタイムアウト値を秒単位で入力します。13600 秒または 1~60 分の範囲の値を使用します。
  5. [作成] または [デプロイ] をクリックします。

gcloud

特定のリビジョンのリクエスト タイムアウトを更新するには、次のコマンドを使用します。

gcloud run services update SERVICE --timeout=TIMEOUT

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

  • SERVICE は、実際のサービスの名前に置き換えます。
  • TIMEOUT は、レスポンスを返す必要がある時間に置き換えます。整数値を使用することも、期間を絶対値で指定することもできます。たとえば、1m20s は 1 分 20 秒を意味します。整数値の場合、単位は秒になります。60 分以内の値を指定する必要があります。

デプロイ中に、次のコマンドを使用してリクエスト タイムアウトを設定することもできます。

gcloud run deploy --image IMAGE_URL --timeout=TIMEOUT

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

  • 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 です。
  • TIMEOUT は、レスポンスが返されるまでの時間を整数値または期間の絶対値で指定します。たとえば、1m20s は 1 分 20 秒を意味します。整数値の場合、単位は秒になります。60 分以内の値を指定する必要があります。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. timeoutSeconds 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE
          timeoutSeconds: VALUE

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • 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 です。
    • VALUE は、必要なタイムアウト(秒単位)にします。
    • REVISION を新しいリビジョン名に置き換えるか、削除(存在する場合)します。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります
      • SERVICE- で始まる
      • 小文字、数字、- のみが使用されている
      • 末尾が - ではない
      • 63 文字以内である
  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform 構成の templategoogle_cloud_run_v2_service リソースに次の内容を追加します。300s は、サービスで必要なリクエスト タイムアウトに置き換えます。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-request-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    # Timeout
    timeout = "300s"
  }
}

リクエスト タイムアウトの設定を表示する

Cloud Run サービスの現在のリクエスト タイムアウト設定を表示するには:

コンソール

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

    Cloud Run に移動

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [変更内容] タブをクリックします。

  4. 右側の詳細パネルの [コンテナ] タブに、リクエスト タイムアウト設定が表示されます。

gcloud

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、リクエスト タイムアウト設定を見つけます。