

# 使用 Lambda 处理 DynamoDB 记录
<a name="services-dynamodb-eventsourcemapping"></a>

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

您可以配置事件源映射来处理来自不同 AWS 账户中的流的记录。要了解更多信息，请参阅[创建跨账户事件源映射](#services-dynamodb-eventsourcemapping-cross-account)。

要将函数配置为从 DynamoDB Streams 中读取，请将 [AWSLambdaDynamoDBExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaDynamoDBExecutionRole.html) AWS 托管策略附加到执行角色，然后创建 **DynamoDB** 触发器。

**要添加权限并创建触发器**

1. 打开 Lamba 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面。

1. 选择一个函数的名称。

1. 选择 **Configuration**（配置）选项卡，然后选择 **Permissions**（权限）。

1. 在**角色名称**下，选择至执行角色的链接。此角色将在 IAM 控制台中打开角色。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/execution-role.png)

1. 选择**添加权限**，然后选择**附加策略**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/attach-policies.png)

1. 在搜索字段中输入 `AWSLambdaDynamoDBExecutionRole`。向执行角色添加此策略。这是一项 AWS 托管策略，其中包含您的函数从 DynamoDB 流中读取所需的权限。有关此策略的更多信息，请参阅《AWS 托管式策略参考》**中的 [AWSLambdaDynamoDBExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaDynamoDBExecutionRole.html)。

1. 在 Lambda 控制台中返回您的函数。在 **Function overview**（函数概览）下，选择 **Add trigger**（添加触发器）。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/add-trigger.png)

1. 选择触发器类型。

1. 配置必填选项，然后选择 **Add**（添加）。

Lambda 支持 DynamoDB 事件源的以下选项：

**事件源选项**
+ **DynamoDB table**（DynamoDB 表）– 要从中读取记录的 DynamoDB 表。
+ **Batch size**（批处理大小）– 每个批次中要发送到函数的记录数，最高为 10000。Lambda 通过单个调用将批处理中的所有记录传递给函数，前提是事件的总大小未超出同步调用的[有效载荷限制](gettingstarted-limits.md)（6 MB）。
+ **Batch window**（批处理时段）– 指定在调用函数之前收集记录的最长时间（以秒为单位）。
+ **Starting position**（开始位置）– 仅处理新记录或所有现有记录。
  + **Latest**（最新）– 处理已添加到流中的新记录。
  + **Trim horizon**（时间范围）– 处理流中的所有记录。

  在处理任何现有记录后，函数将继续处理新记录。
+ **失败时的目标** – 无法处理的记录的标准 SQS 队列或标准 SNS 主题。当 Lambda 因为某批记录太旧或已用尽所有重试而将其丢弃时，Lambda 会将有关该批处理的详细信息发送到该队列或主题。
+ **Retry attempts**（重试次数）– 函数返回错误时 Lambda 重试的最大次数。这不适用于批处理未到达函数的服务错误或限制。
+ **Maximum age of record**（记录的最长时限）– Lambda 发送到您的函数的记录的最长期限。
+ **Split batch on error**（出现错误时拆分批）– 当函数返回错误时，在重试之前将批次拆分为两批。原始批量大小设置会保持不变。
+ **Concurrent batches per shard**（每个分片的并发批处理数）– 同时处理来自同一个分片的多个批处理。
+ **Enabled**（已启用）– 设置为 true 可启用事件源映射。设置为 false 可停止处理记录。Lambda 会跟踪已处理的最后一条记录，并在重新启用映射后从停止位置重新开始处理。

**注意**  
对于 Lambda 作为 DynamoDB 触发器的一部分而调用的 GetRecords API 调用，您无需付费。

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

## 创建跨账户事件源映射
<a name="services-dynamodb-eventsourcemapping-cross-account"></a>

Amazon DynamoDB 现在支持[基于资源的策略](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)。利用此功能，您可以使用另一个账户中的 Lambda 函数处理来自一个 AWS 账户的 DynamoDB 流中的数据。

要使用其他 AWS 账户中的 DynamoDB 流为您的 Lambda 函数创建事件源映射，您必须使用基于资源的策略配置该流，以向您的 Lambda 函数授予读取相关记录的权限。要了解如何配置流以实现跨账户访问，请参阅《Amazon DynamoDB 开发人员指南》**中的[与跨账户 Lambda 函数共享访问权限](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-cross-account-access.html#rbac-analyze-cross-account-lambda-access)。

使用基于资源的策略配置流以向 Lambda 函数授予所需权限后，请使用跨账户流 ARN 创建事件源映射。您可以在跨账户 DynamoDB 控制台中表的**导出和流**选项卡下找到流 ARN。

使用 Lambda 控制台时，请将流 ARN 直接粘贴到事件源映射创建页面的 DynamoDB 表输入字段中。

 **注意：**不支持跨区域触发器。