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

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

タイムアウト は、タスクまたは実行可能ファイルの実行が許可される時間を指定します。 通常、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

実行可能物に 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 のトラブルシューティング ドキュメントをご覧ください。

次のステップ