使用基础设施即代码部署 Lambda 持久性函数
您可以使用基础设施即代码(IaC)工具(例如 Amazon CloudFormation、Amazon CDK 或 Amazon Serverless Application Model)部署 Lambda 持久性函数。这些工具允许您通过代码来定义函数、执行角色以及权限,从而使得部署过程可重复且能够进行版本控制。
这三种工具都要求您:
对函数启用持久执行
授予对执行角色的检查点权限
发布版本或创建别名(持久性函数需要限定的 ARN)
Amazon CloudFormation
使用 Amazon CloudFormation 在模板中定义您的持久性函数。以下示例创建了具有所需权限的持久性函数。
AWSTemplateFormatVersion: '2010-09-09' Description: Lambda durable function example Resources: 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: DurableExecutionPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - lambda:CheckpointDurableExecutions - lambda:GetDurableExecutionState Resource: !GetAtt DurableFunction.Arn DurableFunction: Type: AWS::Lambda::Function Properties: FunctionName: myDurableFunction Runtime: nodejs22.x Handler: index.handler Role: !GetAtt DurableFunctionRole.Arn Code: ZipFile: | // Your durable function code here export const handler = async (event, context) => { return { statusCode: 200 }; }; DurableConfig: ExecutionTimeout: 10 RetentionPeriodInDays: 1 DurableFunctionVersion: Type: AWS::Lambda::Version Properties: FunctionName: !Ref DurableFunction Description: Initial version DurableFunctionAlias: Type: AWS::Lambda::Alias Properties: FunctionName: !Ref DurableFunction FunctionVersion: !GetAtt DurableFunctionVersion.Version Name: prod Outputs: FunctionArn: Description: Durable function ARN Value: !GetAtt DurableFunction.Arn AliasArn: Description: Function alias ARN (use this for invocations) Value: !Ref DurableFunctionAlias
部署模板
aws cloudformation deploy \ --template-file template.yaml \ --stack-name my-durable-function-stack \ --capabilities CAPABILITY_IAM
Amazon CDK
Amazon CDK 使您能够使用编程语言定义基础设施。以下示例演示如何使用 TypeScript 和 Python 创建持久性函数。
要部署 CDK 堆栈
cdk deploy
Amazon Serverless Application Model
Amazon SAM 简化了无服务器应用程序的 Amazon CloudFormation 模板。以下模板使用 Amazon SAM 创建了一个持久性函数。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Lambda durable function with SAM Resources: DurableFunction: Type: AWS::Serverless::Function Properties: FunctionName: myDurableFunction Runtime: nodejs22.x Handler: index.handler CodeUri: ./src DurableConfig: ExecutionTimeout: 10 RetentionPeriodInDays: 1 Policies: - Version: '2012-10-17' Statement: - Effect: Allow Action: - lambda:CheckpointDurableExecutions - lambda:GetDurableExecutionState Resource: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${DurableFunction}' AutoPublishAlias: prod Outputs: FunctionArn: Description: Durable function ARN Value: !GetAtt DurableFunction.Arn AliasArn: Description: Function alias ARN (use this for invocations) Value: !Ref DurableFunction.Alias
要部署 SAM 模板
sam build sam deploy --guided
常见配置模式
无论您使用哪种 IaC 工具,都要遵循持久性函数的以下模式:
启用持久执行
将 DurableExecution.Enabled 属性设置为 true。此属性仅在创建函数时可用,您无法对现有函数启用持久执行。
授予检查点权限
将 lambda:CheckpointDurableExecutions 和 lambda:GetDurableExecutionState 添加到执行角色。将这些权限的范围限定为特定函数 ARN。
使用限定的 ARN
为您的函数创建版本或别名。持久性函数需要使用限定的 ARN(带有版本或别名)才能调用。在 Amazon SAM 中使用 AutoPublishAlias 或在 Amazon CloudFormation 和 Amazon CDK 中创建显式版本。
软件包依赖项
在您的部署包中包含持久执行 SDK。对于 Node.js,请安装 @aws/durable-execution-sdk-js。对于 Python,请安装 aws-durable-execution-sdk-python。
后续步骤
部署您的持久性函数后:
-
使用限定的 ARN(版本或别名)测试您的函数
-
在 Lambda 控制台的“持久执行”选项卡下监控执行进度
-
查看 Amazon CloudTrail 数据事件中的检查点操作
-
查看 CloudWatch Logs 以了解函数输出和重放行为
有关使用 IaC 工具部署 Lambda 函数的更多信息,请参阅: