本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將事件篩選與 DynamoDB 事件來源搭配使用
您可以使用事件篩選來控制 Lambda 將哪些記錄從串流或佇列中傳送至函數。如需事件篩選如何運作的一般資訊,請參閱控制 Lambda 傳送給函數的事件。
本節著重於 DynamoDB 事件來源的事件篩選。
動 DynamoDB 事件
假設您有一個包含主索引鍵 CustomerName
和屬性 AccountManager
與 PaymentTerms
的 DynamoDB 表格。以下顯示 DynamoDB 表格串流中的範例記錄。
{ "eventID": "1", "eventVersion": "1.0", "dynamodb": { "ApproximateCreationDateTime": "1678831218.0", "Keys": { "CustomerName": { "S": "AnyCompany Industries" }, "NewImage": { "AccountManager": { "S": "Pat Candella" }, "PaymentTerms": { "S": "60 days" }, "CustomerName": { "S": "AnyCompany Industries" } }, "SequenceNumber": "111", "SizeBytes": 26, "StreamViewType": "NEW_IMAGE" } } }
若要根據 DynamoDB 表格中的索引鍵值和屬性值進行篩選,請使用記錄中的 dynamodb
索引鍵。下列各節提供不同篩選器類型的範例。
使用表格索引鍵篩選
假設您希望函數僅處理主鍵CustomerName
為「AnyCompany 產業」的記錄。FilterCriteria
物件如下所示。
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }" } ] }
為了增加清晰度,以下是以普通方式Pattern
擴展過濾器的值JSON。
{ "dynamodb": { "Keys": { "CustomerName": { "S": [ "AnyCompany Industries" ] } } } }
您可以使用控制台 AWS CLI 或 AWS SAM 模板添加過濾器。
使用表格屬性篩選
使用 DynamoDB 時,您也可以使用 NewImage
和 OldImage
索引鍵來篩選屬性值。假設您想篩選最新表格映像中的 AccountManager
屬性為 "Pat Candella" 或 "Shirley Rodriguez" 的記錄。FilterCriteria
物件如下所示。
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }" } ] }
為了增加清晰度,以下是以普通方式Pattern
擴展過濾器的值JSON。
{ "dynamodb": { "NewImage": { "AccountManager": { "S": [ "Pat Candella", "Shirley Rodriguez" ] } } } }
您可以使用控制台 AWS CLI 或 AWS SAM 模板添加過濾器。
使用布林運算式篩選
您也可以使用布林AND運算式建立篩選器。這些運算式可以同時包含資料表的索引鍵和屬性參數。假設您想篩選記錄,其中 AccountManager
的 NewImage
值是「Pat Candella」,OldImage
值是「Terry Whitlock」。FilterCriteria
物件如下所示。
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } }" } ] }
為了增加清晰度,以下是以普通方式Pattern
擴展過濾器的值JSON。
{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } }, "dynamodb": { "OldImage": { "AccountManager": { "S": [ "Terry Whitlock" ] } } } }
您可以使用控制台 AWS CLI 或 AWS SAM 模板添加過濾器。
注意
DynamoDB 事件篩選不支援使用數值運算子 (數值等於和數值範圍)。即使表格中的項目儲存為數字,這些參數也會轉換為JSON記錄物件中的字串。
使用存在運算符
由於 DynamoDB JSON 事件物件的結構化方式,因此使用 Exissions 運算子需要特別小心。Exissions 運算符僅適用於事件中的葉節點JSON,因此,如果您的過濾器模式使用 Exists 來測試中間節點,它將無法正常工作。請考慮下列 DynamoDB 資料表項目:
{ "UserID": {"S": "12345"}, "Name": {"S": "John Doe"}, "Organizations": {"L": [ {"S":"Sales"}, {"S":"Marketing"}, {"S":"Support"} ] } }
您可能想要建立如下所示的篩選器模式,以測試包含以下事件"Organizations"
:
{ "dynamodb" : { "NewImage" : { "Organizations" : [ { "exists": true } ] } } }
但是,此過濾器模式永遠不會返回匹配項,因為不"Organizations"
是葉節點。下列範例會示範如何正確使用 Exissions 運算子來建構所需的濾鏡模式:
{ "dynamodb" : { "NewImage" : {"Organizations": {"L": {"S": [ {"exists": true } ] } } } } }
JSON篩 DynamoDB 式
若要正確篩選 DynamoDB 來源中的事件,資料欄位和資料欄位 (dynamodb
) 的篩選條件都必須採用有效JSON的格式。如果任一欄位不是有效的JSON格式,Lambda 會捨棄訊息或擲回例外狀況。下表摘要說明特定行為:
傳入資料格式 | 資料屬性的篩選條件模式格式 | 產生的動作 |
---|---|---|
有效 JSON |
有效 JSON |
根據您的篩選條件標準之 Lambda 篩選條件。 |
有效 JSON |
資料屬性沒有篩選條件模式 |
Lambda 篩選條件 (僅限其他中繼資料屬性) 會根據您的篩選條件標準而定。 |
有效 JSON |
非 JSON |
Lambda 會在事件來源映射建立或更新時擲回例外狀況。資料屬性的篩選器模式必須是有效的JSON格式。 |
非 JSON |
有效 JSON |
Lambda 捨棄記錄。 |
非 JSON |
資料屬性沒有篩選條件模式 |
Lambda 篩選條件 (僅限其他中繼資料屬性) 會根據您的篩選條件標準而定。 |
非 JSON |
非 JSON |
Lambda 會在事件來源映射建立或更新時擲回例外狀況。資料屬性的篩選器模式必須是有效的JSON格式。 |