S3のイベント通知でSNSに通知を飛ばしてみる
はろーはろー。こんばんみ。
お祭り期間ではあるんですが、ちょっと思いついたことをやりたくなってしまったのでそっちを優先しました。
目次
とりあえずできたんか?
掲題の件、できもうした。
SNSのサブスクリプションに設定してある、私の携帯へSMS通信がきっちり届きました。
gyazo.com
とどきましたが。これじゃ何が何だかなので。このままではいけませんね。
構成
S3 → ファイルアップロード → SNSトピック → SMSメッセージ
の流れ。AWSで何かしようと思うと、たくさんサービスが現れてくるので慣れないと戸惑いますが。
ちっさくちっさく作っていくと少量でいけたりするので良いですね。
作業手順
SNSトピックを作る。
名前はご自由に。緊急通報のRSSでも受け取って遊ぼうかなーと思っていたのでそんな感じのトピック名になっています。
S3からの通知を受け取るにはデフォルトのポリシー設定ではたりません。
以下のようなポリシーを追加してやる必要があります。
{ "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "arn:aws:sns:Region:account-id:topic-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::bucket-name" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } }
buckecName,AccountIDなどは調整が必要です。
※S3のHowToを参考に貼っておきます。
docs.aws.amazon.com
通知確認のために、一緒にサブスクリプションも作っておくと良いでしょう。
S3バケットのイベント設定をする。
バケットを作ってプロパティタブからイベントを選んで設定していきます。
prefix、Suffix等オブジェクトの情報である程度フィルタがかけられるようですが、今回は無視しています。
gyazo.com
前述のポリシー設定がうまく言っていないと、保存時に以下のようなエラーがでます。再度確認してみてください。
gyazo.com
発火するか
最後にバケットに適当なオブジェクトを投げ入れて通知が飛ぶか確認してみます。
結果は前述の通り、なんか帰ってきます。Goodですね!