Amazon EventBridge のパートナー連携先にMomentoが正式に登録されました!
Amazon EventBridge はもともとイベントの送出先に汎用のHTTPSエンドポイントをサポートしていたため、MomentoのHTTP APIを使うことで、EventBridgeが直接Lambdaを介さずにMomento Cache や Momento Topics に値を書き込むことは可能でした。
今回EventBridgeの接続先パートナーソースとして正式にMomentoが加わったことによりその利用が加速されるものと思われます。
これを受けてMomento側ではAmazon DynamoDBと連携するウェブアプリサンプルを公開してくれています。
と、いうことでEventBridge から Momento Cache に値を書き込むシンプルな環境の構築手順です。
接続、APIの送信先、ルール
EventBridgeでは接続
、APIの送信先
、ルール
の3つを用いて設定を行います。まずはこの3つの関係をおさらいしておきます。
- 接続: EventBridgeから接続するMomentoを設定しAPI Keyをセットします
- APIの送信先: Momentoに接続する際の具体的な送付先URLをセットします
- ルール: EventBridgeのバスに特定のイベントが挿入された際に、その接続
を用いてどのAPIの送信先
にどういうメッセージを送出するかを設定します
さっそくやってみる
ではやっていきましょう。まずは以下のものが作成されている前提です。
- Momento Cache
- API Key
不明な場合はこちらを参考にしてください。
https://zenn.dev/momentobigfun/articles/aa24ff7817e06c
接続
接続を作成
をクリックします。
適当な名前を付けパートナーから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