デフォルトでは、各タスクは最大 10 分間実行されます。この時間は短くすることも、長くすることも可能です(最長 168 時間(7 日間)まで)。24 時間を超えるタイムアウトのサポートはプレビュー版で利用できます。
このページの説明に従って、タスクのタイムアウトを設定します。ジョブの実行に明示的なタイムアウトはありません。すべてのタスクが完了すると、ジョブの実行は完了します。
単位を使用して期間を指定します。タイムアウト時間は、秒、分、時間の整数値で指定できます。たとえば、タイムアウト時間を 10 分 5 秒に設定するには、値を 605
秒と指定します。
ジョブで再試行が有効になっている場合、タイムアウトの設定はタスクの試行ごとに適用されます。この時間内にタスクが完了しない場合、タスクは停止されます。ジョブの実行時間が長くなるほど、ダウンストリームの依存関係の失敗、メモリ不足エラー、インフラストラクチャの問題など、ジョブの失敗につながる問題が発生する可能性が高くなります。すべてのジョブで再試行を有効にすることをおすすめします。特に、長時間実行タスクを含むジョブでは有効にすることをおすすめします。
メンテナンス イベントの監視と処理
ジョブは定期的にメンテナンス イベントを受けることがあります。メンテナンス イベント中、進行中のタスクは現在のマシンから別のマシンに移行されます。この移行プロセスで、タスクの全体の状態が保持されます。ただし、タスクの移行中は処理が一時的に停止します。
メンテナンス イベントは透過的です。メンテナンス イベントを処理するためにコンテナを変更する必要はありません。タスクの開始と移行が終了するたびに、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 ジョブに対する Cloud Run デベロッパー ロール(
roles/run.developer
) -
サービス ID に対するサービス アカウント ユーザー ロール(
roles/iam.serviceAccountUser
)
Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールと Cloud Run IAM 権限をご覧ください。Cloud Run ジョブが Google Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限とアクセスの管理をご覧ください。
タスク タイムアウトを設定する
Cloud Run ジョブのタスク タイムアウトを指定するには:
コンソール
Google Cloud コンソールで Cloud Run の [ジョブ] ページに移動します。
[コンテナをデプロイ] をクリックし、[ジョブ] を選択して、ジョブの初期設定ページに入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。
[コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[全般] タブをクリックします。
- [タスクのタイムアウト] フィールドで、現在のジョブのジョブタスクの最長時間を指定し、[時間単位] を選択します。タイムアウト時間は、秒、分、時間の整数値でのみ指定できます。たとえば、10 分 5 秒の期間を設定するには、[タスクのタイムアウト] フィールドに
605
を指定し、[時間単位] で [秒] を選択します。
- [タスクのタイムアウト] フィールドで、現在のジョブのジョブタスクの最長時間を指定し、[時間単位] を選択します。タイムアウト時間は、秒、分、時間の整数値でのみ指定できます。たとえば、10 分 5 秒の期間を設定するには、[タスクのタイムアウト] フィールドに
[作成] または [更新] をクリックします。
gcloud
ジョブを作成する場合:
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 秒です。
ジョブを更新する場合:
gcloud run jobs update JOB_NAME --task-timeout TIMEOUT
YAML
新しいジョブを作成する場合は、この手順をスキップします。既存のジョブを更新する場合は、その YAML 構成をダウンロードします。
gcloud run jobs describe JOB_NAME --format export > job.yaml
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 秒の期間を設定するには、
605s
を指定します。
環境変数やメモリ上限など他の構成の詳細を指定することもできます。
既存のジョブ構成を更新します。
gcloud run jobs replace job.yaml
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Cloud Run ジョブのタスク タイムアウトを指定するには、google_cloud_run_v2_job
リソースを使用して、次のスニペットを main.tf
ファイルに適用します。
タスクのタイムアウトの設定を表示する
Cloud Run ジョブのタスク タイムアウトの現在の設定を表示するには:
コンソール
Google Cloud コンソールで Cloud Run の [ジョブ] ページに移動します。
目的のジョブをクリックして、[ジョブの詳細] ページを開きます。
[構成] タブをクリックします。
構成の詳細でタスクのタイムアウト設定を見つけます。
gcloud
次のコマンドを使用します。
gcloud run jobs describe JOB_NAME
返された構成で、タスクのタイムアウトの設定を見つけます。