s3 event notifications やってみた
DESCRIPTION
JAWS-UG 北陸 勉強会 第8回 セッション S3 Event Notifications を使ってみたので報告TRANSCRIPT
S3 Event Notificationsやってみた
JAWS-UG北陸 NKMC
2014/11/29
セッション枠が埋まらなかったので
•最近追加された機能を紹介&実践
S3 Event Notifications
• 2014/11/13に追加されたS3の新機能
• S3にオブジェクトがアップロードされると• トピック(SNS)
• キュー(SQS)
• 関数(Lambda)
にイベントを送ることができる
•詳しくは AWSブログを見てねhttp://aws.typepad.com/aws_japan/2014/11/s3-event-notification.html
用途?
• オブジェクト駆動の実装が可能
例)モバイルアプリからS3に画像をアップロードし、パスをDBに保存する
今までだと・・・
• モバイルアプリ => 画像をダイレクトS3転送 + EC2サーバのAPIをコールして通知(DBにパスを保存)
• モバイルアプリ => EC2サーバに画像送信 =>EC2サーバからS3にアップロード+DBにパスを保存
こんな風に使える?
• Event Notificationsを使うとモバイルアプリ => 画像ダイレクトS3転送
↓イベント通知(SQS)
↑EC2サーバでキュー処理 =>パスをDB登録
といった感じで、クライアント-サーバ間で非同期で画像を処理できる。
他にも・・・
• オブジェクトアップロード時の初期化や、ログ取り、内容チェックができそう。
• Lambdaと組み合わせれば、S3に画像をアップロードするとEC2サーバを使わずにリサイズ・変換・加工したりできるね!
では実践!
•やってみること
S3バケットにオブジェクトがアップロードされたら、メールで通知する
S3バケットの準備
• おもむろにS3のバケットを作成S3 > 『Create Bucket』
•既存のバケットでもいいよ
SNSトピック作成
• SNSトピックをつくるSNS > SNS Dashboard > 『Create New Topic』
• トピック名、表示名を設定して作成
トピックの購読者登録
• SNS > Subscriptions > トピックを選択 > 『Create Subscription』
• 「Protocol」をEmailまたはEmail-JSON
• 「Endpoint」を自分のメールアドレス
購読の承認
•購読者のメールアドレスに「AWS Notification – Subscription Confirmation」というメールが届く
•本文中のURLをクリックして承認
トピックの権限設定
• SNS > トピック選択 > All Topic Actions > View/Edit Topic Policy > Advanced View
• S3がSNSにイベントを通知できるように、トピックの権限を手直し
設定内容
{ "Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [ {
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": { "AWS": "*" },
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:026724327907:S3-Notification",
"Condition": {
"ArnEquals": {
"AWS:SourceArn": "arn:aws:s3:::nkmc-s3-event"
}}}]
}
作成したトピックのARN
自分のS3バケットのARN
SNS:Publish
に限定
ARNの比較と指定
S3にイベント通知設定
• S3 > バケット選択 > Properties > Events
• イベント名をつける
•通知イベントを選択
• SNSトピックを選択
通知されるか試す
• オブジェクトをバケットにアップロード
• メールが飛んだか確認
通知される内容
• Region
• Timestamp
• Event Type (上記のリストで示したイベント)
• Request Actor Principal ID
• リクエストのSource IP
• Request ID
• Host ID
• Notification Configuration Destination ID
• バケット名
• バケットARN
• Bucket Owner Principal ID
• オブジェクトのキー(オブジェクトの名前)
• オブジェクトのサイズ
• オブジェクトのETag
• オブジェクトのバージョンID(もしバケットでバージョニングを有効に為ていた場合)
おしまい
•工夫次第でいろいろ使いどころがありそうですね。