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 Functions | Step Functions |
|---|---|---|
| 开发模型 | 命令式(代码优先) | 声明式(状态机) |
| 最佳适用场景 | 编排以 Lambda 为中心的业务逻辑 | 编排跨多个 AWS 服务 |
| 可观察性 | CloudWatch 日志 | 可视化图表与执行历史 |
何时使用哪种
当首选 Lambda 持久化函数时:
- 工作流主要是基于 Lambda 的业务逻辑。
- 您的团队倾向于代码优先的方法,并且具备强大的单元测试能力。
- 您需要长时间运行、可暂停/恢复的行为,而无需构建完整的状态机。
- 不需要可视化工作流设计器或大量的服务集成。
当首选 Step Functions 时:
- 工作流编排多个 AWS 服务或外部系统。
- 可视化可观察性和低代码配置很重要。
- 您有复杂的分支、人为介入步骤或高并发编排。
- 您希望在编排(状态机)和实现(Lambda/其他服务)之间保持清晰的分离。