HAPPY HACKING Oouchi's BLOG

PSE(ポンコツエンジニア)の技術ブログ

S3 put時に Amazon SNSを使用してメールを送信する

f:id:ooooouchi:20200517191643p:plain

目的

  • S3のputをトリガーにSNSでメール通知を行う

本題

SNSトピックを作成

SNSコンソールを開き、トピックを押下します。
トピックの作成を押下し、トピックの作成をしていきます。

名前:TestTopic
表示名:TestTopic

他の設定はデフォルトで大丈夫です。

f:id:ooooouchi:20200517191203p:plain

トピックの作成を押下します。
作成が完了したらトピックのARNを控えておきます。

サブスクリプション設定

先ほど作成したトピックの詳細画面で「サブスクリプションの作成」を押下します。
サブスクリプションの設定をしていきます。

プロトコル:Eメール
エンドポイント:通知先のメールアドレス

f:id:ooooouchi:20200517191207p:plain

サブスクリプションの作成を押下するとサブスクリプションを許可するメールが届きます。
本文内のリンクを押下するとメールアドレスがSNSトピックに登録されます。

f:id:ooooouchi:20200517191211p:plain

S3イベントの作成

S3コンソールページからS3バケットを作成します。
作成時の設定は全てデフォルトで大丈夫です。

SNSトピックアクセスポリシーを編集する

SNSコンソールページに戻ります。
先ほど作成したトピックを選択し、編集を押下します。

アクセスポリシー欄を表示します。
表示されているバケットポリシーを更新します。
SNSトピックARNとバケット名は作成したものに変更してください。

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "<SNSトピックのARN>",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:*:*:<バケット名>"
        }
      }
    }
  ]
}

変更の保存を押下します。

S3イベントを作成

S3コンソールページに戻ります。
作成したバケットの詳細画面でプロパティタブを押下します。
詳細設定のイベントを押下し、通知の追加をします。

名前:SNSPut
イベント:PUT
送信先:SNSトピック
SNS:作成したトピック

f:id:ooooouchi:20200517191215p:plain

設定が完了したら保存を押下します。

動作確認

作成したS3バケットにファイルをアップロードします。
アップロードが成功したらSNSからメールが通知されます。