調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果を。

S3のイベント通知でSNSに通知を飛ばしてみる

はろーはろー。こんばんみ
お祭り期間ではあるんですが、ちょっと思いついたことをやりたくなってしまったのでそっちを優先しました。

目次

とりあえずできたんか?

掲題の件、できもうした。
SNSサブスクリプションに設定してある、私の携帯へSMS通信がきっちり届きました。
gyazo.com

とどきましたが。これじゃ何が何だかなので。このままではいけませんね。

構成

S3 → ファイルアップロード → SNSトピック → SMSメッセージ
の流れ。AWSで何かしようと思うと、たくさんサービスが現れてくるので慣れないと戸惑いますが。
ちっさくちっさく作っていくと少量でいけたりするので良いですね。

作業手順

SNSトピックを作る。

gyazo.com

名前はご自由に。緊急通報の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ですね!

最終目標

実はこれはまだ完成ではなくて、RSSのメッセージをうまいことごにょって遊ぼうかな。とおもって。
ひとまずSMSの通知部分から作るかなーとおもってやってみました。
lambda等経由する必要があるかなーとも思っていましたが、直接SNSに通知ができやったぜ。と言ったところ。
単純にResponseを返してしまっているので、このままでは使えなさそうなので結局lambda等の経由は必要そうですが、
S3への配置等が起因で発火できるのはいいですね。もっと定期巡回とか必要かと思っていましたが。やったぜAWS