【応用編】AWS User Notificationsでイベントパターン設定

2023年5月に公開されたAWS User Notificationsは事前に設定されたイベントパターンに応じて、マネジメントコンソールやメールで通知を行ってくれる機能です。

基本編の解説記事はこちらです。

AWS
AWS User Notificationsを使ってみた
【新サービス】AWS User Notificationsを使ってみた

通知設定は事前に定義されたものを利用して簡単に利用することもができますが、JSON形式で複雑なパターンをフィルタして設定することもできます。

今回はこのJSON形式でのイベントパターン設定をご紹介いたします。

【おさらい】AWS AWS User Notificationsとは

  • マネジメントコンソールでAWSからの通知を一元管理できる
  • 「通知」にはAmazon CloudWatch アラームだけでなく、AWS サポートケースの更新なども含む
  • 「通知」に対しイベントルールを設定することで、メールなどでも受け取れる

イベントパターンの設定方法

AWSから送信される各種イベントに対して、イベントパターンを設定することにより特定のイベントのみ通知させることができます。

EventBridgeで使うイベントパターンと同じです。(というかAWS User NotificationsからEventBridgeの設定を作っている)

AWS User Notificationsでのイベントパターン設定画面はこちら。

AWS User Notificationsイベントパターンの設定方法

「高度なフィルター」部分をクリックすると、イベントパターンによるフィルタリングができます。

AWSの説明ページも参照ください。

CloudWatch alarmのalarmNameが存在している

公式の解説ページに記載されているイベントパターンです。

CloudWatchのアラーム名が存在しているイベントが発生した場合に通知を行います。

必須入力だから全部通知される気がするけど、、

{
  "detail": {
    "alarmName": [ { "exists": true } ]
  }
}

EC2インスタンスが特定の状態に遷移

EC2インスタンスの状態が遷移した場合に通知を行います。

わざわざJSONで作らずとも設定値で設定できる内容でもあります。

{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["terminated", "shutting-down", "stopping", "stopped"]
  }
}

複雑なイベントパターンを作成するには

JSON形式で複雑なイベントパターンを作成しようとすると結構手間もかかります。

公式サイトではEventBridgeコンソールからルールを作ることを推奨しています。ここでEventBridgeでのイベントパターンを作成するときのようにテストを行いつつ、AWS User Notifications に設定していきましょう。

特定のサブネットにおいてAuto Scalingが発動した場合

Auto Scalingの設定でもインスタンス起動時の通知設定ができますが、設定が漏れていた場合や一括で管理したい場合などに使える、かな?

イベントルールの設定はこちら。

AWS User Notificationsイでauto scalingの通知設定

イベントパターンの設定はこちらです。

サブネットIDを指定することにより、例えばパブリックサブネットの通知は無視してプライベートサブネットの通知のみを受け取ることができます。

{
  "detail": {
   "Details":{  
      "Subnet ID": ["subnet-0123456789"]
   } 
  }
}

証明書の有効期限切れが近づいている

ACMにおいて証明書の有効期限が45日を切るとイベントが発報されるようになります。

Event Bridgeでイベントをトリガーにすることができるので、同じようにAWS User Notificationsでも通知ができます。

AWS User NotificationsイでACMの通知設定

イベントパターンの設定はこちら。

この設定では有効期限が40日より短くなったら通知するようにフィルタしています。

{
  "detail": {
    "DaysToExpiry": [{ "numeric": [ "<", 40 ] }]
  }
}

コメントを残す