

# DynamoDB Streams 和 AWS Lambda 触发器
<a name="Streams.Lambda"></a>

Amazon DynamoDB 与 AWS Lambda 集成，使您能够创建*触发器*，自动响应 DynamoDB Streams 中的事件的代码片段。利用触发器，您可以创建应对 DynamoDB 表中的数据修改的应用程序。

**Topics**
+ [教程 1：对 Amazon DynamoDB 使用筛选器处理所有事件，以及对 AWS Lambda 使用 AWS CLI 进行处理](Streams.Lambda.Tutorial.md)
+ [教程 2：对 DynamoDB 和 Lambda 使用筛选器来处理部分事件。](Streams.Lambda.Tutorial2.md)
+ [将 DynamoDB Streams 与 Lambda 配合使用的最佳实践](Streams.Lambda.BestPracticesWithDynamoDB.md)

如果您在表中启用 DynamoDB Streams，则可以将流 Amazon 资源名称（ARN）与您编写的 AWS Lambda 函数关联起来。然后，对该 DynamoDB 表执行的所有变更操作都可以作为流中的项目捕获。例如，您可以设置触发器。这样，在修改了表中的某个项目时，该表的流中会立即出现一条新记录。

**注意**  
如果您将两个以上的 Lambda 函数订阅到一个 DynamoDB 流，则可能会发生读取节流。

[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) 服务每秒轮询四次流来查找新记录。在有新的流记录可用时，将同步调用您的 Lambda 函数。同一个 DynamoDB 流上最多只能有两个 Lambda 函数订阅。如果您将两个以上的 Lambda 函数订阅到同一个 DynamoDB 流，则可能会发生读取节流。

Lambda 函数可以发送通知、启动工作流或执行您指定的任意操作。您可以编写一个仅将每个流记录复制到持久性存储（如 Amazon S3 文件网关 (Amazon S3)）中的 Lambda 函数，从而为您表中的写入活动创建永久审计跟踪。或者，假设您有一个写入到 `GameScores` 表的移动游戏应用程序。每当更新 `TopScore` 表的 `GameScores` 属性时，一个相应的流记录将被写入该表的流。然后，此事件会触发一个 Lambda 函数，该函数会在社交媒体网络上发布一条祝贺消息。此函数也可以编写为忽略以下任何流记录：不是对 `GameScores` 的更新，或者未修改 `TopScore` 属性。

如果您的函数返回错误，则 Lambda 将重试批处理，直到它成功处理或数据过期。还可以将 Lambda 配置为以较小批处理进行重试、限制重试次数、在记录变得过旧时丢弃以及其它选项。

作为性能最佳实践，Lambda 函数需要短时间运行。为避免引入不必要的处理延迟，它也不应执行复杂的逻辑。特别是对于高速流，最好是触发异步后处理 Step Function 工作流，而不是长时间运行的 Lambda 函数。

 您可以通过在 DynamoDB 流上配置基于资源的策略来跨不同的 AWS 账户使用 Lambda 触发器，以授予对 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/](https://docs.aws.amazon.com/lambda/latest/dg/)。