[アップデート] イベント集約が簡単に!Amazon EventBridge でリージョン間のイベント転送が可能になりました!

イベントルールの入力トランスフォーマーなど、メッセージをカスタマイズする箇所を集約できるので、めっちゃ良いアップデート。
2021.04.16

本日のアップデートで、Amazon EventBridge のイベントバスがクロスリージョンのイベント転送をサポートするようになりました!

Amazon EventBridge イベントバス

従来より Amazon EventBridge を使用して AWS アカウント間でのイベント転送はサポートされていましたが、公式ガイドに記載のとおりリージョン間転送はサポートされておらず、各リージョン毎にイベントバスの受信設定をする必要がありました。

受信側アカウントがデフォルトのイベントバスにアクセス権限を追加する AWS リージョンは、送信側アカウントが受信側アカウントにイベントを送信するためのルールを作成するリージョンと同じである必要があります。

結局、各リージョンごとでイベントバスを設定する必要があり、「設定箇所をコンパクトにまとめたい」という期待に応えるにはあと一歩足りないという印象でした。また、リージョン間での利用はできないという点で、同一アカウント内でのイベント集約に利用することはできませんでした。

同一アカウント内で利用可能に

今回、リージョン間のイベント転送がサポートされたことで、同一アカウント内におけるイベント集約においても Amazon EventBridge のイベントバスが利用可能になります。

(引用元:Introducing cross-Region event routing with Amazon EventBridge

ただし、受信側のイベントバスとして利用できるのは以下の 3 リージョンのみである点はご注意ください。

  • バージニア
  • オレゴン
  • アイルランド

また、送信元として利用できるのは以下のリージョンです。

  • バージニア
  • オレゴン
  • カリフォルニア
  • バーレーン
  • アイルランド
  • ストックホルム
  • パリ
  • 東京
  • シンガポール
  • シドニー

大阪は未だのようです。。いずれすべてのリージョンから送信可能になりますよね、、?(期待)

料金

Customers invoking a cross region event bus target will be billed as per the custom events pricing above. Customers may incur additional data transfer charges between regions for cross region invocations. You will be billed at standard AWS Data Transfer Charges.

クロスリージョンのイベントはカスタムイベントの価格に応じて課金されるようですので、$1.00/100万カスタムイベントあたり になります。加えて標準的な AWS データ転送料が発生しますので、転送するイベント数、データ量に応じて転送対象のフィルタリングを検討するのが良いかと思います。

詳細は料金ページをご確認ください。

やってみる

前提環境は以下のとおりです。

  • 同一アカウント内でのリージョン間転送を想定
  • 東京リージョンからバージニアリージョンへ転送するイベントルールを作成
  • バージニアリージョンで SNS トピックへ転送するイベントルールを作成
  • バージニアリージョンに SNS トピックを作成済み
  • イベントバスはデフォルトを利用

アカウント間でのリージョン間イベント転送設定については、公式ブログに記載されていますので参照ください。

バージニアリージョンのイベントバス確認

Amazon EventBredge の管理コンソールより [イベント]-[イベントバス] を開き、default の内容を確認します。クロスアカウントでイベントを受信したい場合は [アクセス許可] に送信元となる AWS アカウント 等を指定することになります。

今回は同一アカウント内でのリージョン間転送ですので、以下のとおり [アクセス許可] 設定等は行っていません。

イベントバスの ARN は後ほどイベントルールを作成時に指定する必要がありますので、控えておきます。

東京リージョンのイベントルール作成

リージョンを 東京 に切り替え、[イベント]-[イベントルール] から [ルールを作成] をクリックします。任意の名前、パターン定義を指定します。ひとまず EC2 に関連するイベントを送るように設定してみました。

次にターゲットを選択します。別のアカウントまたはリージョンのイベントバス を選択し、イベントバス に送信先となるリージョンのイベントバスの ARN を指定します。今回 IAM ロールは新規作成するように指定し、[作成] をクリックします。

ちなみに自動作成される IAM ロールの権限は以下のとおりターゲットへの PutEvents を許可しただけのものです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "events:PutEvents"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:XXXXXXXXXXXX:event-bus/default"
            ]
        }
    ]
}

バージニアリージョンのイベントルール作成

リージョンを バージニア北部 に切り替え、[イベント]-[イベントルール] から [ルールを作成] をクリックします。任意の名前、パターン定義を指定します。

東京リージョンから EC2 に関するイベントがすべて転送されてきますので、受信側のイベントルールではもう少し絞り込んで、ステータスが running になったものだけを通知するように設定してみました。

ターゲットは事前に作成しておいたメール通知するための SNS トピックを指定し、[作成] をクリックします。

動作テスト

動作テストとして東京リージョンで EC2 を起動、停止してみました。結果は以下のとおり東京リージョンの running イベントが受信できました。

{
  version:0
  id:29b6dfbf-b78b-a392-28f5-5bdf73019adf
  detail-type:EC2 Instance State-change Notification
  source:aws.ec2
  account:XXXXXXXXXXXX
  time:2021-04-16T00:04:48Z
  region:ap-northeast-1
  resources:[
    0:arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:instance/i-013df6c16f520e2c4
  ]
  detail:{
    instance-id:i-013df6c16f520e2c4
    state:running
  }
}

--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.us-east-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:us-east-1:XXXXXXXXXXXX:cm-test:ff9d6ce5-f3bc-4463-8149-fc11cfbad5de&Endpoint=marumo@classmethod.jp

東京リージョンのイベントをバージニアリージョンのイベントバスが受けて SNS 通知できることが確認できましたね!検証は以上です。

まとめ

  • Amazon EventBridge のイベントバスを利用してリージョン間でのイベント転送が可能になりました
  • 従来は AWS アカウント間でイベントを転送する仕組みでしたが、リージョン間での転送がサポートされたことで同一アカウント内でのイベント集約にも使えます
  • 受信設定できるイベントバスはバージニア、オレゴン、アイルランドの 3 リージョンのみ
  • イベントルールの入力トランスフォーマー設定などが 1 箇所に集約できるので、変更などの運用が楽になりそうです
  • リージョン間のデータ転送料は発生するので、イベント件数、サイズには要注意

以上!大阪オフィスの丸毛(@marumo1981)でした!