皆様、お世話になっております。鈴木と申します。
今回はAWS CloudFormationを使用してHealthイベントをEventBridge経由でSNS通知をする仕組みを構築していきたいと思います。
1.目次
2.要件
- EventBridge経由でHealthをSNS通知をする
3.使用サービスについて
3-1.Healthについて
Amazon Health は、AWS インフラストラクチャの状態と健全性に関する情報を提供するサービスです。ユーザーの AWS 環境に影響を与える可能性のある問題やメンテナンスの通知を通じて、サービスの正常性を把握できます。
特徴 | 詳細 |
---|---|
概要 | AWS インフラストラクチャの健全性に関する情報を提供するサービス。ユーザーの AWS 環境に影響を与える可能性のある AWS 健康イベントを通知します。 |
主要機能 | – インフラストラクチャの状態に関する通知 – リージョンやアカウントの健康状態 – イベント履歴の提供 |
用途例 | – AWS インフラのメンテナンスや障害通知 – サービスの正常性に関するダッシュボードの提供 |
通知方法 | – AWS Health Dashboard – イベント通知(SNS や CloudWatch Alarms 経由) |
インテグレーション | – AWS サポートと統合 – AWS コンソールでの表示 |
3-2.EventBridgeについて
Amazon EventBridge は、AWS サービスやカスタムアプリケーション間のイベントを簡単に接続できるサービスです。イベント駆動型アーキテクチャを構築し、ルールに基づいて自動的にアクションを実行できます。
特徴 | 詳細 |
---|---|
概要 | AWS サービスとカスタムアプリケーション間のイベントを簡単に接続できるサービス。イベントを受信し、ルールに基づいてアクションを実行します。 |
主要機能 | – イベントバスを使用したイベントのルーティング – イベントに基づくアクションの実行 – 他の AWS サービスや外部サービスとの統合 |
用途例 | – イベント駆動型アーキテクチャの実装 – イベントに基づくアラートやアクションの自動化 – システム間のデータ統合 |
通知方法 | – イベントルールによるアクション – イベントバスへのイベントの送信 – ターゲット(Lambda、SQS、SNS など)へのルーティング |
インテグレーション | – AWS サービス(Lambda、SQS、SNS など)との統合 – サードパーティのイベントソースやターゲットとの連携 |
4.構成図
HealthイベントをEventBridge経由でSNS通知します。
5.ソースコード全体
YAML形式にて記述しております。
AWSTemplateFormatVersion: '2010-09-09'
Description: >-
CloudFormation template to create SNS notifications for CloudWatch Health events via EventBridge.
Resources:
NotificationTopic:
Type: "AWS::SNS::Topic"
Properties:
DisplayName: "Health Event Notifications"
Subscription:
- Protocol: email
Endpoint: !Ref SNSEmail
HealthEventRule:
Type: "AWS::Events::Rule"
Properties:
Name: "naoki-HealthEvent"
EventPattern:
source:
- "aws.health"
detail-type:
- "AWS Health Event"
detail:
eventTypeCategory:
- "issue"
Targets:
- Arn: !Ref NotificationTopic
Id: "TargetHealthEventRule"
SqsParameters:
MessageGroupId: "default"
Outputs:
NotificationTopicArn:
Description: "SNS Topic ARN for Health Event Notifications"
Value: !Ref NotificationTopic
6.ソースコード詳細
6-1.SNS
属性 | 入力内容 | 説明 |
---|---|---|
NotificationTopic | SNSトピックリソースを作成します。 | |
DisplayName | "Health Event Notifications" | トピックの表示名。 |
Subscription | – Protocol: email – Endpoint: !Ref SNSEmail |
メール通知を受け取るための設定。 メールアドレスを指定します。 |
Protocol | 通知のプロトコルとして「email」を使用します。 | |
Endpoint | !Ref SNSEmail | 通知を受け取るメールアドレスの参照。 |
6-2.Healthイベント
属性 | 入力内容 | 説明 |
---|---|---|
EventPattern | – source: ["aws.health"] – detail-type: ["AWS Health Event"] – detail: { eventTypeCategory: ["issue"] } |
イベントパターンの設定。AWS Health イベントの「issue」を対象とします。 |
source | ["aws.health"] | イベントのソースとして「aws.health」を指定します。 |
detail-type | ["AWS Health Event"] | イベントの詳細タイプとして「AWS Health Event」を指定します。 |
detail | { eventTypeCategory: ["issue"] } | イベントの詳細として「eventTypeCategory: issue」を指定します。 |
Targets | – Arn: !Ref NotificationTopic – Id: "TargetHealthEventRule" – SqsParameters: { MessageGroupId: "default" } |
イベント発生時のターゲット設定。SNSトピックへのメッセージ送信を指定します。 |
Arn | !Ref NotificationTopic | ターゲットとしてSNSトピックのARNを指定します。 |
Id | "TargetHealthEventRule" | ターゲットのID。 |
SqsParameters | MessageGroupId: "default" | SQSパラメータとして「MessageGroupId: default」を設定します。 |
7.確認
HealthイベントがないとSNS通知がされないので、構築が出来ているかを確認していきたいと思います。
EventBridgeのコンソール画面を見るとHealthイベントパターンが記載されていることを確認できます、
またターゲットとしてSNSが選択されていることも確認できました。
SNSのほうを確認しても問題なくメールアドレスが選択されていることを確認できました。
8.感想
これで一連の構築は以上となります。
IaCでの構築はAWSの理解を深める意味では効果的だと改めて感じたので、手構築とIaC両方を交えてやることを実施していきたいと感じました。