AWS EventBridgeとSNSの連携

# はじめに
SOAの資格試験対策のために学んだことを記録として残します。
SOAの試験は、C02に改訂されてからマネジメントコンソールで回答する問題も追加され、ハンズオンで学習することが今まで以上に重要となりました。
この記事では、実際にEventBridgeを動かして使い方を説明します。
# EventBridgeとは？
状態の変化（イベント）に対し、あらかじめ設定したルールに基づいて、ターゲット（他のAWSサービスなど）に対して何らかのアクションを実行させるサービスです。
イベントは、AWS Config、CloudWatch、CloudTrailなどによって検知されます。
今回はEC2インスタンスの状態変化を検知して、SNSを起動し、メール通知を行うという仕組みを構築します。
![EventBridge-SNS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/c5a0b30d-48a2-4d85-e7b4-b68bce53afc1.png)
# 手順
1. EC2インスタンスの作成
2. SNSトピック／サブスクリプションの作成
3. EventBridgeの作成
4. 実行

## 1. EC2インスタンスの作成
テスト用に適当なインスタンスを作成しておきます。
インスタンスは停止したり、終了したりするために作成するだけなのでデフォルト設定でOKです。
- OS：Amazon Linux 2
- インスタンスタイプ：t2.micro、
- キーペア：なし

## 2. SNSトピック／サブスクリプションの作成
ここでは、Eメールでの通知設定を行います。
まずはSNSトピックを作成します。SNSのコンソール画面から「トピック」を選択して、「トピックの作成」を行います。
トピック名は任意の名前を入力しておきます。
![01-create-topic-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/407c704d-afac-2370-5745-2c8228fc3b3c.png)

トピックの名前だけ入力し、あとはデフォルト設定のままにします。
![01-create-topic-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/f2f19a9d-dd22-a85b-1983-be2b8a191384.png)

トピック作成後、「サブスクリプション」を選択し、「サブスクリプションの作成」を行います。
![02-create-subscription-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/0c6b1e88-4333-7246-5b7b-fc8730c45dc1.png)
![02-create-subscription-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/4a50f3a4-29c9-ad66-5784-c61e559a837d.png)

サブスクリプションの設定画面で次のように設定します。それ以外は特に設定しません。
- トピックARN：先ほど作成したトピックを選択
- プロトコル：Eメール
- エンドポイント：送信先のメールアドレス
サブスクリプション作成後、指定したアドレスに確認メールが届くので、Confirm Subscriptionを押して認証します。
![03-validate-address-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/108acaf9-04c6-471f-50fd-03b868b5ca59.png)

認証すると、Subscription confirmedというメッセージが表示されます。
![03-validate-address-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/4ee9f97d-9ecf-3849-1004-e94bcab24526.png)
設定内容を確認しておきます。
![04-check-sns-settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/cdc36e64-f871-e0cc-3085-0cb0d652ac14.png)

## 3. EventBridgeの作成
マネジメントコンソールからEventBridgeの画面に移動し、「ルール」の選択→「ルールの作成」をクリックします。
ルールの設定画面で任意のルール名を設定します。
![05-eventbridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/3c6e74f0-bbe5-c229-488a-90ec72b5cfdf.png)
![06-create-rule-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/1d403199-ac64-18bc-a7bf-27e61ee359d8.png)

イベントバスはデフォルト、ルールタイプは「イベントパターンを持つルールタイプ」を選択します。
イベントパターンの設定画面で以下のように設定します。

- イベントソース：AWSのサービス
- AWSのサービス：EC2
- イベントタイプ：EC2 Instance State-change Notification
    - 任意の状態
    - 任意のインスタンス
![06-create-rule-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/672b5604-11a7-513d-6a3a-6e7abf850e56.png)

続いて、ターゲットの設定画面でターゲットタイプを「AWSのサービス」を選択します。
ターゲットに「SNSトピック」を選択し、トピックは上で作成したSNSトピックを選びます。
![06-create-rule-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/92ce184b-c0cc-78cf-7584-b46795678479.png)

後の設定は全てデフォルトのままでOKです。
上記の設定をしたら、「ルールの作成」をクリックして作成します。

## 4. 実行
EventBridgeがEC2インスタンスの状態変化を検知できているか確認してみます。
EC2インスタンスの一覧画面から作成したインスタンスを選択し、インスタンスを停止（終了でも可）します。
すると、インスタンスの状態が「stopped」に変更されます。
インスタンスが停止されたら、SNSでエンドポイントに指定したアドレスを確認してください。
以下のように、インスタンスの状態が停止になったことを通知するメールが届いていれば成功となります。
![07-check-change-state-notification.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1000359/b1dd9635-4588-b6d7-37ee-980c880c4d2c.png)

試したあとは、インスタンスやSNSトピック、EventBridgeのルールを削除しておきましょう。
# まとめ
EventBridgeを利用することで、あるイベントの発生をトリガーとして、さまざまなAWSサービスを起動させることができます。
今回の例ではSNSからのメール通知を行いましたが、例えばEC2インスタンスの状態がterminatedになったら、Lambdaを起動してインスタンスを再起動するという仕組みを構築することもできます。
このように、EventBridgeを利用することで運用にまつわる作業を自動化することができます。