コードとしてのインフレストラクチャを使用して Lambda の耐久性のある関数をデプロイする
AWS CloudFormation、AWS CDK、AWS Serverless Application Model などの Infrastructure as Code (IaC) ツールを使用して Lambda の耐久性のある関数はデプロイできます。これらのツールを使用するとコードで関数、実行ロール、アクセス許可を定義し、デプロイを反復可能でバージョン管理できます。
3 つのツールはすべて以下の内容が必要です。
関数に耐久性のある実行を有効にする
実行ロールにチェックポイントのアクセス許可を付与する
バージョンを発行するか、エイリアスを作成する (耐久性のある関数には修飾 ARN が必要)
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/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
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: 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 (バージョンまたはエイリアス付) が必要です。AWS SAM で AutoPublishAlias を使用するか、CloudFormation および AWS CDK で明示的なバージョンを作成します。
パッケージの依存関係
デプロイパッケージに耐久性のある実行 SDK を含めます。Node.js の場合、@aws/durable-execution-sdk-js をインストールします。Python の場合、aws-durable-execution-sdk-python をインストールします。
次のステップ
耐久性のある関数をデプロイした後
-
修飾 ARN (バージョンまたはエイリアス) を使用して関数をテストする
-
[耐久性のある実行] タブの Lambda コンソールで実行の進行状況をモニタリングする
-
AWS CloudTrail データイベントでチェックポイントオペレーションを表示する
-
CloudWatch Logs を表示して、関数の出力と再生動作を確認する
IaC ツールを使用して Lambda 関数のデプロイの詳細については、以下を参照してください。