Closed3

AWS SNSを利用してslackに通知を飛ばす

ふしみんふしみん

SNS と SQS の違い

違いを簡潔に

SQS

  • キューをポーリングして取得するキューイングサービス
  • しばらくイベントを保持することができる
  • 1 対 1

SNS

  • メッセージをプッシュして送るメッセージングサービス
  • デッドレターキューを用意すれば、送信エラー時の処理もできる
  • 1 対 複数

ユースケース

SNS

Fanout pattern

https://github.com/cdk-patterns/serverless/blob/main/the-big-fan/img/the-big-fan-arch.png

SNS のトピックに掲示されたメッセージが複数のエンドポイントにプッシュされる。

SQS

the scalable webhook

https://raw.githubusercontent.com/cdk-patterns/serverless/master/the-scalable-webhook/img/architecture.png

短時間に 大量のリクエストが来てもキューを間に挟むことで、順番に処理できる。

ref )

ふしみんふしみん

CDKでインフラ構築

前提

  • cdk typescript を利用
  • aws-cdk v2.50.0

SNSとnotifyLambda


    // SQS, SNS の用意
    this.sns_topic = new Topic(
      this, "crypto-notifier-sns"
    )

    this.deadLetterQueue = new Queue(this, 'deadLetterQueue');

   // notifyLambdaにsnsに関する権限を付与
    const snsTopicPolicy = new PolicyStatement({
      actions: ['sns:*'],
      resources: ['*'],
    });

   // Slack通知用Lambda
    this.slackNotifyLambda = new NodejsFunction(this, 'slack-notify-lambda', {
      entry: path.join(__dirname, '../lambda-fns/slack-notifier.js'),
      functionName: 'slack-notifier',
      handler: 'handler',
      runtime: Runtime.NODEJS_16_X,
      bundling: {
        nodeModules: ['phin']
      },
      environment: {
        HOOK_URL: slack_webhook,
      },
    });

    this.slackNotifyLambda.addEventSource(new SnsEventSource(
      this.sns_topic, {
        deadLetterQueue: this.deadLetterQueue
    })
    )
このスクラップは2023/06/30にクローズされました