AWS CloudWach Events実行時に便利なConfigure input

2016.01.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

CloudWatch EventsではAutoScalingやAWSのAPIをトリガーにLambdaを実行することができます。

今回は、CloudWatchをトリガーに実行されたLambdaファンクションのインプットをカスタマイズしてみます。

設定箇所としては、CloudWatch Events作成時の以下の箇所となります。

cloudwatch-event-inputconfigure

Configure inputの種類

Lambdaファンクションへ渡せるインプットは3種類あります。ここで指定したものが、Lambdaのeventで受け取れます。

  • Matched event:トリガー情報をすべて渡す
  • Part of the matched event:指定した情報を渡す
  • Constant (JSON text):自分で定義した情報を渡す

やってみた

実行するLambdaファンクション

スケジュールで以下のコードを実行して、eventの内容をCloudWatch Logsへ出力してみます。

import boto3
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    try:
        #print event
        logger.info( event )
    except Exception as e:
        print(e)
        raise e

Matched event

イベントソースによって異なりますが、スケジュールの場合は以下が出力されました。

{   u'account': u'***********', 
    u'region': u'ap-northeast-1', 
    u'detail': {}, 
    u'detail-type': u'Scheduled Event', 
    u'source': u'aws.events', 
    u'version': u'0', 
    u'time': u'2016-01-22T01:48:21Z', 
    u'id': u'************', 
    u'resources': [u'arn:aws:events:ap-northeast-1:***********:rule/inputConfigure']
}

※見やすいように改行しています(CloudWatch Logs上は改行されず1行です)

Part of the matched event

必要なデータを指定することができます。ここでは、timeだけ取り出してみます。

input configureに以下を指定します。

$.time

eventには以下が渡されました。ほしい情報だけ取得できました。

2016-01-22T02:28:21Z

Constant (JSON text)

任意のjsonを指定して取り出せます。パラメータをここに持たすことで、Lambdaファンクションの汎用化ができますね。

input configureに以下を指定します。

{ "Name": "Jun Chiba", "Like": "Sushi"}

eventには以下が渡されました。

{u'Name': u'Jun Chiba', u'Like': u'Sushi'}

最後に

inputのカスタマイズをしてみました。カスタマイズすることで柔軟に対応できそうですね。

参考

http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/DeveloperGuide/RelayEventsKinesisStream.html