Amazon S3 Event NotificationsでのS3更新通知設定手順を再確認してみた

Amazon S3 Event Notificationsを利用したS3更新察知の手順を再確認して、CFnを交えた一例にてまとめました。
2019.10.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

S3バケットへのファイル追加把握はAmazon S3 Event Notificationsにて、SNS経由でメール通知等スマートに行いたいものです。DevIOでは過去に手続きを紹介した記事がありました。

[AWS新機能] Amazon S3 Event Notificationsを使ってみた #reinvent

上記記事の手続きに沿って実施してみましたが、若干UIの更新等が発生していました。とはいえ管理コンソールではよくあることです。

可能な範囲にてCloudFormationのTemplate化することで、若干が発生したとしても対応に迷わなくなるのではないかと思い、試してみました。

CFnで作成するもの

今回は既存のバケットを対象としました。そのため、CFnではSNS Topicの作成のみ行います。

  • Amazon SNS Topic

Amazon SNS Topicの作成

Terminal上の操作と管理コンソール操作を交えます。

スタック作成

yamlテンプレートを作成し、aws-cliにてcreate-stackを実行します。末尾のメールアドレスは自身のものに差し替えてください。

% cat - << EOS > 01_sns_create.yaml                                                                                                                 [~/Source/work/sns_subscribe]
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  MailAddress:
    Description: "send to"
    Type: String
Resources:
  BucketUpdateWatcher:
    Type: 'AWS::SNS::Topic'
    Properties:
      DisplayName: BucketUpdateWatcher
      TopicName: BucketUpdateWatcher
      Subscription:
      - Endpoint: !Ref MailAddress
        Protocol: email
EOS
% aws cloudformation create-stack 
  --stack-name test-stack
  --template-body file://$(pwd)/01_sns_create.yaml
  --parameters ParameterKey=MailAddress,ParameterValue=noreply@example

SNS サブスクリプションの確認

指定したメールアドレスへサブスクリプションの確認メールが届きます。文中の「Confirm subscription」をクリックします。

SNS Topic ポリシーの修正

Amazon SNSのTopicからBucketUpdateWatcherを選択し、アクセスポリシーにてCondition部分に以下の修正を入れて保存します。

      "Condition": {
-        "StringEquals": {
-          "AWS:SourceOwner": "XXXXXXXXXXXX"
+        "ArnLike": {
+          "aws:SourceArn": "arn:aws:s3:*:*:<BUCKET_NAME>"
        }
      }

S3Bucketのイベント設定

観測したいバケットのプロパティにて、イベントを選択します。

通知の追加を選択し、名前は適当にいれた上で、下図のように設定します。

保存をクリックして、下図のような表示になれば完了です。適当なファイルを追加してみると通知が届くはずです。

あとがき

CFnでカバーできる範囲はまだありそうですが、とりあえず動かすことを優先としました。返って手間になっている可能性がありますが、よりこなれた際には再度エントリーとしてまとめてみようと思います。

今回はメールでの通知設定となっていますが、Slackへの通知等、必要に応じてカスタマイズするのも一つの手です。