マルチリージョンでAWSを利用しており、各リージョンのイベントを1つのリージョンでハンドリングしたい場合があります。
私の場合は使用している各リージョンのHealthイベントを他システムにまとめて連携したいユースケースがありました。
通常のEventBridgeではクロスリージョンのイベント通知は対応しておらず、各リージョンごとにSNSなどで通知設定をする必要がありましたが、クロスリージョンに対応しているリージョンを利用すると通知を一本化できるので備忘もかねて記事にします。
クロスリージョンイベント通知で実現できること
クロスリージョン対応リージョンに置いたEventBridgeが各リージョンのイベントを検知することができます。リージョンを集約することでほかのAWSサービスや外部システムへの連携についても1か所に集約できて保守性が向上します。
リージョンを集約しない場合、各リージョンにSNSを配置して通知の設定をする必要があります。
2023年1月時点では東京リージョンはクロスリージョン対応ではないので外国のリージョンにEventBridgeを作成する必要があります。
下の図に登場するEventBridgeruleはイベントの収集と通知を行い、EventBusは通知のパイプラインの役割をします。
クロスリージョンイベント通知に対応しているリージョン
Introducing cross-Region event routing with Amazon EventBridge
Using Amazon EventBridge, you can now route events from any commercial AWS Region to other supported Regions. The initial list of supported destination Regions is: US East (N. Virginia – us-east-1), US West (Oregon – us-west-2), and Europe (Ireland – eu-west-1).
Introducing cross-Region event routing with Amazon EventBridge
英語の記事ですが、バージニアリージョン、オレゴンリージョン、アイルランドリージョンが対象となっています。
図の右側(通知を受ける側)のリージョンの縛りです。左側(通知を出す方)はどこのリージョンでもよいようです。
クロスリージョンイベント通知の設定方法(動作確認)
動作確認では東京リージョンでのEC2起動停止イベントをバージニアリージョンで検知してSNS経由でメールを出す構成で説明していきます。
それぞれのアイコンごとに設定方法を順に説明していきます。
①通知先のEventBusの設定
バージニアリージョンのEventBridgeコンソールを開き、イベントバスを押下します。そしてイベントバスを作成します。
名前は自由につけていただいてOKです。
ここではEC2-exampleとしています。
バージニアリージョンのイベントバスの作成は以上です。
②通知先のSNSの設定
通知を受け取るためにSNSの設定を実施します。トピックを作成して自分のメールアドレスでサブスクライブしておきます。FIFOである必要はないのでスタンダードトピックを作成します。名前は自由に指定して他はデフォルトで作成します。
ここではEC2EventTopicとしています。
トピックのサブスクライブはトピック作成後に実施します。
自分のメールアドレスを登録しておきます。登録後、メールアドレス宛に確認メールが来るのでリンクをクリックしてサブスクリプションを許可しておきます。
③通知先のEventBridgeRuleの設定
バージニアリージョンのEventBridgeコンソールよりルールの作成を選択します。
名前を自由に設定して、イベントバスは通知先のEventBusの設定で作成したイベントバスを選択します。
ここでは名前:EC2StartStop EventBus:EC2-exampleとしています。
イベントソースはAWSでイベントパターンを記述します。今回はEC2の状態変化を検知したいので下記の通り選択します。
状態変化のうち、起動停止に絞るのは通知元[東京リージョンのEventBridgerule]で設定するのでここではすべての状態変化を通知しています。
- AWSのサービス
- EC2
- EC2 Instance State-change Notification
入力したら「次へ」を押下します。
続いてターゲットを選択に進みます。下記の通り選択して次へを押下します。
- AWSのサービス
- SNSトピック
- 通知先のSNSの設定で作成したSNSTopic(ここではEC2EventTopic)
あとはデフォルトでOKです。作成するとルール画面で確認できます。
表示するときイベントバスがdefaultになっていると作成したものが出てこないので、作成したイベントバスを選択してください。(ここではEC2-example)
④通知元のEventBridgeRuleの設定
続いて東京リージョン(EC2があるリージョン)のEventBridgeルールの設定を行います。EventBridge→ルール→ルールの作成を選択します。
名前を自由に入力して次へを選択します。ここではEC2StartStopとしています。イベントバスはdefaultのままでOKです。
次へを押下すると、イベントパターンを構築に遷移します。イベントパターン以外はそのままです。イベントパターンは下記のように入力します。
- AWSのサービス
- EC2
- EC2 Instance State-change Notification
- 特定の状態
- runnning, stoppedを選択
入力したら次へを押下します。
続いてターゲットを選択画面に遷移します。
- ターゲットタイプ:EventBridgeイベントバス
- ターゲットタイプ:別のアカウントまたはリージョンのイベントバス
- ターゲットとしてのイベントバス:①通知先のEventBusの設定で作成したバージニアリージョンのイベントバスのarn
これで東京リージョンで収集したEC2のイベントをバージニアリージョンのイベントバスに渡す設定ができます。
あとはデフォルトの設定で作成します。設定は以上です。
動作確認
東京リージョンのEC2を起動停止する
マネジメントコンソールで東京リージョンのEC2の起動、停止を行います。
メールが届く
メールでJSONが送信されてきます。(見やすくするために改行しています。)
・EC2起動の場合
{"version":"0",
"id":"df3d4921-b140-27ac-e6cf-7358b96053e8",
"detail-type":"EC2 Instance State-change Notification",
"source":"aws.ec2",
"account":"123456789012",
"time":"2022-12-30T15:23:18Z",
"region":"ap-northeast-1",
"resources":["arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0c141b98d58e250e5"],
"detail":{"instance-id":"i-0c141b98d58e250e5","state":"running"}}
・EC2停止の場合
{"version":"0",
"id":"ef4130d6-04b7-659d-5529-2f5c908a390e",
"detail-type":"EC2 Instance State-change Notification",
"source":"aws.ec2",
"account":"123456789012",
"time":"2022-12-30T15:25:41Z",
"region":"ap-northeast-1",
"resources":["arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0c141b98d58e250e5"],
"detail":{"instance-id":"i-0c141b98d58e250e5","state":"stopped"}}
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当