Event Notifications
現在ラスベガスで開催されているAWS re:InventにてS3の新機能が発表されました。
S3にオブジェクトがアップロードされたり上書きした際に、通知を送ることができます。
通知は、Amazon SNS/ Amazon SQS/ AWS Lambdaの3つの方法で実行することができます。
(AWS Lambdaはまだプレビュー版で、使うにはManagementConsoleからリクエストを送る必要があります。)
既にいろんな人が試していると思いますが、SNSでの設定してみました。
ざっくりと3ステップで設定できます。ただ、僕はSNSのポリシー設定でハマりました・・・。
とにかく、やってみましょう。
S3のバケットを作る
Tokyoリージョンで作ります。
S3とSNSのリージョンは同じである必要があります。
SNSのトピックを作る
Tokyoリージョンを選択します。
Subscriptionを作成します。
EndpointにはSNSを受け取るメールアドレスを入力します。
通常のメール形式でも受け取れますが、今回はEMailJSONという形式を選択してみます。
Subscriptionを作成すると、以下のような画面が表示されます。
設定したメールアドレスに認証用メールが届いているはずです。
SubscribeURLのリンクへアクセスして認証を完了します。
TopicActionボタンより、「View/Edit Topic policy」を選択します。
Condition以下を下記のように書き換えます。
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*:s3-event-test"
}
S3のEvents設定をする
Eventには ObjectCreated(ALL),Put,Post,Copy,ComputeMultiPatUploadの4種類選べます。
今回は全てのイベント(ALL)を選択しました。
正常に保存できれば以下の様な感じになります。
エラーになる場合は、ポリシー設定周りを確認するのがいいかと思います。
動作確認
あとはS3に適当なファイルをアップロードしています。
アップロード完了後、登録したアドレスにメールが届いていたら成功です。
こんな感じのJSONが届いています。
{
"Type" : "Notification",
"MessageId" : "5230ec36-054e-5b4a-9be2-a0e9c65627ab",
"TopicArn" : "arn:aws:sns:ap-northeast-1~:s3-event-topic",
"Subject" : "Amazon S3 Notification",
"Message" : "{\"Records\":[{\"eventVersion\":\"2.0\",\"eventSource\":\"aws:s3\",\"awsRegion\":\"ap-northeast-1\",\"eventTime\":\"2014-11-14T08:44:08.186Z\",\"eventName\":\"ObjectCreated:Put\",\"userIdentity\":{\"principalId\":\"ACXAST529TQXX\"},\"requestParameters\":{\"sourceIPAddress\":\"10.115.144.24\"},\"responseElements\":{\"x-amz-request-id\":\"90BC3EA8CFE5595C\",\"x-amz-id-2\":\"UFr7b4eZQmPVauENR6Zb7zB40GrxhxMVUHLqhzq6sX3fNybfo/DV23yCNE0xEuQw\"},\"s3\":{\"s3SchemaVersion\":\"1.0\",\"configurationId\":\"upload-event\",\"bucket\":{\"name\":\"s3-event-test\",\"ownerIdentity\":{\"principalId\":\"ACXAST529TQXX\"},\"arn\":\"arn:aws:s3:::s3-event-test\"},\"object\":{\"key\":\"car.txt\",\"size\":120,\"eTag\":\"782a329be052f76a716f238ef7c69b52\"}}}]}",
(省略)
}
以上。
Lambda Functionの実行も早く試してみたいですねー