皆様こんにちは。
AWS CDKを利用してマルチAZ3層アーキテクチャ構築をしていきます。
この記事ではHealth・EventBridgeの作成を行います。
1.AWS Healthとは
AWS Healthは、AWSリソースの正常性や運用状態に関する情報を提供するサービスです。これは、AWSのインフラストラクチャとサービスに関するリアルタイムのアラートやガイダンスを提供し、ユーザーがシステムの健全性を維持し、問題の発見と解決を迅速に行うのに役立ちます。
主な機能
1. パーソナライズされたダッシュボード
- AWS Healthダッシュボードでは、ユーザーが利用しているAWSリソースに関する重要な情報やアラートが一元的に表示されます。これにより、現在の問題やその影響を簡単に確認できます。
2. リアルタイムアラート
- AWS Healthは、AWSサービスやリソースに関する問題が発生した際にリアルタイムでアラートを提供します。これには、サービスの中断やパフォーマンスの低下などが含まれます。
3. 詳細なイベント情報
- 各アラートには、問題の詳細、影響を受けるリソース、推奨される対応策などの詳細な情報が含まれます。これにより、問題の解決に必要な情報を迅速に取得できます。
4. 履歴の参照
- 過去のイベント履歴を確認できるため、以前の問題やその影響、対応策などを振り返ることができます。
5. 統合と通知
- AWS HealthはAmazon CloudWatchやAWS EventBridgeと統合されており、カスタムアラートや自動化された対応策を設定できます。また、SNSを使用してメールやSMSで通知を受け取ることもできます。
使用例
AWS Healthは、主に以下のようなシナリオで利用されます。
1. サービスの問題の迅速な発見
- AWSリソースで発生している問題をリアルタイムで把握し、迅速に対応することができます。例えば、EC2インスタンスのネットワーク接続問題やS3バケットのアクセス問題などです。
2. メンテナンス情報の通知
- 定期的なメンテナンスやアップグレードに関する通知を受け取ることで、事前に対応策を講じ、サービスの停止を最小限に抑えることができます。
3. アカウント関連の重要な通知
- AWSアカウントに関連する重要な通知(例:セキュリティ警告、設定変更、課金関連の警告など)を受け取ることができます。
詳細は公式ドキュメントを参照ください。
2.AWS EventBridgeとは
AWS EventBridgeは、様々なAWSサービスや独自のアプリケーションからのデータストリームを統合してリアルタイムでイベント駆動型のアーキテクチャを構築するためのサービスです。EventBridgeを使用すると、アプリケーション間でデータをシームレスに連携させ、迅速かつ効率的にイベントを処理することができます。
主な機能
1. イベントバス
- EventBridgeはイベントバスを使用してイベントを受け取り、ターゲットへルーティングします。イベントバスは、複数のイベントソースからのデータを統合するためのコンテナです。
2. 柔軟なルーティング
- イベントパターンを定義して、特定の条件に一致するイベントをフィルタリングし、指定されたターゲットにルーティングできます。これにより、必要なイベントのみを処理できます。
3. 多様なターゲット
- EventBridgeは、Lambda関数、SQSキュー、SNSトピック、Step Functionsステートマシン、ECSタスクなど、様々なAWSサービスをターゲットとしてサポートしています。
4. カスタムイベント
- 独自のアプリケーションからカスタムイベントを生成して、EventBridgeに送信できます。これにより、AWSサービスと独自のアプリケーションを統合することができます。
5. スキーマレジストリ
- EventBridgeはスキーマレジストリを提供しており、イベントの構造を自動的に検出し、スキーマとして登録できます。これにより、イベントの管理と使用が容易になります。
使用例
AWS EventBridgeは、主に以下のようなシナリオで利用されます。
1. リアルタイムのデータ処理
- イベント駆動型アーキテクチャを使用して、データの変化にリアルタイムで対応するシステムを構築できます。例えば、新しいデータがS3バケットにアップロードされた際に自動的に処理を開始するなどです。
2. サービス間の統合
- 異なるAWSサービスや外部のSaaSアプリケーションを統合して、シームレスなワークフローを構築できます。例えば、特定のメトリクスがCloudWatchアラームをトリガーした場合に通知を送信するなどです。
3. カスタムアプリケーションのイベント管理
- 独自のアプリケーションからのイベントをEventBridgeに送信して、AWSサービスと連携させることができます。これにより、複雑なビジネスロジックを簡単に実装できます。
詳細は公式ドキュメントを参照ください。
3.目的
- HealthイベントをキャッチするEventBridgeルールの作成
- SNSトピックをルールのターゲットとして追加し、イベントがキャッチされたときにメール通知を行う
※SNSトピックはCloudWatch・SNS構築にて作成済みのものを使用する
4.構成図
5.EventBridge構築
EventBridgeの構築のみ行います。
- EventBridgeルールの作成
- SNSトピックをルールのターゲットとして追加
5-1.EventBridgeルールの作成
"events.Rule"を使用
論理ID(テンプレート内で一意)の指定をしたのち、詳細のプロパティを指定しています。
プロパティは下記
使用するプロパティ | 設定値 | 説明 |
---|---|---|
events.EventPattern | "kitaya-evt-health" | ルールの名前を指定します。 |
event_pattern | events.EventPattern(下記参照) | イベントパターンを定義します。イベントパターンは、ルールがトリガーされる条件を指定します。 |
"events.EventPattern"
使用するプロパティ | 設定値 | 説明 |
---|---|---|
source | ["aws.health"] | イベントソースを指定します。AWS Healthサービスからのイベントを対象としています。 |
detail_type | ["AWS Health Event"] | イベントの詳細タイプを指定します。 |
ソースコード
# EventBridge ルールの作成
rule = events.Rule(self, "HealthEventRule",
rule_name="kitaya-evt-health",
event_pattern=events.EventPattern(
source=["aws.health"],
detail_type=["AWS Health Event"]
)
)
5-2.SNS トピックをターゲットに追加
".add_target"メソッドを使用して追加
ルールに対してアクションのターゲットを追加するためのメソッドです。ルールがトリガーされた際に、指定したターゲットに対してアクションが実行されます。
- ルール.add_target(指定したいターゲット)
"targets.SnsTopic"クラスでターゲットとしてSNSトピックを指定
EventBridgeのターゲットとしてSNSトピックを指定するためのクラスです。これを使用することで、指定したSNSトピックに対してイベントを送信できます。
- targets.SnsTopic(指定したいトピック)
ソースコード
# SNS トピックをターゲットに追加
rule.add_target(targets.SnsTopic(sns_topic))
6.検証
マネジメントコンソールでイベントの作成、ターゲットの指定が正しいことを確認します。
6-1.イベントの作成
6-2.ターゲットの指定
7.感想
今回でCDKでの構築作業は以上となります。
CDKでは抽象的な構築と具体的に定義し構築することの両方ができる柔軟さが強みだと実感しました。
初めてのコーディングということもあり、強みをうまく活かすことはできませんでした。
ただ、構築を進めるごとにコーディング自体には少しづつ慣れることができました。
今後、CDKを使用する際には今回の学習を活かし、柔軟な構築を意識して取り組みたいと感じました。