背景
あるS3バケットに作成されたというイベント通知を、staging用と本番用のSQSに通知を送りたい。が、S3のイベント通知は単一のSQSしか設定できないので複数SQSへの通知にはSNSをかませる必要がある。そこで、S3 -> SNS -> SQS のCDKでの基本実装についてメモ。
方針
SNS -> SQS のCDKでの実装
- 公式ドキュメントのサンプルみればよき
- S3 -> SNSへのイベント通知はコンソールで行う
S3 -> SNSへの通知設定で "Unable to validate the following destination configurations"で設定できない
S3 -> SNSへのイベント通知設定をコンソールで行おうとすると、"Unable to validate the following destination configurations"エラーが出て設定できなかった。どうやら、SNSのTopicにポリシー設定をする必要があったようだ。
- AWS CloudFormation で S3 イベント通知を使用したときに発生するエラー、"Unable to validate the following destination configurations (以下の送信先設定を検証できません)" を避けるにはどうすればよいですか?
- S3 の put event を sns に流そうとした時の Permissions error の解決方法
実装
// Topic作成
const reportTopic = new sns.Topic(this, 'SomeTopic', {});
// Topicのポリシー作成
reportTopic.addToResourcePolicy(
new PolicyStatement(PolicyStatementEffect.Allow)
.addAction('sns:Publish')
.addPrincipal(new iam.Anyone())
.addResource(reportTopic.topicArn),
);
// SQS作成
const queue = new sqs.Queue(this, env + 'ReportEventQueue', {
queueName: 'some-queue'
});
// Topic -> SQSの連携
reportTopic.subscribeQueue(queue);
// SQSのポリシー
new sqs.cloudformation.QueuePolicyResource(this, 'ReportEventQueuePolicy', {
policyDocument: new iam.PolicyDocument().addStatement(
new iam.PolicyStatement()
.addPrincipal(new iam.Anyone())
.addAction('SQS:SendMessage')
.addResource(queue.queueArn),
queues: [queue.queueUrl],
});