

# 将 DynamoDB Streams 与 Lambda 配合使用的最佳实践
<a name="Streams.Lambda.BestPracticesWithDynamoDB"></a>

AWS Lambda 函数在*容器*中运行，这是与其他函数隔离的执行环境。在您首次运行某个函数时，AWS Lambda 创建新容器并开始执行该函数的代码。

Lambda 函数具有对每个调用执行一次的*处理程序*。该处理程序包含函数的主业务逻辑。例如，显示在 [第 4 步：创建并测试一个 Lambda 函数](Streams.Lambda.Tutorial.md#Streams.Lambda.Tutorial.LambdaFunction) 中的 Lambda 函数具有可处理 DynamoDB 流中记录的处理程序。

您也可以提供仅运行一次的初始化代码，在创建容器之后，但在 AWS Lambda 首次执行处理程序之前运行。[第 4 步：创建并测试一个 Lambda 函数](Streams.Lambda.Tutorial.md#Streams.Lambda.Tutorial.LambdaFunction) 中显示的 Lambda 函数具有导入适用于 Node.js 中的 JavaScript 的 SDK，然后为 Amazon SNS 创建客户端的初始化代码。这些对象只应在处理程序外部定义一次。

执行函数之后，AWS Lambda 可选择为后续的函数调用重用容器。在这种情况下，您的函数处理程序可能能够重用您在初始化代码中定义的资源。（请注意，您无法控制 AWS Lambda 保留容器的时间长度，也根本无法控制是否会重用容器。）

对于使用 AWS Lambda 的 DynamoDB 触发器，我们建议：
+ AWS 服务客户端应该在初始化代码而非处理程序中实例化。这样可允许 AWS Lambda 在容器的整个生命周期中重用现有连接。
+ 通常而言，您无需明确管理连接或实施连接池，因为 AWS Lambda 将为您管理它。

DynamoDB 流的 Lambda 使用者不能保证只传输一次，并且可能导致偶尔出现重复。确保您的 Lambda 函数代码是幂等的，以防止由于重复处理而出现意外问题。

有关更多信息，请参阅 *AWS Lambda 开发人员指南*中的[使用 AWS Lambda 函数的最佳实践](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)。