タイムアウトを使用してタスクと実行可能オブジェクトの実行時間を制限する

このドキュメントでは、タイムアウトを設定してタスクと実行可能ファイルの実行時間を制限する方法について説明します。また、タスク内の他のすべての実行可能物が実行を完了したらすぐに実行可能物を終了させたい場合は、代わりにバックグラウンド実行可能物を使用します。

タイムアウトは、タスクまたは実行可能ファイルの実行が許可される時間を指定します。 Batch では、ジョブを 14 日を超えて実行することはできません。また、個々のタスクと実行可能ファイルにデフォルトのタイムアウトを設定することもできません。そのため、個々のタスクまたは実行可能物は、自動的に失敗するまで 14 日間実行できます。ただし、タスクと実行可能ファイルがそれほど長く実行されることを想定していない場合、この構成によって予期しないコストと遅延が発生する可能性があります。実行時間が長くなりすぎないように、タスクと実行可能オブジェクトのタイムアウトを設定できます。

始める前に

  1. Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
  2. ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

タイムアウトを設定する

実行可能オブジェクト、タスク、またはその両方のタイムアウトを設定できます。実行可能ファイルのタイムアウトは、その実行可能ファイルの最大実行時間を指定します。タスクのタイムアウトは、そのタスクの最大実行時間を指定します。これは、その実行可能物の個々の実行時間の合計です。たとえば、タスクに 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 のトラブルシューティングに関するドキュメントをご覧ください。

次のステップ