Amazon EventBridge APIを見てSaaSパートナー実装ができそうな気になろう

2020.03.04

ども、ゲストのソラコム大瀧(takipone)です。

AWSで様々なイベント連携を扱うサービスAmazon EventBridgeは既にお使いでしょうか。様々なイベントからLambda関数を呼び出したり、SQSのキューにイベントのメッセージを溜めたりとイベントを統合的に管理する仕組みとして便利ですね。EventBridgeはAWSのイベントはもとより、サードパーティーのSaaSからのイベントを受け取る機能もあります。最近、日本でも対応SaaSが増えて注目されていますね。

「実はうちも自社サービスを開発していてEventBridgeの仲間に入れないものかと思っている。でもAWSの中の仕組みとの連携と言われても、あまりイメージが沸かないな」とお考えのサービサーの方もいらっしゃるのではないでしょうか。AWSのパートナー担当の方に聞いていただくのがもちろんベストなのですが、公開されているEventBridgeのAPIやドキュメントにはSaaSパートナーに関するAPIや説明が含まれていて、ある程度の実装を考えることができたりします。本記事では公開情報のみをヒントとして、SaaSパートナーがEventBridgeにイベントを提供するために必要そうな処理を想像してみたいと思います *1

お手本(Mackerel)で実装要件を整理する

EventBridgeに対応しているMackerelの設定を通してSaaSパートナーからEventBridgeにイベントを送信するための設定を整理してみましょう。以下のヘルプの手順通りです。

まずはMackerelチャンネル設定の[通知グループ/通知チャンネルを追加]から通知チャンネルを追加します。一覧に「Amazon EventBridge」があるのでクリックすると、いくつかの項目を入力するフォームが表示されます。

AWSアカウントIDイベントID通知を受け取るAWSのリージョンが関係ありそうですね。手持ちのAWSアカウントとリージョン、イベントIDは任意のIDを入れて作成します。

通知チャンネルが作成されたらMackerel側の設定は完了です。続いて指定したAWSアカウントIDのAWS管理コンソールにログインし、Mackerelで選択したリージョンのEventBridgeの管理画面を開きます。画面左端に畳まれているメニューを開き、[イベント]-[パートナーイベントソース]を選択するとmackerel.ioが名前に含まれるイベントソースが「保留中」としてリストされているのが確認できます。先ほど入力したイベントIDも含まれていますね。

これを選択し[イベントバスと関連付ける]をクリックします。

[関連付ける]をクリックすれば、MackerelのイベントがEventBridgeに流れるようになります。

...雰囲気は見ていただけたでしょうか。この流れを基にして、APIを見ていきます。

EventBridgeのSaaSパートナー向けAPI

EventBridgeのAPIリファレンスは以下のURLで公開されています。

ここにあるAPI(Action)のいくつかには、以下の記述があり、SaaSパートナー向けとユーザー向けを区別することができます。

Called by an SaaS partner to create a partner event source. This operation is not used by AWS customers.

SaaSパートナー向けと記述のあったAPIは以下です。

  • CreatePartnerEventSource
  • DeletePartnerEventSource
  • DescribePartnerEventSource
  • ListPartnerEventSourceAccounts
  • ListPartnerEventSources
  • PutPartnerEvents

このうちCreatePartnerEventSource APIのリクエストの形式は以下になっています。

{
   "Account": "string",
   "Name": "string"
}

さらにNameはpartner_name/event_namespace/event_nameの形式とするとあり、先ほどのMackerelの手順で出てきたパートナーイベントソースの形式と同じですね。どうやらパートナーのSaaSサービスから呼び出しているのはこのAPIに見えます。

PutPartnerEvents APIの説明にはThis is used by SaaS partners to write events to a customer's partner event busとあるので、作成したパートナーイベントソースにSaaSサービスの実際のイベントを登録するのがこのAPIのようですね。リクエスト形式は以下の通りです。

{
   "Entries": [ 
      { 
         "Detail": "string",
         "DetailType": "string",
         "Resources": [ "string" ],
         "Source": "string",
         "Time": number
      }
   ]
}

API名の末尾がsであり、Entriesの値が配列なので複数のイベントを登録できるバッチAPIになっているようです。

他のAPIはパートナーイベントソースの管理関係APIのようですので、ひとまずCreatePartnerEventSource APIとPutPartnerEvents APIをSaaSサービス側でコールする仕組みを整えれば、EventBridge対応ができそうです。これなら...できそうな気になってきませんか!

まとめ

EventBridgeのSaaSパートナー統合で利用しそうなAPIをご紹介しました。ちなみに今回のAPIはいずれもAWS CLIでサポート済みですので、実際に検証を進めることになったらCLIからAPIをコールするのがお手軽です。

ちなみに実際に進める場合の最初の入り口は、以下のページにある「統合を開始する »」のリンクにあるPDFに手順があります。

また、Mackerelの例で見た限りでは、パートナーイベントソースやイベントバスにパートナー側のAWSアカウントIDが出てこなかったので、従来のアカウント連携とは異なり多数のユーザーのAWSアカウントとの連携を考慮した良い設計になっている気配を感じることもできました。

参考URL

脚注

  1. 誰得やねんというあなたのツッコミは正しいです。個人的にこういうの考えるのが楽しいなと思って書いている趣味のブログですよ、ええ。