このドキュメントでは、特定のジョブが成功または失敗するまでスケジュールされないジョブを作成して実行する方法について説明します。ジョブの状態の詳細については、ジョブの作成と実行の概要をご覧ください。
リソース要件が異なるワークロードがある場合は、依存関係のあるジョブを使用して、それぞれが個別の VM を使用するジョブの自動チェーンを作成することを検討してください。たとえば、需要の少ないオペレーション(データ準備など)とコンピューティング負荷の高いオペレーション(データ処理など)に使用する VM のタイプを分離します。依存関係のあるジョブを使用してリソース使用量を最適化することで、費用と割り当て使用量を削減できます。
始める前に
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
プロジェクトのバッチジョブ編集者(
制限事項
依存関係のあるジョブには次の制限があります。
依存関係のあるジョブには最大 4 つの依存関係を含めることができます。各依存関係には、一意のジョブ名と、次のいずれかの必要な状態を含める必要があります。
SUCCEEDED
: 成功FAILED
: 失敗FINISHED
: 成功または失敗
依存関係のあるジョブを作成する場合は、その依存ジョブがすべて存在している必要があります。
依存関係のあるジョブは、各依存ジョブが必要な状態に入るまでは、スケジュールされた(
SCHEDULED
)状態に移行できません。依存ジョブが必要な状態に入ることができなくなった場合、依存関係のあるジョブはスケジュールされずに直ちに失敗します。
依存関係のあるジョブを作成する
依存関係のあるジョブを作成するには、次の方法を使用します。
- Google Cloud CLI の場合は、
gcloud alpha batch jobs submit
コマンドを使用します。 - Batch API の場合は、v1alpha
jobs.create
メソッドを使用します。
ジョブに依存関係があることを指定するには、JSON ファイルの本文に dependencies[].items
フィールドを含めます。このフィールドで、1 つ以上の依存関係を Key-Value ペアとして指定できます。
"dependencies": [
{
"items": {
"DEPENDENCY_JOB_NAME": "REQUIRED_STATE"
}
}
]
以下を置き換えます。
DEPENDENCY_JOB_NAME
: 依存ジョブの名前。このジョブが必要な状態に達するまで、依存関係のあるジョブをスケジュールすることはできません。REQUIRED_STATE
: 対応する依存ジョブに必要な状態。これはSUCCEEDED
、FAILED
、FINISHED
のいずれかにする必要があります。
たとえば、依存関係のあるジョブが 3 つの依存関係を持つ場合、次のような JSON 構成ファイルを含めることができます。
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3
}
],
"dependencies": [
{
"items": {
"DEPENDENCY_JOB_NAME_1": "REQUIRED_STATE_1",
"DEPENDENCY_JOB_NAME_2": "REQUIRED_STATE_2",
"DEPENDENCY_JOB_NAME_3": "REQUIRED_STATE_3"
}
}
]
}
次のステップ
- ジョブの作成または実行で問題が発生した場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する方法を確認する。
- 別のジョブ作成オプションについて学習する。