CloudWatchEventsのインプットでBatchのジョブ定義をオーバライドする


CloudWathEventsru-ルール で AWS Batchでバッチ処理を実行する構成では、CloudWatchEventのルール設定の「input」パラメータで、入力パラメータを設定できます。
さらに、入力パラメータ以外に、ジョブ定義のvcpuや環境変数などのパラメータのオーバーライドも可能ですのでその方法を紹介したいと思います。

TL:DR;

  • CloudWatchEventルールのターゲットInputContainerOverridesを追加する
    • ex)パラメータEnvの定義および、ジョブ定義のVcpuを4,メモリを2048に上書きする場合のInput
      • {"Parameters" : {"Env":"Prod" },"ContainerOverrides": { "Vcpus":4, "Memory":2048}}

利用用途

  • 一つのジョブ定義を使いまわしたいが、条件によっては環境変数やvcpuなどの一部のパラメータを変更したい場合
    • 一部の環境変数の変更やvcpuの変更程度あればジョブ定義を複数用意せずに済む

設定方法

コンソール

  • CloudWatchEventルール > ターゲット > 入力の設定 > 定数(JSONテキスト)
    • ここにContainerOverridesを記述する
    • 画像ではvcpuを4、memoryを2048に上書きする例

aws-cli

  • コマンド
    • aws events put-targets --rule [ルール名] --cli-input-json file://target.json
  • target.json
target.json
{
  "Targets": [
    {
      "Id": "1",
      "Arn": "jobQueueArn",
      "RoleArn": "roleArn",
      "Input": "{\"Parameters\" : {\"Env\":\"Prod\" },\"ContainerOverrides\": { \"Vcpus\":4, \"Memory\":2048}}",
      "BatchParameters": {
        "JobDefinition": "jobDefinitionArn",
        "JobName": "jobName"
      }
    }
  ]
}

設定できるプロパティ

以下のJSONのプロパティであればすべてオーバーライドしてBatchを実行することができると思います

  • Command
    • ジョブ実行時のコマンド
  • Environment
    • 環境変数
  • InstanceType
    • マルチノード並列ジョブに使用するインスタンスタイプ
  • Memory
    • ジョブに使用するメモリ
  • Vcpus
    • ジョブに使用するvcpu数
  • ResourceRequirements
    • GPUの利用設定

{
  "ContainerOverrides": {
    "Command": "echo 'hello world'",
    "Environment": [
      {
        "Name": "env",
        "Value": "prod"
      }
    ],
    "InstanceType": "m5.large",
    "Memory": 2048,
    "Vcpus": 2,
    "ResourceRequirements": {
      "Type": "GPU",
      "Value": "2"
    }
  }
}