ジョブのタスク タイムアウトを設定する

デフォルトでは、各タスクは最大 10 分間実行されます。この時間は短くすることも、長くすることも可能です(最長 168 時間(7 日)まで)。GPU を使用するタスクの場合、使用可能な最大タイムアウトは 1 時間です。

このページの説明に従って、タスクのタイムアウトを設定できます。ジョブの実行に明示的なタイムアウトはありません。すべてのタスクが完了すると、ジョブの実行は完了します。

単位を使用して期間を指定します。タイムアウト時間は、秒、分、時間の整数値で指定できます。たとえば、タイムアウト時間を 10 分 5 秒に設定するには、値を 605 秒と指定します。

ジョブで再試行が有効になっている場合、タイムアウトの設定はタスクの試行ごとに適用されます。この時間内にタスクが完了しない場合、タスクは停止されます。ジョブの実行時間が長くなるほど、ダウンストリームの依存関係の失敗、メモリ不足エラー、インフラストラクチャの問題など、ジョブの失敗につながる問題が発生する可能性が高くなります。すべてのジョブで再試行を有効にすることをおすすめします。特に、長時間実行タスクを含むジョブでは有効にすることをおすすめします。

メンテナンス イベント

ジョブの実行中に、定期的にメンテナンス イベントが発生することがあります。メンテナンス イベント中、進行中のタスクは現在のマシンから別のマシンに移行されます。タスクの移行中は処理が一時的に停止します。

移行プロセスではタスクの状態が保持されますが、メンテナンス イベント中にアウトバウンド VPC ネットワーク接続が切断されます。この例外に注意してください。ときどき発生する接続リセットを処理できるクライアント ライブラリを使用することをおすすめします。

タスクの開始と移行が終了するたびに、Cloud Run がログ メッセージを出力します。

メンテナンス イベントを特定の方法でモニタリングまたは処理する場合は、タスクの 10 秒前に送信された SIGTSTP シグナルをキャッチします。移行後、再起動後すぐにタスクは SIGCONT シグナルを受け取ります。

次の Go サンプルは、これらのシグナルをキャッチしてログエントリを出力する関数です。

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

必要なロール

Cloud Run ジョブの構成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

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

タスク タイムアウトを設定する

Cloud Run ジョブのタスク タイムアウトを指定するには:

コンソール

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

    Cloud Run に移動

  2. [コンテナをデプロイ] をクリックして、ジョブの初期設定ページに入力します。既存のジョブを構成する場合は、ジョブを選択して [ジョブ構成の表示と編集] をクリックします。

  3. [コンテナ、ボリューム、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。

  4. [全般] タブをクリックします。

    イメージ

    • [タスクのタイムアウト] フィールドで、現在のジョブのジョブタスクの最長時間を指定し、[時間単位] を選択します。タイムアウト時間は、秒、分、時間の整数値でのみ指定できます。たとえば、10 分 5 秒の期間を設定するには、[タスクのタイムアウト] フィールドに 605 を指定し、[時間単位] で [秒] を選択します。
  5. [作成] または [更新] をクリックします。

gcloud

  1. ジョブを作成する場合:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

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

    • JOB_NAME: ジョブの名前。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)。
    • TIMEOUT: ジョブタスクの最大期間。時間と単位を指定します。たとえば、10m5s は 10 分 5 秒です。
  2. ジョブを更新する場合:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

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

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. timeoutSeconds: 属性を更新します。

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

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

    • JOB_NAME: ジョブの名前。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)。
    • TIMEOUT: ジョブタスクの最長時間。時間の数値と単位を指定します。時間は、秒、分、時間の整数値で指定できます。たとえば、10 分 5 秒の期間を設定するには、605 を指定します。

    環境変数やメモリ上限など他の構成の詳細を指定することもできます。

  3. 既存のジョブ構成を更新します。

    gcloud run jobs replace job.yaml

Terraform

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

Terraform 構成の google_cloud_run_v2_job リソースに次の内容を追加します。

resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

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

Cloud Run ジョブのタスク タイムアウトの現在の設定を表示するには:

コンソール

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

    Cloud Run の [ジョブ] に移動

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

  3. [ジョブ構成の表示と編集] をクリックします。

  4. 構成の詳細でタスクのタイムアウト設定を見つけます。

gcloud

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

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