Help us understand the problem. What is going on with this article?

Amazon S3 Event Notificationsを設定してみる

More than 5 years have passed since last update.

Event Notifications

現在ラスベガスで開催されているAWS re:InventにてS3の新機能が発表されました。

S3にオブジェクトがアップロードされたり上書きした際に、通知を送ることができます。
通知は、Amazon SNS/ Amazon SQS/ AWS Lambdaの3つの方法で実行することができます。
(AWS Lambdaはまだプレビュー版で、使うにはManagementConsoleからリクエストを送る必要があります。)

既にいろんな人が試していると思いますが、SNSでの設定してみました。
ざっくりと3ステップで設定できます。ただ、僕はSNSのポリシー設定でハマりました・・・。
とにかく、やってみましょう。

S3のバケットを作る

Tokyoリージョンで作ります。
S3とSNSのリージョンは同じである必要があります。

S3_Management_Console.png

SNSのトピックを作る

Tokyoリージョンを選択します。

S3_Management_Console.png

SNS_Management_Console.png

Subscriptionを作成します。
EndpointにはSNSを受け取るメールアドレスを入力します。
通常のメール形式でも受け取れますが、今回はEMailJSONという形式を選択してみます。

SNS_Management_Console.png

Subscriptionを作成すると、以下のような画面が表示されます。
設定したメールアドレスに認証用メールが届いているはずです。
SubscribeURLのリンクへアクセスして認証を完了します。

SNS_Management_Console.png

TopicActionボタンより、「View/Edit Topic policy」を選択します。

SNS_Management_Console.png

SNS_Management_Console.png

Condition以下を下記のように書き換えます。

"Condition": {
    "ArnLike": {
      "aws:SourceArn": "arn:aws:s3:*:*:s3-event-test"
    }

S3のEvents設定をする

Eventには ObjectCreated(ALL),Put,Post,Copy,ComputeMultiPatUploadの4種類選べます。
今回は全てのイベント(ALL)を選択しました。

S3_Management_Console.png

S3_Management_Console.png

正常に保存できれば以下の様な感じになります。
エラーになる場合は、ポリシー設定周りを確認するのがいいかと思います。

S3_Management_Console.png

動作確認

あとは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の実行も早く試してみたいですねー

jacoyutorius
Software/Server developer at AIRS. Ruby / AWS / Vue
http://jacoyutorius.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away