Amazon EventBridge Scheduler で Amazon SNS トピックにパブリッシュをする構成を AWS CDK で作ってみた

2024.02.23

こんにちは、CX 事業本部製造ビジネステクノロジー部の若槻です。

今回は、Amazon EventBridge SchedulerAmazon SNS トピックにパブリッシュをする構成を AWS CDK で作ってみました。

ちなみに Amazon EventBridge Scheduler と Amazon Event Bridge Rule は別物です。下記に詳しいのでご参照ください。

やってみた

EventBridge Scheduler を CDK で構成するための Alpha バージョンのモジュールをインストールします。

npm i -D @aws-cdk/aws-scheduler-alpha
npm i -D @aws-cdk/aws-scheduler-targets-alpha

CDK コード

AWS CDK(TypeScript)のコードです。ここでは EventBridge Scheduler を指定時間に 1 回だけ起動するようにし、また SNS トピックにパブリッシュがされたことを確認するために E メールサブスクリプションを設定しています。

lib/cdk-sample-stack.ts

import { aws_sns, aws_sns_subscriptions, Stack, TimeZone } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as aws_scheduler_alpha from '@aws-cdk/aws-scheduler-alpha';
import * as aws_scheduler_targets_alpha from '@aws-cdk/aws-scheduler-targets-alpha';

const EMAIL_ADDRESS = process.env.EMAIL_ADDRESS || '';

export class CdkSampleStack extends Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);
    // SNS トピックを作成
    const sampleTopic = new aws_sns.Topic(this, 'SampleTopic');

    // トピックへのパブリッシュのターゲットを作成
    const topicTarget = new aws_scheduler_targets_alpha.SnsPublish(sampleTopic);

    // トピックに E メールサブスクリプションを追加
    sampleTopic.addSubscription(
      new aws_sns_subscriptions.EmailSubscription(EMAIL_ADDRESS)
    );

    // SNS トピックをターゲットとした EventBridge Scheduler を作成
    new aws_scheduler_alpha.Schedule(this, 'SampleSchedule', {
      target: topicTarget,
      schedule: aws_scheduler_alpha.ScheduleExpression.at(
        new Date('2024-02-23T00:50:00'),
        TimeZone.ASIA_TOKYO
      ),
    });
  }
}

デプロイ

環境変数 EMAIL_ADDRESS にサブスクリプション用の E メールアドレスを設定します。

export EMAIL_ADDRESS=<サブスクリプション用Eメールアドレス>

CDK デプロイをします。

npx cdk deploy --require-approval never --method=direct

デプロイされたスタックのリソースは次のようになります。

上記の AWS::IAM::Role(SchedulerRoleForTarget1441a743A31888)をリンクから開いて確認してみます。

ロールにアタッチされているポリシーを確認すると、作成された SNS トピックに対する sns:Publish アクションのみが許可された必要最低限の権限が付与されていることがわかります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:CdkSampleStack-SampleTopic5FE9B5DC-IYQqBIHl6x8w",
            "Effect": "Allow"
        }
    ]
}

動作確認

SNS サブスクリプションが作成されると、指定した E メールアドレスに Confirm メールが送信されるので、本文中のリンクから Confrim を行います。

指定した時間になると、指定した E メールアドレスにメールが届きました!

おわりに

Amazon EventBridge Scheduler で Amazon SNS トピックにパブリッシュをする構成を AWS CDK で作ってみました。

よくある構成だと思うので、参考になれば幸いです。

参考

以上