Amazon MQ イベントソースからのイベントをフィルタリングする
イベントフィルタリングを使用して、Lambda が関数に送信するストリームまたはキューからのレコードを制御することができます。イベントフィルタリングの仕組みに関する一般情報については、「Lambda が関数に送信するイベントを制御する」を参照してください。
このセクションでは、Amazon MQ イベントソースのイベントフィルタリングに焦点を当てます。
注記
Amazon MQ イベントソースマッピングは、 data
キーでのフィルタリングのみをサポートします。
Amazon MQ イベントフィルタリングの基本
Amazon MQ メッセージキューには、有効な JSON 形式またはプレーン文字列でメッセージが含まれているとします。レコードの例は次のようになり、data
フィールドでデータが Base64 でエンコードされた文字列に変換されます。
Active MQ および Rabbit MQ ブローカーの両方では、イベントフィルタリングを使用して data
キーを使用するレコードをフィルタリングできます。Amazon MQ キューに次の JSON 形式のメッセージが含まれているとします。
{ "timeout": 0, "IPAddress": "203.0.113.254" }
timeout
フィールドが 0 より大きいレコードのみをフィルタリングするには、FilterCriteria
オブジェクトは次のようになります。
{ "Filters": [ { "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }" } ] }
以下は、わかりやすくするためにプレーン JSON で展開したフィルターの Pattern
の値を記載しています。
{ "data": { "timeout": [ { "numeric": [ ">", 0 ] } ] } }
コンソール、AWS CLI、または AWS SAM テンプレートを使用してフィルターを追加できます。
Amazon MQ を使用すると、メッセージがプレーン文字列のレコードをフィルタリングすることもできます。メッセージが「Result:」で始まるレコードのみを処理するとします。FilterCriteria
オブジェクトは次のようになります。
{ "Filters": [ { "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }" } ] }
以下は、わかりやすくするためにプレーン JSON で展開したフィルターの Pattern
の値を記載しています。
{ "data": [ { "prefix": "Result: " } ] }
コンソール、AWS CLI、または AWS SAM テンプレートを使用してフィルターを追加できます。
Amazon MQ メッセージは UTF-8 でエンコードされた文字列 (プレーン文字列または JSON 形式) である必要があります。これは、Lambda がフィルター条件を適用する前に Amazon MQ のバイト配列を UTF-8 にデコードするためです。メッセージが UTF-16 や ASCII などの別のエンコーディングを使用している場合、またはメッセージ形式が FilterCriteria
形式と一致しない場合、Lambda はメタデータフィルターのみを処理します。以下は、特定の動作を要約した表です。
着信メッセージの形式 | メッセージプロパティのフィルターパターン形式 | 結果として生じるアクション |
---|---|---|
プレーン文字列 |
プレーン文字列 |
Lambda がフィルター条件に基づいてフィルタリングを実行します。 |
プレーン文字列 |
データプロパティのフィルターパターンがない |
Lambda がフィルター条件に基づいて (他のメタデータプロパティのみを) フィルタリングします。 |
プレーン文字列 |
有効な JSON |
Lambda がフィルター条件に基づいて (他のメタデータプロパティのみを) フィルタリングします。 |
有効な JSON |
プレーン文字列 |
Lambda がフィルター条件に基づいて (他のメタデータプロパティのみを) フィルタリングします。 |
有効な JSON |
データプロパティのフィルターパターンがない |
Lambda がフィルター条件に基づいて (他のメタデータプロパティのみを) フィルタリングします。 |
有効な JSON |
有効な JSON |
Lambda がフィルター条件に基づいてフィルタリングを実行します。 |
UTF-8 以外でエンコードされた文字 |
JSON、プレーン文字列、またはパターンなし |
Lambda がフィルター条件に基づいて (他のメタデータプロパティのみを) フィルタリングします。 |