DynamoDB Streams 和 AWS Lambda 触发器
主题
Amazon DynamoDB 与 AWS Lambda 集成,使您能够创建触发器,自动响应 DynamoDB Streams 中的事件的代码片段。利用触发器,您可以创建应对 DynamoDB 表中的数据修改的应用程序。
如果您在表中启用 DynamoDB Streams,则可以将流 Amazon 资源名称(ARN)与您编写的 AWS Lambda 函数关联起来。然后,对该 DynamoDB 表执行的所有变更操作都可以作为流中的项目捕获。例如,您可以设置触发器。这样,在修改了表中的某个项目时,该表的流中会立即出现一条新记录。
注意
如果您将两个以上的 Lambda 函数订阅到一个 DynamoDB 流,则可能会发生读取节流。
AWS Lambda 服务每秒轮询四次流来查找新记录。在有新的流记录可用时,将同步调用您的 Lambda 函数。同一个 DynamoDB 流上最多只能有两个 Lambda 函数订阅。如果您将两个以上的 Lambda 函数订阅到同一个 DynamoDB 流,则可能会发生读取节流。
Lambda 函数可以发送通知、启动工作流或执行您指定的任意操作。您可以编写一个仅将每个流记录复制到持久性存储(如 Amazon S3 文件网关 (Amazon S3))中的 Lambda 函数,从而为您表中的写入活动创建永久审计跟踪。或者,假设您有一个写入到 GameScores
表的移动游戏应用程序。每当更新 TopScore
表的 GameScores
属性时,一个相应的流记录将被写入该表的流。然后,此事件会触发一个 Lambda 函数,该函数会在社交媒体网络上发布一条祝贺消息。此函数也可以编写为忽略以下任何流记录:不是对 GameScores
的更新,或者未修改 TopScore
属性。
如果您的函数返回错误,则 Lambda 将重试批处理,直到它成功处理或数据过期。还可以将 Lambda 配置为以较小批处理进行重试、限制重试次数、在记录变得过旧时丢弃以及其它选项。
作为性能最佳实践,Lambda 函数需要短时间运行。为避免引入不必要的处理延迟,它也不应执行复杂的逻辑。特别是对于高速流,最好是触发异步后处理 Step Function 工作流,而不是长时间运行的 Lambda 函数。
您不能跨不同的 AWS 账户使用相同的 Lambda 触发器。DynamoDB 表和 Lambda 函数必须属于同一个 AWS 账户。
有关 AWS Lambda 的更多信息,请参阅《AWS Lambda 开发人员指南》https://docs.aws.amazon.com/lambda/latest/dg/。