LoginSignup
0
0

More than 3 years have passed since last update.

【AWS】CloudWatch Event Bus(イベントバス) 機能でクロスアカウント間イベント転送

Last updated at Posted at 2021-03-22

はじめに

業務上に、異なるAWSアカウント間でのアラーム統一管理ニーズがありました。
調べたところ、CloudWatchのEvent Bus機能が使えそうなので、それを使ってクロスアカウント間でCloudWatchイベント転送を実現してみました。

構成図

今回の構成図は下記となります。
CloudWatch Event Bus構成図.png
今回はアカウントAのEC2が停止したら、CloudWatchのEvent Bus機能を経由し、アカウントBのSNSでメールを送信させるという仕組みになります。
なお、今回はアカウントAでEC2をCloudWatchのターゲットにしていましたが、それとほかに、Lambda、API Gatewayのサービスも使えます。いろいろと用途が幅広く、AWSクロスアカウント間でCloudWatchを経由して何かの機能を実現したときに、ぜひご参考ください。

1.アカウントBで、アカウントAとのイベントバス追加

アカウントBのAWSマネジメントコンソール画面に、「CloudWatch」を入力し、クリックします。
image.png


左側メニューに「イベントバス」をクリックし、次に「アクセス許可の追加」をクリックします。
1111.png


アカウントID欄に、アカウントAのIDを入力し、「追加」をクリックします。
1112.png

2.アカウントBでSNSトピックを作成

アカウントBのAWSコンソール画面からSNSを検索し、下記のようにSNS機能画面にアクセスします。
左側メニューから「トピック」をクリックし、「トピックの作成」をクリックします。
1112.png


名前欄に命名規則に従って名称を入力し、ほかの設定はそのままデフォルトにして作成します。今回はテストのため、テスト名を入れました。
1112.png


上記作成したトピックに入り、「サブスクリプションの作成」をクリックします。
1112.png


トピックARNを上記作成したトピックのARNを選びます。
プロトコル欄に「Eメール」をクリックします。
エンドポイントに受信したいメールアドレスを入力します。
1112.png


これでサブスクリプションが作成しました。
1112.png


上記ご入力したメールに、AWSからのメッセージが届きます。
「Confirm subscription」をクリックします。
1112.png


下記のように「Subscription confirmed!」というメッセージが表示されれば成功です。
1112.png

3.アカウントAでCloudWatchのルール作成

アカウントAでCloudWatch画面に入り、左側メニュー「ルール」をクリックし、「ルールの作成」をクリックします。
1112.png


「イベントパターン」をクリックします。
サービス名に「EC2」を選択します。
イベントタイプに「EC2 Instance State-change Notification」を選択します。
→「特定の状態」をクリックし、「Stopped」を選択します。
→「特定のインスタンスID」をクリックし、通知したいインスタンスのIDを入力します。
ターゲットに「別のAWSアカウントのイベントバス」を選択し、アカウントBのIDを入力します。
下記「この特定のリソースに対して新しいロールを作成する」をクリックします。
1112.png


次に「設定の詳細」をクリックし、名称を入れます。(※ここで省きます)
下記のように、ルールの作成が完了しました。
1112.png

4.アカウントBでCloudWatchのルール作成

アカウントBでCloudWatch画面に入り、左側メニュー「ルール」をクリックし、「ルールの作成」をクリックします。
1112.png


イベントパターンをクリックし、下記のJSONコードを入力します。

{
  "source": [
    "aws.ec2"
  ],
  "account": [
    "アカウントAのID"
  ],
  "detail-type": [
    "EC2 Instance State-change Notification"
  ],
  "detail": {
    "state": [
      "stopped"
    ]
  }
}

ターゲット欄に「SNSトピック」を選択します。
トピックは上記手順2で作成したトピックをお選びください。
[Input Path] に以下を入力します。

{"instance-id":"$.detail.instance-id", "state":"$.detail.state", "time":"$.time", "region":"$.region", "account":"$.account"}

[Input Template] に以下を入力します。

"At <time>, the status of your EC2 instance <instance-id> on account <account> in the AWS Region <region> has changed to <state>."

※カスタマイズした内容を入力することもできます。
「詳細の設定」をクリックします。
1112.png


名前欄に命名規則に従って名称を入れます。
「ルールの作成」をクリックします。
1112.png


5.テスト

上記3で指定したインスタンスを停止してみます。
該当インスタンスを右クリックし、「インスタンスの状態」→「停止」をクリックします。
1112.png


下記のように、インスタンス停止のお知らせがメールに届いております。
これでクロスアカウント間CloudWatchによるEC2ステータス変化メール通知機能が実現できました。
1112.png

最後

CloudWatchのEvent Bus機能はいろいろとクロスアカウント間で幅広く使えるので、今回はEC2停止だけを試しました。AWSクロスアカウント間でCloudWatchを経由して何かの機能を実現したときに、ぜひご参考ください。

参考資料

1.https://dev.classmethod.jp/articles/cloudwatch-events-event-bus/
2.https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html
3.https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0