

# Lambda 持久性函数的最佳实践
<a name="durable-best-practices"></a>

耐用函数使用基于重放的执行模型，该模型需要的编程做法与传统 Lambda 函数不同。有关如何编写和测试耐用工作流程代码的指导，请参阅《AWS 耐用执行 SDK 开发人员指南》中的[最佳实践](https://docs.aws.amazon.com/durable-execution/patterns/best-practices/)。

以下建议是部署、调用和监控 Lambda 耐用函数的最佳实践。

## 函数版本和别名
<a name="durable-versioning"></a>

通过使用版本号或别名来调用函数，以便将执行操作固定在特定的代码版本上。确保新的代码版本可以处理旧版本的状态。不要以中断重放的方式重命名步骤或更改其行为。如果在执行过程中重命名步骤或更改其行为，则这些执行可能无法继续或产生不正确的结果。这是因为运行时无法再将保存的状态与预期的步骤定义相匹配。

## 监控
<a name="durable-monitoring-best-practices"></a>

启用带有执行 ID 和步骤名称的结构化日志记录。设置 CloudWatch 警报，以了解错误率和执行持续时间。使用跟踪来识别瓶颈。有关详细指导，请参阅[监控和调试](durable-monitoring.md)。

## 错误处理
<a name="durable-error-handling-best-practices"></a>

除开为暂时性失败配置重试策略外，还可以在持久性函数上配置死信队列（DLQ）来捕获永久失败执行中的事件。当持久性执行在异步调用后达到终了状态（FAILED、STOPPED 或 TIMED\_OUT）时，Lambda 会将原始触发事件发送到 DLQ。这样，您可以检查、调试和根据需要重新处理失败的事件，而不会丢失它们。

要配置 DLQ，请将函数的 `DeadLetterConfig` 属性设置为某个 Amazon SQS 队列或 Amazon SNS 主题 ARN。有关更多信息，请参阅[死信队列](invocation-async-retain-records.md#invocation-dlq)。

请遵循以下有关持久性函数错误处理的最佳实践：
+ **为异步调用配置 DLQ**：异步调用耐久函数时务必附加死信队列。与标准 Lambda 函数不同，该服务不会在失败时自动重试持久执行。配置正确的 DLQ 会捕获导致执行永久失败的事件。确保 DLQ 拥有正确的权限和足够的容量来接收消息。
+ **在步骤中使用重试策略**：使用恰当的回退机制为暂时性失败配置显式重试策略。有关配置重试的指导，请参阅[持久性函数的重试](durable-execution-sdk-retries.md)。
+ **将 DLQ 与 EventBridge 通知结合使用**：使用 EventBridge 规则在出现 FAILED、STOPPED 和 TIMED\_OUT 状态变化时发出警报，以实时了解情况，并使用 DLQ 保留原始事件有效载荷以供日后分析或重新处理。
+ **监控 DLQ 深度**：根据 `ApproximateNumberOfMessagesVisible` 指标创建 CloudWatch 警报，以便您的 DLQ 在错误不断积累时检测到问题。

## 相关资源
<a name="durable-additional-resources"></a>
+ [AWS 耐用执行 SDK 开发人员指南](https://docs.aws.amazon.com/durable-execution/)
+ [监控 Lambda 耐用函数](durable-monitoring.md)
+ [Lambda 耐用函数的重试次数](durable-execution-sdk-retries.md)
+ [测试 Lambda 耐用函数](durable-testing.md)