Lambda 中的 Durable Functions

发布: (2026年1月15日 GMT+8 17:22)
5 min read
原文: Dev.to

Source: Dev.to

什么是 Durable Functions?

Durable Functions 让您能够直接在 AWS Lambda 中构建多步骤的应用程序和工作流。您可以在回调时暂停应用程序并稍后继续,同时仍然使用经过验证的 Lambda 平台。此功能已在 Reinvent 2025 上宣布。

它是如何工作的?

Durable Functions 为您管理状态、检查点和重试。工作流中的每一步都被视为独立的持久步骤,使系统能够:

  • 在重试时跳过已完成的步骤。
  • 使用内置的重试和指数退避来处理外部 API 调用。
  • 等待异步回调(例如来自 ERP 系统),而不会产生空闲计算成本。
  • 在继续之前暂停以等待人工批准。

Durable Functions 的使用案例

场景传统方法Durable Functions 优势
订单处理 – 预留库存 → 处理付款 → 创建发货需要自定义代码来跟踪哪些步骤成功;手动处理幂等性。自动检查点防止重复预留;重试透明处理。
外部 API 调用(例如,支付网关)手动实现重试、退避和错误处理。可为每个步骤配置的原生重试策略。
异步 ERP 集成轮询或长时间运行的 Lambda 调用浪费资源。在不为空闲时间付费的情况下等待回调。
人工介入必须构建自定义的暂停/恢复逻辑。内置等待人工批准后再继续。

如何创建 Durable Functions

Durable Functions 使用 Python 装饰器定义:

示例代码

from aws_durable_execution_sdk_python import (
    DurableContext,
    durable_execution,
    durable_step,
)
from aws_durable_execution_sdk_python.config import Duration

@durable_step
def validate_order(step_context, order_id):
    step_context.logger.info(f"Validating order {order_id}")
    return {"orderId": order_id, "status": "validated"}

@durable_step
def process_payment(step_context, order_id):
    step_context.logger.info(f"Processing payment for order {order_id}")
    return {"orderId": order_id, "status": "paid", "amount": 99.99}

@durable_step
def confirm_order(step_context, order_id):
    step_context.logger.info(f"Confirming order {order_id}")
    return {"orderId": order_id, "status": "confirmed"}

@durable_execution
def lambda_handler(event, context: DurableContext):
    order_id = event['orderId']

    # 步骤 1:验证订单
    validation_result = context.step(validate_order(order_id))

    # 步骤 2:处理付款
    payment_result = context.step(process_payment(order_id))

    # 模拟外部确认等待
    context.wait(Duration.from_seconds(10))

    # 步骤 3:确认订单
    confirmation_result = context.step(confirm_order(order_id))

    return {
        "orderId": order_id,
        "status": "completed",
        "steps": [validation_result, payment_result, confirmation_result]
    }

部署后,您可以在 Lambda 控制台的 Durable Executions 选项卡中查看执行情况。控制台会显示:

  • 步骤的输入、输出和日志。
  • 事件历史,包括任何等待或回调。

该 UI 与 Step Functions 控制台相似,但底层的建模和可观测性有所不同。

与 Step Functions 的比较

属性Durable FunctionsStep Functions
开发模型命令式(代码优先)声明式(状态机)
最佳适用场景编排以 Lambda 为中心的业务逻辑编排跨多个 AWS 服务
可观察性CloudWatch 日志可视化图表与执行历史

何时使用哪种

当首选 Lambda 持久化函数时:

  • 工作流主要是基于 Lambda 的业务逻辑。
  • 您的团队倾向于代码优先的方法,并且具备强大的单元测试能力。
  • 您需要长时间运行、可暂停/恢复的行为,而无需构建完整的状态机。
  • 不需要可视化工作流设计器或大量的服务集成。

当首选 Step Functions 时:

  • 工作流编排多个 AWS 服务或外部系统。
  • 可视化可观察性和低代码配置很重要。
  • 您有复杂的分支、人为介入步骤或高并发编排。
  • 您希望在编排(状态机)和实现(Lambda/其他服务)之间保持清晰的分离。
Back to Blog

相关文章

阅读更多 »