📘

Amazon EventBridge のパートナー連携先にMomentoが正式に登録されました!

2024/08/18に公開

Amazon EventBridge はもともとイベントの送出先に汎用のHTTPSエンドポイントをサポートしていたため、MomentoのHTTP APIを使うことで、EventBridgeが直接Lambdaを介さずにMomento Cache や Momento Topics に値を書き込むことは可能でした。
https://docs.momentohq.com/ja/cache/integrations/amazon-eventbridge

今回EventBridgeの接続先パートナーソースとして正式にMomentoが加わったことによりその利用が加速されるものと思われます。

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-api-destination-partners.html#api-destination-momento

これを受けてMomento側ではAmazon DynamoDBと連携するウェブアプリサンプルを公開してくれています。
https://github.com/momentohq/client-sdk-javascript/tree/main/examples/nodejs/aws/eventbridge
ただこれらのサンプルはAWS CDKを用いていたりCloudFormationスタックで必要なものが全て構築されるため、AWSに詳しくないとその構築手順などがわかりづらかったりします。(現に私も構成や設定方法を理解するのに数時間ドはまりしました・・・)
と、いうことでEventBridge から Momento Cache に値を書き込むシンプルな環境の構築手順です。

接続、APIの送信先、ルール

EventBridgeでは接続APIの送信先ルールの3つを用いて設定を行います。まずはこの3つの関係をおさらいしておきます。
- 接続: EventBridgeから接続するMomentoを設定しAPI Keyをセットします
- APIの送信先: Momentoに接続する際の具体的な送付先URLをセットします
- ルール: EventBridgeのバスに特定のイベントが挿入された際に、その接続を用いてどのAPIの送信先にどういうメッセージを送出するかを設定します

さっそくやってみる

ではやっていきましょう。まずは以下のものが作成されている前提です。

接続


接続を作成をクリックします。

適当な名前を付けパートナーからMomentoを選択します。

Authorizationというキー名でAPI Key をセットし作成をクリックします。

APIの送信先

API送信先を作成をクリックします。

適当な名前を付けAPI送信先エンドポイントhttps://api.cache.cell-ap-northeast-1-1.prod.a.momentohq.com/cache/*と入力します。

PUTを選択します。

接続タイプで先ほど作成した接続を選択し、作成をクリックします。

ルール

ルールを作成する前に適当なS3バケットを作成しておきます。全てデフォルトで問題ありません。作成されたらバケットのプロパティタブでAmazon EventBridgeをオンにしておきます。


ルールを作成をクリックします。

適当な名前を付け次へをクリックします。
イベントパターンを以下の通り設定してS3の全てのイベントでこのルールが起動するようにします。

ターゲットでは先ほど作成したMomentoを選択します。


Momento側のキャッシュの名前空間をパスパラメータとして設定します。

必ずMomento側に存在しているCacheを指定してください。

クエリ文字列パラメータを以下のようにセットします。

cacheNameが重複していることがわかります。実はパスパラメータで指定される文字列は使用されません。ただし空欄では設定できないためわかりやすいようにCacheの名前空間を入力しているだけです。
追加設定から入力で定数(JSON)を選びます。

{"message": "test"}と入力しておきます。次へを2回、ルールを更新を1回クリックします。
次にCloudshellを開いて以下を実行します。

echo "test" > testfile.txt
aws s3 cp testfile.txt s3://YOUR_BUCKET_NAME

YOUR_BUCKET_NAMEはさっき作成したS3バケットの名前にしておきます。以下の通りMomento側でメッセージが飛んできていることがわかります。

メッセージのカスタマイズ

今のテストではあらかじめセットした定数の文字列をCacheに書き込んでいますが、当然実際の利用では変数に格納された値を用います。
入力の変数画面から今度は定数(JSON)ではなく入力トランスフォーマーを選択します。

ターゲットトランスフォーマーに以下を指定します。{"message":"$.detail.object.key"}

これはEventBusに入力されたJSONからdetail.object.keyの値を抜き出してMomentoのmessageに渡す、という意味です。テンプレートには変数名であるmessageを入力します。

確認をクリックした後ルールを更新をクリックします。再度CloudshellでS3へのファイルアップロードを実行すると以下となります。

これはS3から送出される以下の値を受け取り必要な値を抜き出しMomentoのmessageにセットしています。

{
   "version":"0",
   "id":"9b45cb47-3952-9b23-227b-0afcfb929f13",
   "detail-type":"Object Created",
   "source":"aws.s3",
   "account":"917561075114",
   "time":"2024-08-18T09:28:07Z",
   "region":"ap-northeast-1",
   "resources":[
      "arn:aws:s3:::r2hkameda"
   ],
   "detail":{
      "version":"0",
      "bucket":{
         "name":"r2hkameda"
      },
      "object":{
         "key":"testfile.txt",
         "size":5,
         "etag":"d8e8fca2dc0f896fd7cb4cb0031ba249",
         "sequencer":"0066C1BEA78FE1EEA0"
      },
      "request-id":"5Y8Q6N6WECDG8AD6",
      "requester":"917561075114",
      "source-ip-address":"35.74.245.234",
      "reason":"PutObject"
   }
}

Discussion