LoginSignup
0
1

More than 3 years have passed since last update.

CloudWatch Eventにてイベントソースからの情報をAWS Batch Jobのパラメータに渡す

Posted at

はじめに

本記事は、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のルールにおけるイベントソースはとても多様ですが、後述の設定方法はどのイベントソースでも共通です。

スクショとしては下記のようになります。

CloudWatch_Management_Console.png

スクショ左下青枠はイベントソースからやってくるサンプルの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"
            }
        }
    ]
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1