選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

AWS Lambda 搭配 Amazon DynamoDB 使用

焦點模式
AWS Lambda 搭配 Amazon DynamoDB 使用 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

注意

如要將資料傳送到 Lambda 函數以外的目標,或在傳送資料之前讓資料更豐富,請參閱 Amazon EventBridge Pipes

您可以使用 AWS Lambda 函數來處理 Amazon DynamoDB 串流中的記錄。您可以透過 DynamoDB Streams,以在每次更新 DynamoDB 資料表時,觸發 Lambda 函數來執行額外的工作。

輪詢和批次處理串流

Lambda 會輪詢您 DynamoDB 串流中的碎片,其記錄的基本速率為每秒 4 次。當記錄可用時,Lambda 會調用您的函數,並等待結果。如果處理成功,Lambda 會恢復輪詢,直到收到多筆記錄。

Lambda 預設會在記錄可用時立即調用函數。如果 Lambda 從事件來源中讀取的批次只有一筆記錄,Lambda 只會傳送一筆記錄至函數。為避免調用具有少量記錄的函數,您可設定批次間隔,請求事件來源緩衝記錄最長達五分鐘。調用函數之前,Lambda 會繼續從事件來源中讀取記錄,直到收集到完整批次、批次間隔到期或者批次達到 6 MB 的承載限制。如需詳細資訊,請參閱批次處理行為

警告

Lambda 事件來源映射至少會處理每個事件一次,而且可能會重複處理記錄。為避免與重複事件相關的潛在問題,強烈建議您讓函數程式碼具有等冪性。若要進一步了解,請參閱 AWS 知識中心中的如何使 Lambda 函數成為等冪。

Lambda 在傳送下一批進行處理前不會等待任何已設定的擴充完成。換句話說,當 Lambda 處理下一批記錄時,您的擴充功能可能會繼續執行。如果您違反任何帳戶的 並行 設定或限制,便可能會產生限流的問題。若要偵測此是否為潛在問題,請監控您的函數,並確認您看到的 並行指標 是否高於事件來源映射的預期值。由於兩次調用之間的時間很短,Lambda 可能會短暫報告比碎片數目更高的並行用量。即使對於沒有延伸項目的 Lambda 函數也可能如此。

設定 ParallelizationFactor 設定來同時處理 DynamoDB 資料串流的一個碎片與多個 Lambda 調用。您可以透過從 1 (預設) 到 10 的並行化因子指定 Lambda 從碎片輪詢的並行批次數。例如,當 ParallelizationFactor 設定為 2 時,您最多可以有 200 個並行 Lambda 調用,來處理 100 個 DynamoDB 串流碎片 (不過在實務中,ConcurrentExecutions 指標可能有不同值)。當資料量急劇波動並且 IteratorAge 較高時,這有助於向上擴展處理輸送量。如果增加每個碎片的並行批次數量,Lambda 仍會確保在項目 (分割區和排序索引鍵) 層級進行依序處理。

輪詢和串流開始位置

請注意,建立和更新事件來源映射期間的串流輪詢最終會一致。

  • 在建立事件來源映射期間,從串流開始輪詢事件可能需要幾分鐘時間。

  • 在更新事件來源映射期間,從串流停止並重新開始輪詢事件可能需要幾分鐘時間。

這種行為表示如果您指定 LATEST 當作串流的開始位置,事件來源映射可能會在建立或更新期間遺漏事件。若要確保沒有遺漏任何事件,請將串流開始位置指定為 TRIM_HORIZON

DynamoDB Streams 中的碎片同時讀取

對於不是全域資料表的單一區域資料表,您最多可以設計兩個 Lambda 函數,以便同時讀取同一個 DynamoDB Streams 碎片。超過此限制會導致請求調節。對於全域資料表,建議您將同時函數的數量限制為一個,以避免請求限流。

範例事件

{ "Records": [ { "eventID": "1", "eventVersion": "1.0", "dynamodb": { "Keys": { "Id": { "N": "101" } }, "NewImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES", "SequenceNumber": "111", "SizeBytes": 26 }, "awsRegion": "us-west-2", "eventName": "INSERT", "eventSourceARN": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525", "eventSource": "aws:dynamodb" }, { "eventID": "2", "eventVersion": "1.0", "dynamodb": { "OldImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "SequenceNumber": "222", "Keys": { "Id": { "N": "101" } }, "SizeBytes": 59, "NewImage": { "Message": { "S": "This item has changed" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES" }, "awsRegion": "us-west-2", "eventName": "MODIFY", "eventSourceARN": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525", "eventSource": "aws:dynamodb" } ]}

下一個主題:

建立映射

上一個主題:

教學課程
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。