[アップデート] AWS User Notifications が CloudFormation で設定できるようになりました

[アップデート] AWS User Notifications が CloudFormation で設定できるようになりました

Clock Icon2025.01.18

いわさです。

みなさん AWS User Notifications 使ってますか。
AWS SNS はサービス間連携に使えるサービスですが、User Notifications は通知に特化したサービスです。E メールをはじめコンソールモバイルアプリや Chatbot など様々な通知先がサポートされており、共通設定ですぐ使い始めることが出来るので最近は私はこちらをよく使っています。

新しいアカウントを作成する時に、これまで AWS CLI でセットアップの自動化をされていた方がいらっしゃるかもしれませんが先日のアップデートで CloudFormaition でもサポートされるようになりました。

https://aws.amazon.com/about-aws/whats-new/2025/01/aws-user-notifications-ga-cloudformation/

これは良いなと思って設定してみたところ、意外にも設定項目が全然わからなかったりエラーが発生したりしました。
この記事ではその設定の様子やエラーが発生するパターンなどを紹介します。

バージニア北部リージョン(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です。
マネジメントコンソールだと以下の設定全体の枠を指しています。ここにルールやら通知チャンネルを追加していく流れになります。

DA445440-27BD-4736-BDD6-C7C2BE80CF94.png

EventRuleChannelAssociationは通知設定に追加される以下のイベントルールと配信チャネル (Eメール、モバイルデバイス、チャットチャネル) を指しています。ここまでの 3 つが基本コンポーネントですね。

C53A4C0F-74B6-4704-8B6C-6F1C7B7542DE.png

ManagedNotification系の 2 つは以下のマネージド通知サブスクリプション関係です。
一部のサービスの自動通知を制御します。

93F5E3D1-C439-425D-BC42-47E2948893C7.png

NotificationHubは通知データの処理やレプリケートされるリージョンを指定する設定です。
おそらくデフォルトでは us-east-1 のみ指定されていると思いますが、設定変更が可能です。

7A8E3501-9C99-45AE-AF01-39A99CCBE448.png

テンプレート例

今回は上記のうち、カスタム通知設定・ルール・チャンネル(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

上記をデプロイすると以下のリソースが作成されます。

AD24FE4A-F1C2-4107-88A3-245668A2AECD.png

マネージドルールの実体は EventBridge で、指定したリージョンごとに自動展開されます。楽だなー。

DF7CE1A5-B417-4F72-96B7-FDC4A576D6A4.png

なお、こちらのルールは AWS マネージドルールの扱いになるので、EventBridge 側から手動削除や編集は出来ません。
ルールの変更を行いたい場合は User Notifications から行う必要があります。

F32F7B38-FE28-4693-B7C8-AF72436FD752.png

さいごに

本日は AWS User Notifications が CloudFormation で設定できるようになったので使ってみました。

CloudFormation でアカウントの初期設定を行っている環境などで採用できるのではないでしょうか。ぜひ使ってみてください。

脚注
  1. Notifications resource type reference - AWS CloudFormation ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.