LoginSignup
2
3

More than 5 years have passed since last update.

S3からのイベント通知をSNSで受け取り、SQSにイベント通知を送る実装をCDKでやったのでメモ

Last updated at Posted at 2019-01-22

背景

あるS3バケットに作成されたというイベント通知を、staging用と本番用のSQSに通知を送りたい。が、S3のイベント通知は単一のSQSしか設定できないので複数SQSへの通知にはSNSをかませる必要がある。そこで、S3 -> SNS -> SQS のCDKでの基本実装についてメモ。

方針

SNS -> SQS のCDKでの実装

S3 -> SNSへの通知設定で "Unable to validate the following destination configurations"で設定できない

S3 -> SNSへのイベント通知設定をコンソールで行おうとすると、"Unable to validate the following destination configurations"エラーが出て設定できなかった。どうやら、SNSのTopicにポリシー設定をする必要があったようだ。

実装


// 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],
});
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3