关于 aws-lambda-durable-functions
此技能用于构建和审查采用持久执行的多步骤 AWS Lambda 应用与 AI 工作流,提供 TypeScript 和 Python 模式、重放约束、测试指导、部署参考及故障排查;可选用 AWS MCP 服务。
主要功能
- 01用 TypeScript 和 Python 实现持久处理函数
- 02遵循重放与确定性规则
- 03使用步骤、等待、回调和并发
- 04测试重放行为与执行过程
- 05检查 IAM 和数据处理要求
适用场景
- 01构建长时间运行的多步骤 Lambda 工作流
- 02检查代码中的重放相关故障
- 03在本地或云端测试持久函数
- 04诊断停滞或失败的执行
MCP 相关
此技能适合与 AWS MCP 服务搭配使用,但并非必需。AWS 交互使用标准 AWS CLI 命令和已配置的 AWS 凭证。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aws/ agent-toolkit-for-aws --skill aws-lambda-durable-functions安装后在 Claude Code 中输入/aws-lambda-durable-functions确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-error-handling.mdadvanced-patterns.mdconcurrent-operations.mddeployment-iac.mderror-handling.mdgetting-started.mdreplay-model-rules.mdstep-operations.mdtesting-patterns.mdtroubleshooting-executions.mdwait-operations.md详细介绍
AWS Lambda 持久函数
构建具有韧性的多步骤应用和 AI 工作流,最长可运行 1 年,并在中断后仍能可靠地继续执行。
最适合搭配 AWS MCP server 使用,但并非必需。此技能中的所有 AWS 交互都使用标准 AWS CLI 命令,因此在已配置 AWS 凭证的任何环境中均可使用。
关键规则
编写代码前请先阅读以下内容。每条规则都是一项约束,违反后会导致函数在不报错的情况下失效。
- 必须在创建函数时启用持久执行,之后无法补加。 创建新的 Lambda 函数时必须启用持久执行。请将逻辑迁移到新函数中;不要尝试为现有函数安装 SDK 并包装其处理程序,以为这样就能正常工作。
- 调用持久函数时必须使用限定 ARN——指定版本、别名或字面后缀
$LATEST。使用未限定的函数名称会导致失败。示例请参阅下文的 调用要求 部分。 - 持久操作不能嵌套。 不可在另一个步骤的回调中调用
context.step()、context.wait()或context.invoke()。请改用context.runInChildContext()对操作进行分组。 - 所有非确定性代码都必须在步骤内运行。 在步骤之外调用
Date.now()、Math.random()、生成 UUID、调用 API 和查询数据库,重放时会产生不同的值并破坏执行状态。 - 重放时闭包中的变更会丢失——请使用步骤的返回值。
- 步骤外的副作用会重复发生——请使用
context.logger(可感知重放)。
何时加载参考文件
根据用户正在处理的内容加载相应的参考文件:
- 入门、基本设置、示例、ESLint 或 Jest 设置 -> 请参阅 getting-started.md
- 了解重放模型、确定性或非确定性错误 -> 请参阅 replay-model-rules.md
- 创建步骤、原子操作或重试逻辑 -> 请参阅 step-operations.md
- 等待、延迟、回调、外部系统或轮询 -> 请参阅 wait-operations.md
- 并行执行、映射操作、批处理或并发 -> 请参阅 concurrent-operations.md
- 错误处理、重试策略、Saga 模式或补偿事务 -> 请参阅 error-handling.md
- 高级错误处理、超时处理、熔断器或条件重试 -> 请参阅 advanced-error-handling.md
- 测试、本地测试、云端测试、测试运行器或不稳定测试 -> 请参阅 testing-patterns.md
- 部署、CloudFormation、CDK、SAM、日志组、部署或基础设施 -> 请参阅 deployment-iac.md
- 高级模式、GenAI Agent、完成策略、步骤语义或自定义序列化 -> 请参阅 advanced-patterns.md
- 故障排查、卡住的执行、失败的执行、调试执行 ID、执行历史记录、执行错误、执行为何失败、执行超时、未收到回调、诊断执行或执行根本原因 -> 请参阅 troubleshooting-executions.md
快速参考
基本处理程序模式
TypeScript:
import { withDurableExecution, DurableContext } from '@aws/durable-execution-sdk-js';
export const handler = withDurableExecution(async (event, context: DurableContext) => {
const result = await context.step('process', async () => processData(event));
return result;
});
Python:
from aws_durable_execution_sdk_python import durable_execution, DurableContext
@durable_execution
def handler(event: dict, context: DurableContext) -> dict:
result = context.step(lambda _: process_data(event), name='process')
return result
Python API 差异
Python SDK 与 TypeScript 在几个关键方面有所不同:
- 步骤:使用
@durable_step装饰器 +context.step(my_step(args)),或内联使用context.step(lambda _: ..., name='...')。优先使用装饰器,以自动命名步骤。 - 等待:
context.wait(duration=Duration.from_seconds(n), name='...') - 异常:
ExecutionError(永久性)、InvocationError(暂时性)、CallbackError(回调失败) - 测试:直接使用
DurableFunctionTestRunner类——使用处理程序实例化,使用上下文管理器,并调用run(input=...)
调用要求
持久化函数必须使用限定 ARN(版本、别名或 $LATEST):
# Valid
aws lambda invoke --function-name my-function:1 output.json
aws lambda invoke --function-name my-function:live output.json
# Invalid - will fail
aws lambda invoke --function-name my-function output.json
IAM 权限
Lambda 执行角色必须附加托管策略 AWSLambdaBasicDurableExecutionRolePolicy。其中包括:
lambda:CheckpointDurableExecution- 持久化执行状态lambda:GetDurableExecutionState- 获取执行状态- CloudWatch Logs 权限
以下操作还需要额外权限:
- 持久化调用:对目标函数 ARN 具有
lambda:InvokeFunction权限 - 外部回调:系统需要
lambda:SendDurableExecutionCallbackSuccess和lambda:SendDurableExecutionCallbackFailure权限
验证指南
编写或审查持久化函数代码时,始终检查是否违反以下重放模型规则:
- 步骤外的非确定性代码:
Date.now()、Math.random()、UUID 生成、API 调用和数据库查询都必须位于步骤内 - 步骤函数中的嵌套持久化操作:不能在步骤函数内调用
context.step()、context.wait()或context.invoke()——请改用context.runInChildContext() - 不会持久化的闭包变更:步骤内变更的变量不会在重放时保留——请改为从步骤返回值
- 重放时会重复执行的步骤外副作用:请使用
context.logger进行日志记录(它可感知重放,并会自动去重)
为持久化函数实现或修改测试时,始终确认:
- 所有操作都有描述性名称
- 测试通过名称获取操作,绝不通过索引获取
- 使用多次调用测试重放行为
- 使用
LocalDurableTestRunner进行本地测试
安全注意事项
- 检查点数据加密:执行状态会自动持久化。请对关联的 CloudWatch Log Groups 启用 KMS 加密,以保护静态存储的检查点数据。
- 步骤结果中的敏感数据:步骤返回值会被检查点记录并持久化。不要从步骤返回机密、原始凭证或 PII——请将敏感数据存储在 Secrets Manager 或 SSM Parameter Store 中,并改为返回引用。
- 输入验证:在将事件负载传递给步骤之前,请在处理程序入口点验证并清理数据。
- 凭证管理:请在步骤内从 AWS Secrets Manager 或 SSM Parameter Store 获取机密。
- 回调负载验证:通过
waitForCallback接收的数据来自外部系统——请在处理前进行验证和清理。 - 日志记录:在非开发环境中避免使用
DEBUG日志级别,因为它可能会暴露步骤结果和执行状态。请使用 KMS 启用 CloudWatch Logs 加密。
资源
评论
支持 Markdown