このドキュメントでは、タイムアウトを設定してタスクと実行可能物の実行時間を制限する方法について説明します。
タイムアウトは、タスクまたは実行可能ファイルの実行が許可される時間を指定します。 Batch では、ジョブが 14 日間を超えて実行されることはありません。また、個々のタスクや実行可能物にデフォルトのタイムアウトは設定されません。そのため、個々のタスクまたは実行可能物は、自動的に失敗するまで 14 日間実行できます。ただし、タスクと実行可能物が長時間実行用と想定されていない場合、この構成により予期しないコストや遅延が発生する可能性があります。過剰な実行時間を防ぐために、タスクと実行可能物のタイムアウトを設定できます。
始める前に
- Batch を以前に使用したことがなかった場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与の詳細については、アクセスの管理をご覧ください。
-
プロジェクトのバッチジョブ編集者(
タイムアウトを設定する
タイムアウトは、実行可能ファイル、タスク、またはその両方に設定できます。実行可能物のタイムアウトは、その実行可能ファイルの最大実行時間を指定します。タスクのタイムアウトは、そのタスクの最大実行時間を指定します。これは、実行可能なすべての実行時間の合計です。たとえば、タスクに 1 分間に同時に実行される 3 つの実行可能物がある場合、タスクの実行時間は 1 分ではなく 3 分になります。
実行可能なタイムアウトと実行可能なタスクの両方のタイムアウトなど、重複するタイムアウトを設定した場合、自動失敗をトリガーするタイムアウトは 1 つだけになります。たとえば、タスクのタイムアウトを 60 秒に設定し、そのタスクの各実行可能ファイルのタイムアウトを 120 秒に設定したとします。次に、この例のタスクとそのすべての実行可能物は、実行可能物の実行時間の合計が 60 秒を超えると失敗し、120 秒のタイムアウトをトリガーできません。
ジョブのタスクと実行可能物に設定する適切なタイムアウトを選択するには、同様のワークロードのタスクと実行可能物の標準的な実行時間を判断するために、以前に実行した類似したジョブのログを分析します。
タスクのタイムアウトを設定する
Google Cloud CLI または REST API を使用して、JSON ファイルの taskSpec
オブジェクトに maxRunDuration
フィールドを含むジョブを作成します。
{
"taskGroups": [
{
"taskSpec": {
...
"maxRunDuration": "TIMEOUT"
}
}
]
}
TIMEOUT
は、タスクの実行を許可する秒数または小数セクションの最大数に置き換えます。例: 255s
タスクのタイムアウトを 255 秒に設定するジョブの JSON 構成ファイルは次のようになります。
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"maxRunDuration": "255s"
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
タスクのタイムアウトを超えると、タスクは自動的に失敗し、タイムアウトの超過がジョブのステータス イベントとログの終了コード 50005
に示されます。タイムアウト超過の詳細については、終了コード 50005 のトラブルシューティング ドキュメントをご覧ください。
実行可能物のタイムアウトを設定する
Google Cloud CLI または REST API を使用して、JSON ファイルの runnable
オブジェクトに timeout
フィールドを含むジョブを作成します。
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
...
"timeout": "TIMEOUT"
}
]
}
}
]
}
TIMEOUT
は、実行可能物を実行する最大秒数または小数セクションに置き換えます。例: 3.5s
実行可能ファイルに 3.5 秒のタイムアウトを設定するジョブの場合、次のような JSON 構成ファイルが作成されます。
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"timeout": "3.5s"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
実行可能物のタイムアウトを超えると、実行可能物は自動的に失敗し、タイムアウトの超過がジョブのステータス イベントとログの終了コード 50005
に示されます。タイムアウト超過の詳細については、終了コード 50005 のトラブルシューティング ドキュメントをご覧ください。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。
- ログを使用してジョブを分析する方法を確認する。