S3ファイル作成をトリガーにしてLambda起動

S3ファイル作成をトリガーにしてLambda起動させてみて、どんなオブジェクトがLambdaに渡されるのかを確認しました。

Lambda作成

Runtimeは今回は Node.js 14.x を選択しました。

ソースコードはこれだけ。

exports.handler = async (event) => {
    console.log(JSON.stringify(event));
};

S3イベント設定

マネジメントコンソール上で、S3のPropertiesのEvent notifications(プロパティのイベント通知)のところから設定します。

こんな感じ。

f:id:suzuki-navi:20210421013648p:plain

通知したいイベントのタイプはオブジェクト作成を選択しました。

下のほうにイベントの通知先の設定欄がありますので、先ほど作ったLambdaを選択します。

f:id:suzuki-navi:20210421013708p:plain

試してみる

$ echo Hello | aws s3 cp - s3://xxxxxxxx/eventsample/1.txt

CloudWatch Logsには以下のJSONが出力されました。

{
    "Records": [
        {
            "eventVersion": "2.1",
            "eventSource": "aws:s3",
            "awsRegion": "ap-northeast-1",
            "eventTime": "2021-04-20T15:45:05.043Z",
            "eventName": "ObjectCreated:Put",
            "userIdentity": {
                "principalId": "AWS:AIDAXXXXXXXXXXXXXXXXX"
            },
            "requestParameters": {
                "sourceIPAddress": "35.xxx.xxx.xxx"
            },
            "responseElements": {
                "x-amz-request-id": "3VVRXXXXXXXXXXXX",
                "x-amz-id-2": "xxxxxxxxxxxxxxxx"
            },
            "s3": {
                "s3SchemaVersion": "1.0",
                "configurationId": "s3event-sample",
                "bucket": {
                    "name": "xxxxxxxx",
                    "ownerIdentity": {
                        "principalId": "XXXXXXXXXXXXXX"
                    },
                    "arn": "arn:aws:s3:::xxxxxxxx"
                },
                "object": {
                    "key": "eventsample/1.txt",
                    "size": 6,
                    "eTag": "09f7e02f1290be211da707a266f153b3",
                    "sequencer": "00607EF70623E54228"
                }
            }
        }
    ]
}