配置 Lambda 持久性函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置 Lambda 持久性函数

要为您的 Lambda 函数启用持久执行,您需要配置特定的设置项,以控制您的函数运行的时长、状态数据的保留时长,以及所需的权限。

启用持久执行

要为您的 Lambda 函数启用持久执行,请在您的函数配置中配置 DurableConfig。此设置将控制执行超时、状态保留和版本控制行为。

Amazon CLI
aws lambda update-function-configuration \ --function-name my-durable-function \ --durable-config '{ "ExecutionTimeout": 3600, "RetentionPeriodInDays": 30, "AllowInvokeLatest": true }'
CloudFormation
Resources: MyDurableFunction: Type: AWS::Lambda::Function Properties: FunctionName: my-durable-function Runtime: nodejs18.x Handler: index.handler Code: ZipFile: | // Your durable function code DurableConfig: ExecutionTimeout: 3600 RetentionPeriodInDays: 30 AllowInvokeLatest: true

配置参数:

  • ExecutionTimeout:最长执行时间,以秒为单位(一年最多 31536000 秒)

  • RetentionPeriodInDays:将执行状态和历史记录保留的时长(1-365 天)

  • AllowInvokeLatest:是否允许调用 $LATEST 版本进行持久执行

持久性函数的 IAM 权限

除了标准 Lambda 执行角色之外,持久性函数还需要其他 IAM 权限。您的函数的执行角色必须包括状态管理和持久执行 API 的权限。

所需的最低权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction", "lambda:ManageDurableState", "lambda:GetDurableExecution", "lambda:ListDurableExecutions" ], "Resource": "arn:aws:lambda:*:*:function:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }

CloudFormation 执行角色示例:

DurableFunctionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Policies: - PolicyName: DurableFunctionPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - lambda:ManageDurableState - lambda:GetDurableExecution - lambda:ListDurableExecutions Resource: '*'

配置最佳实践

在配置持久性函数以供生产使用时,请遵循以下最佳实践:

  • 设置适当的执行超时:根据工作流程的最大预期持续时间配置 ExecutionTimeout。请勿设置过长的超时时间,因为这会影响成本和资源分配。

  • 平衡保留期和存储成本:根据您的调试和审计要求设置 RetentionPeriodInDays。延长保留期会增加存储成本。

  • 在生产环境中使用版本控制:在生产环境中将 AllowInvokeLatest 设置为 false,并使用特定的函数版本或别名进行持久执行。

  • 监控状态大小:大型状态对象会增加存储成本并可能影响性能。保持状态信息简洁,并将大量数据存储在外部存储中。

  • 配置适当的日志记录:启用详细日志记录,以便对长时间运行的工作流程进行故障排除,但要注意日志量和成本。

生产配置示例:

{ "ExecutionTimeout": 86400, "RetentionPeriodInDays": 7, "AllowInvokeLatest": false }