CloudWathEventsru-ルール で AWS Batchでバッチ処理を実行する構成では、CloudWatchEventのルール設定の「input」パラメータで、入力パラメータを設定できます。
さらに、入力パラメータ以外に、ジョブ定義のvcpuや環境変数などのパラメータのオーバーライドも可能ですのでその方法を紹介したいと思います。
TL:DR;
- CloudWatchEventルールのターゲット
Input
にContainerOverrides
を追加する- ex)パラメータ
Env
の定義および、ジョブ定義のVcpuを4,メモリを2048に上書きする場合のInput
{"Parameters" : {"Env":"Prod" },"ContainerOverrides": { "Vcpus":4, "Memory":2048}}
- ex)パラメータ
利用用途
- 一つのジョブ定義を使いまわしたいが、条件によっては環境変数やvcpuなどの一部のパラメータを変更したい場合
- 一部の環境変数の変更やvcpuの変更程度あればジョブ定義を複数用意せずに済む
設定方法
コンソール
- CloudWatchEventルール > ターゲット > 入力の設定 > 定数(JSONテキスト)
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"
}
}
}