コードとしてのインフレストラクチャを使用して Lambda の耐久性のある関数をデプロイする
AWS CloudFormation、AWS CDK、AWS Serverless Application Model、Terraform などの Infrastructure as Code (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 ツールです。次の例では、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 アクセス許可が含まれます。
修飾 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 関数のデプロイの詳細については、以下を参照してください。