Udemyセール開催中(9/19まで)人気教材が1,500円~

AWS クロスリージョンでのイベント通知

クロスリージョンアイキャッチ

マルチリージョンでAWSを利用しており、各リージョンのイベントを1つのリージョンでハンドリングしたい場合があります。
私の場合は使用している各リージョンのHealthイベントを他システムにまとめて連携したいユースケースがありました。
通常のEventBridgeではクロスリージョンのイベント通知は対応しておらず、各リージョンごとにSNSなどで通知設定をする必要がありましたが、クロスリージョンに対応しているリージョンを利用すると通知を一本化できるので備忘もかねて記事にします。

目次

クロスリージョンイベント通知で実現できること

クロスリージョン対応リージョンに置いたEventBridgeが各リージョンのイベントを検知することができます。リージョンを集約することでほかのAWSサービスや外部システムへの連携についても1か所に集約できて保守性が向上します。

リージョンを集約しない場合、各リージョンにSNSを配置して通知の設定をする必要があります。

2023年1月時点では東京リージョンはクロスリージョン対応ではないので外国のリージョンにEventBridgeを作成する必要があります。
下の図に登場するEventBridgeruleはイベントの収集と通知を行い、EventBusは通知のパイプラインの役割をします。

クロスリージョンイベントアーキテクチャ図
図1 クロスリージョンイベントで実現できること

クロスリージョンイベント通知に対応しているリージョン

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経由でメールを出す構成で説明していきます。

東京リージョンのイベントブリッジからバージニアリージョンのイベントバスに通知するアーキテクチャ図
図2 動作確認での構成

それぞれのアイコンごとに設定方法を順に説明していきます。

①通知先のEventBusの設定

東京リージョンのイベントブリッジからバージニアリージョンのイベントバスに通知するアーキテクチャ図(イベントバス)
通知先のEventBusの設定

バージニアリージョンのEventBridgeコンソールを開き、イベントバスを押下します。そしてイベントバスを作成します。

イベントバスの作成画面
イベントバスの作成(バージニアリージョン)

名前は自由につけていただいてOKです。
ここではEC2-exampleとしています。

イベントバスの作成詳細入力画面
イベントバスの作成

バージニアリージョンのイベントバスの作成は以上です。

②通知先のSNSの設定

東京リージョンのイベントブリッジからバージニアリージョンのイベントバスに通知するアーキテクチャ図(SNS)
通知先のSNSの設定

通知を受け取るためにSNSの設定を実施します。トピックを作成して自分のメールアドレスでサブスクライブしておきます。FIFOである必要はないのでスタンダードトピックを作成します。名前は自由に指定して他はデフォルトで作成します。
ここではEC2EventTopicとしています。

SNSトピック作成画面
バージニアリージョンでSNSTopic作成

トピックのサブスクライブはトピック作成後に実施します。

トピックのサブスクライブ画面
サブスクリプションの作成

自分のメールアドレスを登録しておきます。登録後、メールアドレス宛に確認メールが来るのでリンクをクリックしてサブスクリプションを許可しておきます。

サブスクリプション作成画面
メールでサブスクリプションを登録

③通知先のEventBridgeRuleの設定

東京リージョンのイベントブリッジからバージニアリージョンのイベントバスに通知するアーキテクチャ図(バージニアリージョンEventBridge)
通知先のEventBusの設定

バージニアリージョンのEventBridgeコンソールよりルールの作成を選択します。
名前を自由に設定して、イベントバスは通知先のEventBusの設定で作成したイベントバスを選択します。
ここでは名前:EC2StartStop EventBus:EC2-exampleとしています。

EventBridgeルール作成画面
イベントルールの作成(バージニアリージョン)

イベントソースはAWSでイベントパターンを記述します。今回はEC2の状態変化を検知したいので下記の通り選択します。

状態変化のうち、起動停止に絞るのは通知元[東京リージョンのEventBridgerule]で設定するのでここではすべての状態変化を通知しています。

  • AWSのサービス
  • EC2
  • EC2 Instance State-change Notification
イベント画面構築画面
ルールの作成(バージニアリージョン)

入力したら「次へ」を押下します。
続いてターゲットを選択に進みます。下記の通り選択して次へを押下します。

ターゲットの作成画面でSNSを指定する
ルールの設定(ターゲット)

あとはデフォルトでOKです。作成するとルール画面で確認できます。

表示するときイベントバスがdefaultになっていると作成したものが出てこないので、作成したイベントバスを選択してください。(ここではEC2-example)

作成したルールが表示される画面
作成したイベントルールの確認

④通知元のEventBridgeRuleの設定

東京リージョンのイベントブリッジからバージニアリージョンのイベントバスに通知するアーキテクチャ図(東京リージョンEventBridge)
通知元のEventBridgeRuleの設定

続いて東京リージョン(EC2があるリージョン)のEventBridgeルールの設定を行います。EventBridge→ルール→ルールの作成を選択します。
名前を自由に入力して次へを選択します。ここではEC2StartStopとしています。イベントバスはdefaultのままでOKです。

EventBridgeルールの作成画面
東京リージョンでのEventBridgeルールの作成

次へを押下すると、イベントパターンを構築に遷移します。イベントパターン以外はそのままです。イベントパターンは下記のように入力します。

  • 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テーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次