[アップデート] AWS User Notifications が CloudFormation で設定できるようになりました
いわさです。
みなさん AWS User Notifications 使ってますか。
AWS SNS はサービス間連携に使えるサービスですが、User Notifications は通知に特化したサービスです。E メールをはじめコンソールモバイルアプリや Chatbot など様々な通知先がサポートされており、共通設定ですぐ使い始めることが出来るので最近は私はこちらをよく使っています。
新しいアカウントを作成する時に、これまで AWS CLI でセットアップの自動化をされていた方がいらっしゃるかもしれませんが先日のアップデートで CloudFormaition でもサポートされるようになりました。
これは良いなと思って設定してみたところ、意外にも設定項目が全然わからなかったりエラーが発生したりしました。
この記事ではその設定の様子やエラーが発生するパターンなどを紹介します。
バージニア北部リージョン(us-east-1)で実行する必要がある
AWS User Notifications はグローバルサービスとなっており、API エンドポイントは us-east-1 を指す必要があります。
これは AWS CLI のころからそうなってます。
% aws notifications list-notification-configurations --profile hogeadmin
An error occurred (AccessDeniedException) when calling the ListNotificationConfigurations operation: API ListNotificationConfigurationsActivity cannot be called in ap-northeast-1. Use us-east-1 instead
そのため、CloudFormation スタックの作成も us-east-1 で実行する必要があるのでご注意ください。
デフォルトで ap-northeast-1 を指定しまった時は次のようなエラーが発生しました。
% rain deploy template.yaml hoge0118notification --profile hogeadmin
error creating changeset: Template format error: Unrecognized resource types: [AWS::NotificationsContacts::EmailContact, AWS::Notifications::NotificationConfiguration, AWS::Notifications::EventRule, AWS::Notifications::ChannelAssociation]
各コンポーネントの整理
今回、CloudFormation で追加されたリソースタイプが以下です。[1]
- AWS::Notifications::ChannelAssociation
- AWS::Notifications::EventRule
- AWS::Notifications::ManagedNotificationAccountContactAssociation
- AWS::Notifications::ManagedNotificationAdditionalChannelAssociation
- AWS::Notifications::NotificationConfiguration
- AWS::Notifications::NotificationHub
結構多いのですよね。
なので、CloudFormation テンプレートを作成する前にマネジメントコンソール上でどういった設定が必要になるのか確認しておくと良いと思います。
まず、一番最初に作成するのがNotificationConfiguration
です。
マネジメントコンソールだと以下の設定全体の枠を指しています。ここにルールやら通知チャンネルを追加していく流れになります。
EventRule
とChannelAssociation
は通知設定に追加される以下のイベントルールと配信チャネル (Eメール、モバイルデバイス、チャットチャネル) を指しています。ここまでの 3 つが基本コンポーネントですね。
ManagedNotification
系の 2 つは以下のマネージド通知サブスクリプション関係です。
一部のサービスの自動通知を制御します。
NotificationHub
は通知データの処理やレプリケートされるリージョンを指定する設定です。
おそらくデフォルトでは us-east-1 のみ指定されていると思いますが、設定変更が可能です。
テンプレート例
今回は上記のうち、カスタム通知設定・ルール・チャンネル(E メール)を設定する CloudFormation を作成してみました。
ルールは CloudWatch のアラーム全般を拾うルールで、東京リージョンとバージニア北部が対象です。
ルールは JSON で記述します。内部的には EventBridge ルールです。
AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources:
Configuration1:
Type: AWS::Notifications::NotificationConfiguration
Properties:
Name: hogenotification1
Description: hogehoge
AggregationDuration: SHORT
Rule1:
Type: AWS::Notifications::EventRule
Properties:
NotificationConfigurationArn: !Ref Configuration1
Source: aws.cloudwatch
EventPattern: |
{
"detail": {
"state": {
"value": [
"ALARM"
]
}
}
}
EventType: "CloudWatch Alarm State Change"
Regions:
- ap-northeast-1
- us-east-1
Channel1:
Type: AWS::Notifications::ChannelAssociation
Properties:
Arn: !Ref Email1
NotificationConfigurationArn: !Ref Configuration1
Email1:
Type: AWS::NotificationsContacts::EmailContact
Properties:
Name: iwasa-hoge
EmailAddress: hoge@example.com
上記をデプロイすると以下のリソースが作成されます。
マネージドルールの実体は EventBridge で、指定したリージョンごとに自動展開されます。楽だなー。
なお、こちらのルールは AWS マネージドルールの扱いになるので、EventBridge 側から手動削除や編集は出来ません。
ルールの変更を行いたい場合は User Notifications から行う必要があります。
さいごに
本日は AWS User Notifications が CloudFormation で設定できるようになったので使ってみました。
CloudFormation でアカウントの初期設定を行っている環境などで採用できるのではないでしょうか。ぜひ使ってみてください。