我想透過 AWS Lambda 函數使用或對 Amazon DynamoDB 串流進行疑難排解。
解決方案
以下是將 DynamoDB 串流與 Lambda 函數搭配使用時的常見問題:
當 DynamoDB 串流為觸發條件,為什麼我的 Lambda 函數無法擴展?
當您在 DynamoDB 資料表上啟用 DynamoDB 串流時,Amazon DynamoDB 會為每個分割區關聯一個碎片。例えば、DynamoDBテーブルにパーティション数が10あり、そのテーブルでDynamoDBストリームをオンにした場合、10個のシャードがあります。
如果資料表的分割區數量增加,那麼串流的分區數量也會增加。
DynamoDB 資料表的每個分割區最多可處理 3000 個讀取容量單位 (RCU)、1000 個寫入容量單位 (WCU) 以及 10 GB 的資料。超過其中任何一個參數會導致以下情況:
- 在資料表中新增新的分割區。
- 在 DynamoDB 串流建立新的分區。
如何控制從 DynamoDB 串流進行的資料處理?
批次大小和批次時間段有助於控制串流的資料處理。
**批次時間段:**設定在叫用之前等待記錄的時間長度。批次時間段可用於控制從 DynamoDB 串流進行的資料處理。請注意,此行為取決於串流內的資料可用性。
批次大小: 設定批次的記錄上限。
除非符合下列條件,否則不會叫用 Lambda 函數:
- 承載大小達到 6 MB (同步叫用限制)。
- 批次時間段達到其最大值 (在此範例中為 60 秒)。
- 批次大小達到其最大值。
平行化因子如何用於加快資料處理速度?
平行化因子透過允許更多並行執行數來快速處理大量記錄。您可以設定平行化因子 (預設值為: 1,最大值為 10),以增加處理的分區數量。啟用平行化因子時,請務必使用隨機或唯一的分割區索引鍵,以達到最高的輸送量。
計算方式: 平行化因子 (每個分區的並行批次)\ * 分區 = 並行執行數
BisectBatchonFunctionError 設定是什麼?
如果 Lambda 函數失敗,則當 BisectBatchonFunctionError 選項設定為 true 時,批次將分為兩部分。然後這些分割批次將進行重試,直到找到問題記錄為止。重試是根據最大重試和記錄存留期設定進行處理。
如果重試嘗試選項設為 0,則不會嘗試對失敗的記錄進行重試。在這種情況下,DynamoDB 串流會捨棄失敗的記錄,或將其傳送至無效字母佇列 (DLQ) (若有設定)。
範例 1
在下面的範例,'p' 代表問題記錄而重試嘗試設定為 0。
批次記錄: [1,2,3p,4,5p]
分割 1: [3p,4,5p]
分割 2:[3p] [4,5p] 重試捨棄 [3p],因為它被識別為問題記錄。或者,它會傳送至 DLQ (若有設定)。
分割 3: [4] 已處理。[5p] 已捨棄或被傳送至 DLQ (若有設定)。
範例 2
在下列範例,'x' 代表問題記錄。重試嘗試設定為 -1。
插入的批次記錄:[1,2,3x,4,5x]
[3x,4,5x]
[3x,4,5x]
[3x,4,5x]
[3x,4,5x]
為什麼 DynamoDB 串流的 Lambda 的迭代器存留期會增加?
以下是 Lambda 的迭代器存留期增加的常見原因:
- DynamoDB 串流有不正確的記錄。
- 對串流進行大量的寫入操作 (PutItem 至 BatchWriteItem)。Lambda 函數可能無法跟上處理高寫入量的速度。如果發生這種情況,請增加 DynamoDB 資料表佈建容量,以增加每 1000 個 WCU 的分割區計數。增加佈建容量會增加並行 Lambda 執行的數量。如需詳細資訊,請參閱當 DynamoDB 串流為觸發條件,為什麼我的 Lambda 函數無法擴展?
- DynamoDB 分割區的數量減少,例如移轉至新帳戶或新資料表。
- Lambda 函數中存在限流或函數錯誤。AWS Lambda 會重試記錄,直到整個批次成功處理或記錄的有效期到期為止。此外,DynamoDB 串流的保留期為 24 小時。若要避免資料遺失,最佳做法是設定 DLQ。如果已設定 DLQ,則 AWS Lambda 會在重試完成或記錄保留期到期後,將失敗記錄批次傳送至 DLQ。
若要解決 Lambda 函數錯誤,請檢查 Amazon CloudWatch Logs以取得錯誤的詳細資訊。
- Lambda 函數持續時間增加。
- 您必須最佳化錯誤處理和平行化因子。
如需詳細資訊,請參閱為什麼我的 Lambda 迭代器存留期會增加,以及如何減少它?