코드형 인프라를 사용하여 Lambda 지속성 함수 배포
AWS CloudFormation, AWS CDK, AWS Serverless Application Model, Terraform과 같은 코드형 인프라(IaC) 도구를 사용하여 Lambda 지속성 함수를 배포할 수 있습니다. 이러한 도구를 사용하면 코드에서 함수, 실행 역할 및 권한을 정의하여 배포를 반복하고 버전을 관리할 수 있습니다.
3가지 도구 모두에서 다음을 수행해야 합니다.
함수에서 지속성 실행 활성화
실행 역할에 체크포인트 권한 부여
버전 게시 또는 별칭 생성(지속성 함수에는 정규화된 ARN 필요)
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 도구입니다. 다음 예제에서는 Terraform에서 AWS 공급자 버전 6.25.0 이상을 사용하여 지속성 함수를 생성합니다.
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 권한이 포함되어 있습니다.
정규화된 ARN 사용
함수의 버전 또는 별칭을 생성합니다. 지속성 함수는 간접 호출에 정규화된 ARN(버전 또는 별칭 포함)이 필요합니다. AWS SAM에서 AutoPublishAlias를 사용하거나 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 함수를 배포하는 방법에 대한 자세한 내용은 다음 항목을 참조하세요.