[新機能] CloudWatch EventsがAmazon SQSのQueueをターゲット指定できるようになりました

はじめに

今回ご紹介する新機能はこちら!

CloudWatch Eventsは、これまではAWS Lambda、Amazon Kinesis Stream、Amazon SNS、Bullet-inをターゲットとして指定することが出来ました。今回の新機能によって、ターゲットにSQS Queueを指定できるようになりました!

ってことでとりあえずやってみました。

やってみた

SQS Queueを作っておきます。今回は[job]という名前にしました。

SQS_Management_Console

AWS管理コンソールのCloudWatch画面で、[Events]をクリックし、[Create Rule]ボタンをクリックします。

CloudWatch_Management_Console

[Event Selector]は[Schedule]とし、5分ごとにしました。[Targets]は今回の新機能であるSQS Queueを指定し、上記のjobというQueueを指定しています。設定したら[Configure details]ボタンをクリックします。

CloudWatch_Management_Console 2

[Name]は適当につけます。[Create rule]ボタンをクリック。

CloudWatch_Management_Console 3

すると、以下のようにjobキューにMessageが追加されました!

SQS_Management_Console 2

5分待つと...Messageは増えています。

SQS_Management_Console 3

実際にどんなMessageが入っているか確認しました。"detail-type"が"Scheduled Event"となっています。

$ aws sqs receive-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXXXXX/job
{
    "Messages": [
        {
            "Body": "{\"version\":\"0\",\"id\":\"c5dcf898-2225-4b95-b2ec-foobar\",\"detail-type\":\"Scheduled Event\",\"source\":\"aws.events\",\"account\":\"XXXXXXXXXXXX\",\"time\":\"2016-03-31T05:08:57Z\",\"region\":\"ap-northeast-1\",\"resources\":[\"arn:aws:events:ap-northeast-1:XXXXXXXXXXXX:rule/sendQueue\"],\"detail\":{}}",
            "ReceiptHandle": "AQEBPwH7sCEUByU92Ajg51WNBnn11sdJMYuRyDxeeePJ9UcPqSOpZl1GlUd7HN4iKErpJVbDVD05b4qAXG6sjhK/ItNHdgULNlwKCDVlqueH7pcuUgoECqujYoMUo4Ewgf4vt8GQGkcq+me+b8t7zMJi/0+t6inQgzVSPBL0DlUZHFKqOTncic7c+VtaHhv75D4/NDroOWp4i9LWYXaQ3m/gql4IXj90aLFH4V29aKpL2UehDM6UFhQAyxnOa1serFvaJ/foobar/xfiReuO4x1L5WYckpBIH4GKPLkiHmvgS4qiDINmHd/6atpkG8teX/foobar",
            "MD5OfBody": "6626956141fe6d29XXXXXXXXXX",
            "MessageId": "fbfb4022-fde9-4dbd-8f70-XXXXXXXXXX"
        }
    ]
}

さいごに

単純にスケジュールでSQS QueueにMessageを入れることも出来ますし、AWS APIを起点にすることもできるので、例えばS3にファイルがアップロードされたらWorkerインスタンスに処理させるようなことも出来ます。SQSをターゲットに指定できるようになったことで、更に利用の幅が広がりましたね!