如何让我的 Lambda 函数保持幂等性?

1 分钟阅读
0

我想要让我的 AWS Lambda 函数保持幂等性,以防止我的应用程序中出现不一致和数据丢失。

简短描述

要使您的 AWS Lambda 函数保持幂等性,您必须设计函数逻辑以正确处理重复事件。该函数的代码必须正确验证输入事件并确定事件之前是否已处理过。应用程序的功能决定了编写代码的最佳方式。

幂等函数逻辑有助于减少以下问题:

  • 不必要的 API 调用
  • 代码处理时间
  • 数据不一致
  • 限制
  • 延迟

解决方法

下面的示例函数逻辑和最佳实践适用于大多数用例。

幂等 Lambda 函数逻辑示例

要使用幂等 Lambda 函数,请完成以下步骤:

  1. 提取输入事件的唯一属性值,例如交易或购买 ID。
  2. 使用条件表达式将幂等键放入您的 Amazon DynamoDB 表中。
  3. 对于记录属性,请执行以下操作:
    Status(状态)设置为 IN_PROGRESS
    对于 in_progress_expiry timestamp(in_progress_expiry 时间戳),选择 current timestamp in milliseconds + the number of milliseconds left before the execution times out(当前时间戳(以毫秒为单位)+ 执行超时前剩余的毫秒数)。对于 python,使用 context.get_remaining_time_in_millis
    **注意:**在 in_progress_expiry 中,Lambda 函数可以安全地重试逻辑。
    如果上一步中的 PutItem 返回 ConditionalCheckFailedException,则幂等键正在处理中。
    要使用带有 idempotent_expiryDynamoDB 生存时间 (TTL) 属性,请将该值的属性设置为将来的时间。
  4. 将键记录 status 更新为 COMPLETE
  5. 完成操作。

**注意:**当您在架构中添加 AWS 服务时,可能会产生额外费用。有关详细信息,请参阅 Amazon DynamoDB 定价AWS 定价

Lambda 函数幂等性最佳实践

遵循以下最佳实践:

  • 在开发应用程序之前计划幂等性特征。
  • 在您的 Lambda 代码处理重复事件时,确保该进程可以在不产生错误的情况下结束。
    **注意:**以错误结束的进程可能导致调用您的函数的服务进一步重试。
  • 配置 Lambda 函数超时设置,以便正确处理完整的运行时。
    **注意:**如果您使用单独的服务来保存数据和控制重复的事件,则可能需要对 HTTPS 端点进行 API 调用。对 HTTPS 端点的 API 调用所需的运行时可能会超过默认的 3 秒。
  • 请尽可能测试和优化函数。模拟真实场景和请求速率。
    **注意:**测试和优化幂等函数逻辑对于帮助防止出现潜在的超时、过长延迟或瓶颈至关重要。
  • 要存储会话数据,请使用 DynamoDB 等可以轻松扩展并提供高吞吐量的服务。

**注意:**当您对 Amazon Elastic Compute Cloud (Amazon EC2) 进行 API 调用时,可以使用 clientToken 参数。此参数可确保变异 API 请求只能成功完成其工作流一次,即使您使用同一 clientToken 发起多次重试。

相关信息

了解 Lambda 编程模型

使用控制台创建 Lambda 函数

使用幂等 API 确保重试安全

AWS 官方
AWS 官方已更新 8 个月前