

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

# DynamoDB 串流和 AWS Lambda 觸發
<a name="Streams.Lambda"></a>

Amazon DynamoDB 與 整合， AWS Lambda 因此您可以建立*觸發，*也就是自動回應 DynamoDB Streams 中事件的程式碼片段。您可以利用觸發條件建立對 DynamoDB 資料表資料修改做出反應的應用程式。

**Topics**
+ [教學課程 \$11：使用篩選條件來處理 Amazon DynamoDB 的所有事件， AWS Lambda 並使用 AWS CLI](Streams.Lambda.Tutorial.md)
+ [教學課程 \$12：使用篩選條件來處理 DynamoDB 和 Lambda 的所有事件](Streams.Lambda.Tutorial2.md)
+ [搭配 Lambda 使用 DynamoDB Streams 的最佳實務](Streams.Lambda.BestPracticesWithDynamoDB.md)

如果您在資料表上啟用 DynamoDB Streams，您可以將串流 Amazon Resource Name (ARN) 與您寫入的 AWS Lambda 函數建立關聯。然後，即可將該 DynamoDB 資料表的所有變動動作擷取為串流上的項目。例如，您可以設定觸發條件，以便在修改資料表中的項目時，新記錄會立即顯示在該資料表的串流中。

**注意**  
如果您為單一 DynamoDB 串流訂閲兩個以上的 Lambda 函式，可能會發生讀取限流。

此 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) 服務會以每秒四次的速度輪詢串流以偵測新記錄。當有新的串流記錄可用時，系統會同步調用 Lambda 函式。對於相同的 DynamoDB 串流，最多可以訂閱兩個 Lambda 函式。如果您為相同 DynamoDB 串流訂閲兩個以上的 Lambda 函式，可能會發生讀取限流。

Lambda 函式可以傳送通知、啟動工作流程，或執行您指定的其他許多動作。您可以撰寫 Lambda 函式僅將每筆串流紀錄複製到耐久性儲存，例如 Amazon S3 File Gateway (Amazon S3)，並在您的資料表中建立永久的寫入活動稽核軌跡。或者，假設您有一個會寫入 `GameScores` 表的手機遊戲應用程式。每當 `TopScore` 資料表的 `GameScores` 屬性更新時，對應的串流紀錄就會寫入資料表串流。然後，這個事件就會觸發在社交媒體網路張貼賀電的 Lambda 函式。(此函數也可以編寫為忽略所有非更新至 `GameScores` 或不修改 `TopScore` 屬性的串流紀錄)。

如果函數傳回錯誤，Lambda 會不斷重試批次直到處理成功或資料過期。您還可以設定 Lambda，使用較小批次重試、限制重試次數、在記錄太舊時捨棄，以及其他選項。

作為效能最佳實務，Lambda 函式必須為短期函數。為了避免產生不必要的處理延遲，此函數也不應執行複雜的邏輯。尤其對於高速串流而言，相較於同步長時間執行的 Lambda，觸發非同步後續處理 Step Function 工作流程是較佳的做法。

 您可以在 DynamoDB 串流上設定資源型政策，以授予 Lambda 函數的跨帳戶讀取存取權， AWS 藉此跨帳戶使用 Lambda 觸發。若要進一步了解如何設定串流以允許跨帳戶存取，請參閱《DynamoDB 開發人員指南》中的[使用跨帳戶 AWS Lambda 函數共用存取權](rbac-cross-account-access.md#shared-access-cross-acount-lambda)。

如需 的詳細資訊 AWS Lambda，請參閱 [AWS Lambda 開發人員指南](https://docs.aws.amazon.com/lambda/latest/dg/)。