はじめに
本記事は、AWS公式ドキュメントのCloudWatch イベント ターゲットとしての AWS Batch ジョブの内容をより噛み砕いた記事になります。
例とともに
やりたいこと
今回やりたかったことは、CloudWatch Eventsをスケジュール形式で実行させ、このときEventが持つその実行時の日時をAWS Batch Jobに渡すことです。
Batchの状態
AWS BatchのJob Definitionには以下のようにdate
という値をパラメータにした定義を持っています。
CLIで表示すると以下のように出ます。
$ aws batch describe-job-definitions --job-definition-name "my-job-definition-name"
{
"jobDefinitions": [
{
"jobDefinitionName": "mixlunch-matching-job-definition",
"jobDefinitionArn": "arn:aws:batch:ap-northeast-1:XXXXXXXXXXXX:job-definition/mixlunch-matching-job-definition:5",
"revision": 5,
"status": "ACTIVE",
"type": "container",
"parameters": {
"date": "2018-11-01T00:00:00Z"
},
"retryStrategy": {
"attempts": 1
},
"containerProperties": {
"image": "XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/mixlunch-matching:latest",
"vcpus": 1,
"memory": 2000,
"command": [
"python",
"./run.py",
"Ref::date"
],
.
.
私の上記の例の場合はdate
パラメータはPython実行にて引数としてアプリに渡すために利用します。
CloudWatch Eventでの設定方法
今回の例ではスケジュール設定(cron)でのイベントソースを利用します。CloudWatch Eventのルールにおけるイベントソースはとても多様ですが、後述の設定方法はどのイベントソースでも共通です。
スクショとしては下記のようになります。
スクショ左下青枠はイベントソースからやってくるサンプルのJSON形式です。
今回AWS Batch Jobに渡したいのは赤枠の部分の"time"
フィールドの中身です。
そのために、スクショ右側でのConfigure inputにはInput Transformerを設定します。
1つ目の枠には、イベントソースから来るJSONのフィールドを指定のキーに渡す設定です。
{
"detail": {
"requestParameters": {
"bucketName": "my-bucket"
}
}
}
上記のようなJSON形式の場合のイベントソースならば、{"myValue": "$.detail.requestParameters.bucketName"}
のように記述できます。
2つ目の枠では1つ目で取得したキーを用いてAWS Batch Jobのパラメータに指定します。
今回の例では{"Parameters" : {"date": <TimeValue>}}
とすることでAWS Batch Jobで定義しているdate
へ渡すことができます。
AWS CLIでは以下で内容を取得できます。
$ aws events list-targets-by-rule --rule "matching"
{
"Targets": [
{
"Id": "IdXXXXXXXXXXXX",
"Arn": "arn:aws:batch:ap-northeast-1:XXXXXXXXXXXX:job-queue/mixlunch-matching-job-queue",
"RoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/service-role/AWS_Events_Invoke_Batch_Job_Queue_XXXXXXXXXXXX",
"InputTransformer": {
"InputPathsMap": {
"TimeValue": "$.time"
},
"InputTemplate": "{\"Parameters\" : {\"date\": <TimeValue>}}"
},
"BatchParameters": {
"JobDefinition": "arn:aws:batch:ap-northeast-1:XXXXXXXXXXXX:job-definition/mixlunch-matching-job-definition:5",
"JobName": "matching-job"
}
}
]
}