Amazon S3 Event NotificationsでのS3更新通知設定手順を再確認してみた
はじめに
S3バケットへのファイル追加把握はAmazon S3 Event Notificationsにて、SNS経由でメール通知等スマートに行いたいものです。DevIOでは過去に手続きを紹介した記事がありました。
上記記事の手続きに沿って実施してみましたが、若干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への通知等、必要に応じてカスタマイズするのも一つの手です。