本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Infrastructure as Code 部署 Lambda 耐用函數
您可以使用 Infrastructure as Code (IaC) 工具部署 Lambda 耐用函數 AWS CloudFormation,例如 AWS CDK AWS Serverless Application Model, 或 Terraform。這些工具可讓您在程式碼中定義函數、執行角色和許可,讓部署可重複且受版本控制。
這三個工具都需要您:
在函數上啟用持久性執行
將檢查點許可授予執行角色
發佈版本或建立別名 (持久性函數需要合格的 ARNs)
ZIP 中的耐用函數
AWS CloudFormation
使用 在範本中 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/AWSLambdaBasicDurableExecutionRolePolicy 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: 3600 RetentionPeriodInDays: 7 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
AWS CDK
AWS CDK 可讓您使用程式設計語言定義基礎設施。下列範例示範如何使用 TypeScript 和 Python 建立耐用的函數。
部署 CDK 堆疊
cdk deploy
AWS Serverless Application Model
AWS SAM 簡化無伺服器應用程式的 CloudFormation 範本。下列範本使用 建立耐久的 函數 AWS 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: 3600 RetentionPeriodInDays: 7 Policies: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy 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
Terraform
Terraform 是支援 AWS 資源的熱門開放原始碼 IaC 工具。下列範例使用 AWS 提供者版本 6.25.0 或更新版本,使用 Terraform 建立耐久的函數。
terraform { required_version = ">= 1.0" required_providers { aws = { source = "hashicorp/aws" version = ">= 6.25.0" } } } provider "aws" { region = "us-east-2" } # IAM Role for Lambda Function resource "aws_iam_role" "lambda_role" { name = "durable-function-role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "lambda.amazonaws.com" } }] }) } # Attach durable execution policy for checkpoint operations resource "aws_iam_role_policy_attachment" "lambda_durable" { policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy" role = aws_iam_role.lambda_role.name } # Lambda Function with Durable Execution enabled resource "aws_lambda_function" "durable_function" { filename = "function.zip" function_name = "myDurableFunction" role = aws_iam_role.lambda_role.arn handler = "index.handler" runtime = "nodejs22.x" timeout = 30 memory_size = 512 durable_config { execution_timeout = 900 retention_period = 7 } } # Publish a version resource "aws_lambda_alias" "prod" { name = "prod" function_name = aws_lambda_function.durable_function.function_name function_version = aws_lambda_function.durable_function.version } output "function_arn" { description = "ARN of the Lambda function" value = aws_lambda_function.durable_function.arn } output "alias_arn" { description = "ARN of the function alias (use this for invocations)" value = aws_lambda_alias.prod.arn }
使用 Terraform 部署
terraform init terraform plan terraform apply
注意
Lambda 耐久函數的 Terraform 支援需要 AWS 提供者版本 6.25.0 或更新版本。如果您使用的是舊版,請更新您的提供者版本。
來自 OCI 容器映像的耐用函數
您也可以根據容器映像建立耐久函數。如需如何建置容器映像的指示,請參閱耐用函數支援的執行時間。
AWS CDK
AWS CDK 可讓您使用程式設計語言定義基礎設施。下列範例示範如何從容器映像使用 TypeScript 建立耐用的函數。
import * as cdk from 'aws-cdk-lib'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Construct } from 'constructs'; export class DurableFunctionStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Create the durable function const durableFunction = new lambda.DockerImageFunction(this, 'DurableFunction', { code: lambda.DockerImageCode.fromImageAsset('./lambda', { platform: cdk.aws_ecr_assets.Platform.LINUX_AMD64, }), functionName: 'myDurableFunction', memorySize: 512, timeout: cdk.Duration.seconds(30), durableConfig: { executionTimeout: cdk.Duration.hours(1), retentionPeriod: cdk.Duration.days(30) }, }); // Create version and alias const version = durableFunction.currentVersion; const alias = new lambda.Alias(this, 'ProdAlias', { aliasName: 'prod', version: version, }); // Output the alias ARN new cdk.CfnOutput(this, 'FunctionAliasArn', { value: alias.functionArn, description: 'Use this ARN to invoke the durable function', }); } }
部署 CDK 堆疊
cdk deploy
AWS Serverless Application Model
AWS SAM 簡化無伺服器應用程式的 CloudFormation 範本。下列範本使用 建立耐久的 函數 AWS 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 PackageType: Image ImageUri: ./src DurableConfig: ExecutionTimeout: 3600 RetentionPeriodInDays: 7 Policies: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy AutoPublishAlias: prod Metadata: DockerTag: latest DockerContext: ./src Dockerfile: Dockerfile 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 工具,請遵循這些模式以取得耐用的函數:
啟用持久性執行
在函數上設定 DurableConfig 屬性以啟用持久性執行。此屬性僅在建立函數時可用。您無法在現有函數上啟用持久性執行。
授予檢查點許可
將 AWSLambdaBasicDurableExecutionRolePolicy受管政策連接至執行角色。此政策包含必要的 lambda:CheckpointDurableExecutions和 lambda:GetDurableExecutionState許可。
使用合格的 ARNs
為您的函數建立版本或別名。耐用的函數需要合格的 ARNs(具有版本或別名) 才能叫用。在 AutoPublishAlias中使用 AWS SAM 或在 CloudFormation AWS CDK和 Terraform 中建立明確版本。
套件相依性
在您的部署套件中包含耐用的執行 SDK。對於 Node.js,安裝 @aws/durable-execution-sdk-js。針對 Python,安裝 aws-durable-execution-sdk-python。
後續步驟
部署您的耐用函數之後:
-
使用合格的 ARN (版本或別名) 測試您的函數
-
在持久性執行索引標籤下的 Lambda 主控台中監控執行進度
-
檢視 AWS CloudTrail 資料事件中的檢查點操作
-
檢閱 CloudWatch Logs 以取得函數輸出和重播行為
如需使用 IaC 工具部署 Lambda 函數的詳細資訊,請參閱: