【アップデート】EventBridgeのターゲットにHTTPのエンドポイントが指定可能になったので、EventBridgeから直接SlackのAPIを叩いてみた
CX事業本部@大阪の岩田です。本日のアップデートによりEventBridgeがAPI Destinations(APIの送信先)をサポートし、イベントルールのターゲットにHTTPのエンドポイントが指定可能になりました。
早速試してみたので、簡単に内容をご紹介します。
アップデート内容
これまでもEventBridgeのターゲットにAPI Gatewayを指定することは可能でしたが、今回のアップデートによりサードパーティのSaaS製品や、ALB&EC2で独自開発したAPIとEvent Bridgeを簡単に連携できるようになりました。API Destinationsは以下のような機能をサポートしています。
3つの認証タイプをサポート
HTTPエンドポイント接続時の認証タイプとして
- ベーシック認証
- OAuthのClient Credentials
- APIキー
をサポートしています。
ペイロードの変換
Input Transformerを利用してEventBridgeが受け取ったイベントデータを連携先サービスの仕様に合わせた形に自動変換可能です。
レートリミットの調整
一般的にAPIにはレートリミットが設定されており、レートリミット以上にAPIを呼び出した場合はエラーが返却されることになります。EventBridgeでAPI Destinationsを定義する際に呼び出しレートの制限が指定できるようになっており、連携先エンドポイントのレートリミットに抵触しないように、呼び出し速度を自動調節可能です。
やってみる
早速実際に試してみたいと思います。今回はEventBridgeのターゲットにSlack APIのエンドポイントを指定し、EC2関連のイベントをSlackにそのまま通知する構成を組んでみます。
Slackアプリの作成
まずはテスト用のSlackアプリを作成します。作成したアプリのBot Token Scopes
にchat:write
を設定し、Bot User OAuth Token
を控えます。
アプリが作成できたら適当なチャンネルにアプリをインストールしておきましょう。
Event Bridgeの設定
続いてEvent Bridge側を設定していきます。今回はデフォルトのイベントバスをそのまま利用します。「検出を開始する」をクリックしてスキーマの検出を開始します。
続いてルールを作成します。今回はEC2の全てのイベントを拾うように設定しました。
続いてターゲットの指定です。API 送信先を指定し、新しい API 送信先を作成
に必要事項を入力します。
API 送信先エンドポイントにhttps://slack.com/api/chat.postMessage
を、HTTP メソッドにはPOSTを指定します。続いて接続の作成です。
認証タイプにAPIキーを選択し、AuthorizationヘッダーにBearer <Slackアプリ作成時に確認したボットユーザーのOAuthトークン>
と設定します。入力の設定
には入力トランスフォーマーを指定します。ここでSlackのAPI仕様に合わせてペイロードを変換してやります。
SlackのAPIからメッセージを投稿するには、最低限チャンネルIDとメッセージを指定する必要があります。最低限のペイロードは以下のようなイメージです。
{ "channel":"チャンネルID", "text":"投稿するメッセージ" }
イベントデータを上記の形式に合わせるためInput Transformerを使用します。入力パスは
{"detail":"$.detail"}
を設定し入力テンプレートには
{ "channel":"アプリから投稿するチャンネルのID", "text":<detail> }
を設定します。
この特定のリソースに対して新しいロールを作成する
を選択して、そのままルールを作成します。これで準備完了です。
EC2インスタンスを開始/停止してみる
準備ができたので、適当なEC2インスタンスを開始/停止してみます。すると
無事Slackに通知が飛んできました!!
まとめ
マイクロサービス間の連携が容易になる非常に熱いアップデートだと思います。従来はEventBridgeからLambdaを介して外部APIと連携していたようなケースでは、今回のアップデートを活用することでLambdaを廃止できる可能性も高そうです。ぜひEventBrdge ✕ API Destinationsの利用を検討して下さい。