AWS CDK で CloudFormation スタックの SNS 通知をスタック定義内に指定可能になりました
こんにちは、製造ビジネステクノロジー部の若槻です。
AWS CDK の最新のリリースである v2.160.0 で、下記のアップデートが追加されていました。
core: configure Stack SNS notification ARNs on the Stack construct (#31107) (1593500), closes #8581
「CloudFormation スタックの SNS 通知」とは、ダッシュボード上だとスタックの詳細の以下のセクションで設定できる通知先のことです。
今まではこの通知設定は CDK デプロイコマンドの --notification-arns
オプションで指定する必要がありましたが、今回のアップデートによりスタック定義内にコードで指定できるようになりました。
試してみた
CDK パッケージのアップデート
AWS CDK パッケージを v2.160.0 以上にアップデートします。
npm i aws-cdk-lib@latest aws-cdk@latest
スタック定義内で通知を設定する
まず、通知を設定したいスタックのコンストラクターの第三引数が StackProps interface を持つようにします。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkSampleStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
}
}
そしてスタックの初期化を行う定義で、第三引数に通知先に使用したい SNS トピックの ARN を指定します。
import { App } from 'aws-cdk-lib';
import { CdkSampleStack } from '../lib/cdk-sample-stack';
const app = new App();
const accountId = process.env.CDK_DEFAULT_ACCOUNT;
const region = process.env.CDK_DEFAULT_REGION;
new CdkSampleStack(app, 'CdkSampleStack', {
notificationArns: [`arn:aws:sns:${region}:${accountId}:test`], // SNS トピックの ARN を指定
});
上記をデプロイすると Notification options に SNS の ARN が追加されました。
また以下のようなメールが SNS トピックのサブスクリプション経由で早速五通届きました。
メール内容によるとスタックの次の五つのステータス変更の通知が立て続けに行われたことが分かります。
- ResourceStatus が
UPDATE_IN_PROGRESS
に変更 - ResourceStatusReason が
User Initiated
から空に変更 - ResourceStatus が
UPDATE_COMPLETE
に変更 - ResourceStatus が
UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
に変更 - ResourceStatus が
UPDATE_COMPLETE
に変更
通知をフィルターしたい場合
前述の通りデフォルトではすべてのステータス変更のたびに通知が行われますが、特定のステータスへの変更のみ通知をさせたい場合もあると思います。
その場合は下記のサブスクリプションフィルターを使用するか、
そもそも別の仕組みとして EventBridge Rule を使ってステータスの変更を検知するという方法もあります。
CDK コマンドの --notification-arns オプションを組み合わせた場合
前述の CDK コードの記載は変えずに、--notification-arn
をオプションを指定したコマンドで再度デプロイしてみるとどうなるでしょうか。スタック定義では test
、コマンドのオプションでは test2
が指定されています。
npx cdk deploy --notification-arns "arn:aws:sns:${CDK_DEFAULT_REGION}:${CDK_DEFAULT_ACCOUNT}:test2"
するといずれの SNS トピックも通知先に設定されました。どちらかが片方を上書きするのではなく、両方の組み合わせとなるようです。
おわりに
AWS CDK で CloudFormation スタックの SNS 通知をスタック定義内に指定可能になったのでご紹介しました。
コマンドのオプションではなくスタック定義内に直接指定できるようになったことで、別スタックで作成したトピックをクロススタック参照で指定するなど、通知先の管理もしやすくなったのではないでしょうか。
ただ前述の通りデフォルトだとすべてのステータス変更が通知されるため、通知の適度なフィルタリングは行いたいところです。
参考
以上