この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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への通知等、必要に応じてカスタマイズするのも一つの手です。