AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS Lambda 与 Amazon DynamoDB 结合使用

您可以使用 AWS Lambda 函数来处理 Amazon DynamoDB Streams 流中的记录。使用 DynamoDB 流,每次更新 DynamoDB 表时,您都可以触发 Lambda 函数以执行额外的工作。

Lambda 读取流中的记录并使用包含流记录的事件同步调用您的函数。Lambda 以批量方式读取记录并调用您的函数来处理批处理中的记录。

例 DynamoDB 流 记录事件

{ "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": eventsourcearn, "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": sourcearn, "eventSource": "aws:dynamodb" }

Lambda 将针对记录轮询 DynamoDB 流 流中的分片(按照每秒 4 次的基本频率)。当记录可用时,Lambda 调用您的函数并等待结果。如果处理成功,Lambda 将恢复轮询,直到它收到更多记录。

如果您的函数返回一个错误,则 Lambda 将重试批处理,直到处理成功或数据过期。在此问题得到解决之前,不会处理分片中的任何数据。处理代码中的任何记录处理错误,以避免分片停滞和潜在的数据丢失。

创建事件源映射

创建事件源映射以指示 Lambda 将流中的记录发送到 Lambda 函数。您可以创建多个事件源映射,以使用多个 Lambda 函数处理相同的数据,或使用单个函数处理来自多个流的项目。

要在 Lambda 控制台中将您的函数配置为从 DynamoDB 流 读取,请创建 DynamoDB 触发器。

创建触发器

  1. Open the Lambda console Functions page.

  2. 选择函数。

  3. Designer (设计器) 下,选择触发器类型以将触发器添加到函数。

  4. Configure triggers (配置触发器) 下,配置所需选项,然后选择 Add (添加)

  5. 选择 Save

事件源选项

  • DynamoDB 表 – 要从中读取记录的 DynamoDB 表。

  • 批处理大小 – 每个批处理中从分片读取的记录的数量(多达 1,000)。Lambda 通过单个调用将批处理中的所有记录传递给函数,前提是事件的总大小未超出 6 MB 的负载限制。

  • 起始位置 – 仅处理新记录或所有现有记录。

    • 最新 – 处理已添加到流中的新记录。

    • 时间范围 – 处理流中的所有记录。

    在处理任何现有记录后,函数将继续处理新记录。

  • 已启用 – 禁用事件源可停止处理记录。Lambda 将跟踪已处理的最后一条记录,并在重新启用后从停止位置重新开始处理。

之后,要管理事件源配置,请在设计器中选择触发器。

执行角色权限

Lambda 需要以下权限才能管理与您的 DynamoDB 流 流相关的资源。将这些权限添加到您的函数的执行角色中。

AWSLambdaDynamoDBExecutionRole 托管策略包含这些权限。有关更多信息,请参阅 AWS Lambda 执行角色