
CloudWatch EventsからEventBridgeへの変更でできるようになった事と、実行例
はじめに

AWSの環境の構築、運用監視を行っている方は、CloudWatch Eventsはもちろんご存知だとおもいます。かくいう筆者もCloudWatch Eventsにはとてもお世話になっており、監視を行う上でかかせない存在となっておりました。
そこで押さえておきたいのが、CloudWatch EventsからAmazon EventBridgeへの拡張です。
CloudWatch EventsがAmazon EventBridgeに変わりますよーというインフォメーションが、かねてよりCloudWatch Eventsの画面の上でチラチラしているのは知っていました。しかし久しぶりに設定を追加しようとCloudWatch Eventsの画面を開いたところ「 CloudWatch Events はEventBridge となりました」の文字が。。。

もちろん今まで通り、CloudWatch Eventsを引き続き使用することは可能です。ただAWS的にはEventBridgeを推奨している模様…そろそろきちんと確認しておかなければ!
ということで勉強がてら解説記事としてご紹介いたします。
Amazon EventBridgeとは?

まず、Amazon EventBridgeの特徴についてお伝えします。
EventBridgeとはAWSのサービスやZendesk、DatadogなどのSaaSアプリケーション、独自で作成したアプリケーションなどのイベントを使用してイベント駆動型アプリケーションを構築することを容易にするサービスです。AWS内外を問わず、ひとまとめにイベントを送受信できるため、利便性に優れます。導入に際し、AWSに最適化するべく既存のシステムを大幅に改修するようなコストや手間がかからず、速やかな導入と互換性の確保が可能です。

※図 https://aws.amazon.com/jp/eventbridge/ より引用
イベント駆動型アプリケーションは、従来の要求駆動型モデルと違い、サービスを疎結合化(それぞれのサービスがイベントルーターのみを認識)して運用します。例え1つのサービスで障害が発生した場合でも、その影響を最小限に抑え、残りのサービスを稼働し続けることができます。
このような強みを活かすことで、スケーリングやエラーを個別に対処することを可能にしたり、開発スピードそのものを加速させることが可能になったりするのが特徴です。Amazon EventBridgeについてのさらなる詳細は、以下の公式サイトをご確認ください。
参考サイト
https://aws.amazon.com/jp/eventbridge/
https://aws.amazon.com/jp/event-driven-architecture/
Amazon EventBridgeの構成

Amazon EventBridgeは、
- イベントパス
- イベントソース
- ルール
- ターゲット
の4つの要素で構成されています。
イベントパスは、イベントを受信するためのルーターの役割を果たす要素です。複数のイベントバスを使い分けることで、ルーティングを実現します。
イベントソースとは、イベントを送信するサービス・アプリケーションを指すものです。AWSのアプリ、SaaS、カスタムアプリと、複数の種類をイベントソースとして扱えます。
ルールは、一定の感覚で実施されるイベントパターンや、指定したタイミングで実行されるスケジュールに則って行う機能です。ランダム性を排除し、規則的にイベント送信などを行う際に使用します。
ターゲットとは、イベントの送信先です。Amazon EventBridgeでは指定したリソースやエンドポイントに対し、イベントを送信します。
Amazon EventBridgeでできるようになったこと

続いて、一番気になるEventBridgeでできるようになったことは何でしょうか。
サードパーティ製品との連携が可能になった
従来はAWS内のイベントや、cron機能のイベントだけが利用可能でしたしかしAmazon EventBridgeに移行したことで、AWSのサービスだけではなくSaaSアプリケーションや独自に作成したアプリケーション間のイベントを、ルーティングすることができます。
連携可能な製品の数も多く、システム監視でお馴染みのDatadogやNewRelicなども連携の上、さらに相互運用が行いやすくなりました。これまで別個にサードパーティ製品を運用していたという方にとって、強力な業務効率化が期待できるでしょう。

※図 https://aws.amazon.com/jp/blogs/compute/using-api-destinations-with-amazon-eventbridge/ より引用
マルチリージョンのイベント転送が可能になったことでイベントを集約することができる
イベント転送面でのアップデートについては、以下の2つが押さえておきたい変化です。
1. EventBridgeではグローバルエンドポイントを使用できるようになりました。
リージョンのサービス状況に応じてプライマリ、またはセカンダリリージョンのイベントバスにイベントをルーティングします。
2. IngestionToInvocationStartLatencyと呼ばれる、新しいEventBridgeメトリックにより、イベントを処理する時間が明確になります。
この2つの機能が実装されたことで、イベントの取り込みをセカンダリのイベントバスへ自動的にフェールオーバーする機能が提供されます。管理効率が高まったことで、現場の生産性向上に貢献できる変化です。

※図 https://aws.amazon.com/jp/blogs/compute/introducing-global-endpoints-for-amazon-eventbridge/ より引用
Amazon EventBridgeのユースケース

Amazon EventBridgeの導入によって、具体的にどんなことが可能になるのでしょうか。まず試したいのが、サードパーティ製品との連携による、監視業務の効率化です。DataDogsなどを使ってAWS上のサービスを監視し、異常があった際にはメールやSlackなどで通知を行う仕組みを敷くことができます。
セキュリティに関するイベントを、全てAmazon EventBridgeに集約して運用するといった使い方も可能です。セキュリティ上の通知情報をまとめて確認できるだけでなく、イベントの内容を詳細に把握したり、そのまま集約された情報を分析にかけたりといった使い方もできるでしょう。
CloudWatch EventsでやっていたことをAmazon EventBridgeでやってみた
さて、新しい機能について触れてきましたが、今までやってきたことはどう実現するの?
結果から言うと、簡単に実現することができました。
今回は簡単なところでEC2の状態変更における通知を設定してみたいと思います。
1. EventBridgeの管理画面を表示し、「ルールを作成」をクリックします。

2. 名前にルール名を入力し「次へ」をクリックします。

3. イベントパターンにてサービス、イベントタイプを選択し、「次へ」をクリックします。
※サンプルイベントを選択するとJSON形式のサンプルを確認できますので、詳しく設定したい場合は参考にしてください。


4. ターゲットを選択し「次へ」をクリックします。
※ここではターゲットにSNS トピックを指定し、メールを受信することにします。

5. タグを指定することができますが、ここでは何も指定せず「次へ」をクリックします。

6. 入力した内容が表示されるので再度確認し「ルールの作成」をクリックします。

7. 「ルールを正常に作成しました」の表示が確認できればOKです。

ルールの作成はこれだけです。
ステップに沿って作成することができました。
それではEC2インスタンスを起動してルールが動作しているか確認してみます。


EC2インスタンスを起動したところ上記のメールを受信しました。
EC2インスタンスのステータスがpendingを経てrunninngへと遷移したことがわかると思います。
参考サイト
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/CloudWatch-Events-tutorial-CloudWatch-Logs.html
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-log-ec2-instance-state.html
終わりに

今回は、CloudWatch Events から機能が拡張した Amazon EventBridge についてご紹介いたしました。Amazon EventBridgeの導入は、サードパーティ製品とAWSを集約できるというだけでも、高い効果が期待できる施策です。
新しい機能はなかなかとっつきにくい印象がありますが、実際に触ってみるととても簡単に使用できることがわかりました。UIも直感で使用できますし、システムの拡張性確保にも貢献します。結果的に現場の生産性向上、ひいてはシステムの安定稼働の助けにもなることから、ぜひ触ったことがない方も使用してみることをおすすめします。また、AWS のデフォルトサービスイベントは無料ですので是非試してみて使い勝手を確認してみてください。
https://aws.amazon.com/jp/eventbridge/pricing/