このドキュメントでは、特定のジョブが成功または失敗するまでスケジュールされないジョブを作成して実行する方法について説明します。ジョブの状態の詳細については、ジョブの作成と実行の概要をご覧ください。
リソース要件が異なるワークロードがある場合は、依存関係のあるジョブを使用して、それぞれが個別の VM を使用するジョブの自動チェーンを作成することを検討してください。たとえば、需要の少ないオペレーション(データ準備など)とコンピューティング負荷の高いオペレーション(データ処理など)に使用する VM のタイプを分離します。依存関係のあるジョブを使用してリソース使用量を最適化することで、費用と割り当て使用量を削減できます。
始める前に
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。 - 
  
  
    
      プロジェクトに対する Batch ジョブ編集者 (roles/batch.jobsEditor)
- 
  
  
    
      ジョブのサービス アカウントのサービス アカウント ユーザー (roles/iam.serviceAccountUser)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
 ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 
- 
  
  
    
      プロジェクトに対する Batch ジョブ編集者 (
制限事項
依存関係のあるジョブには次の制限があります。
- 依存関係のあるジョブには最大 4 つの依存関係を含めることができます。各依存関係には、一意のジョブ名と、次のいずれかの必要な状態を含める必要があります。 - SUCCEEDED: 成功
- FAILED: 失敗
- FINISHED: 成功または失敗
 
- 依存関係のあるジョブを作成する場合は、その依存ジョブがすべて存在している必要があります。 
- 依存関係のあるジョブは、各依存ジョブが必要な状態に入るまでは、スケジュールされた( - SCHEDULED)状態に移行できません。依存ジョブが必要な状態に入ることができなくなった場合、依存関係のあるジョブはスケジュールされずに直ちに失敗します。
- すべてのジョブと同様に、依存ジョブがキュー内の最大待機時間を超えると、スケジュールされた( - SCHEDULED)状態に移行できません。Batch は、ジョブが古くなるのを防ぐためにこの上限を適用します。したがって、依存関係ジョブのいずれかの完了に必要な残り時間がこの上限を超える可能性がある場合は、次のいずれか 1 つ以上を行うことを検討してください。- 依存ジョブをまだ作成していない場合は、依存ジョブの想定実行時間を短縮してみてください。たとえば、ワークロードの並列処理を増やすか、成功する必要のないタスクと実行可能ファイルの実行時間を制限できます。
- 依存関係ジョブの予想実行時間が上限を下回るまで、依存関係ジョブの作成を待ちます。
 
依存関係のあるジョブを作成する
依存関係のあるジョブを作成するには、次の方法を使用します。
- 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"
      }
    }
  ]
}
次のステップ
- ジョブの作成または実行で問題が発生した場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する方法を確認する。
- 別のジョブ作成オプションについて学習する。