このドキュメントでは、タイムアウトを設定してタスクと実行可能ファイルの実行時間を制限する方法について説明します。
タイムアウトは、タスクまたは実行可能ファイルの実行が許可される時間を指定します。 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
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 のトラブルシューティング ドキュメントをご覧ください。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。
- ログを使用してジョブを分析する方法を確認する。