このドキュメントでは、タイムアウトを設定してタスクと実行可能ファイルの実行時間を制限する方法について説明します。また、タスク内の他のすべての実行可能物が実行を完了したらすぐに実行可能物を終了させたい場合は、代わりにバックグラウンド実行可能物を使用します。
タイムアウトは、タスクまたは実行可能ファイルの実行が許可される時間を指定します。 Batch では、ジョブを 14 日を超えて実行することはできません。また、個々のタスクと実行可能ファイルにデフォルトのタイムアウトを設定することもできません。そのため、個々のタスクまたは実行可能物は、自動的に失敗するまで 14 日間実行できます。ただし、タスクと実行可能ファイルがそれほど長く実行されることを想定していない場合、この構成によって予期しないコストと遅延が発生する可能性があります。実行時間が長くなりすぎないように、タスクと実行可能オブジェクトのタイムアウトを設定できます。
始める前に
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトに対する Batch ジョブ編集者 (
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー (
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
-
プロジェクトに対する Batch ジョブ編集者 (
タイムアウトを設定する
実行可能オブジェクト、タスク、またはその両方のタイムアウトを設定できます。実行可能ファイルのタイムアウトは、その実行可能ファイルの最大実行時間を指定します。タスクのタイムアウトは、そのタスクの最大実行時間を指定します。これは、その実行可能物の個々の実行時間の合計です。たとえば、タスクに 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
runnable のタイムアウトを 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 のトラブルシューティングに関するドキュメントをご覧ください。
次のステップ
- ジョブの作成または実行で問題が発生した場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。
- ログを使用してジョブを分析する方法を確認する。