Terapkan fungsi Lambda yang tahan lama dengan Infrastruktur sebagai Kode - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terapkan fungsi Lambda yang tahan lama dengan Infrastruktur sebagai Kode

Anda dapat menerapkan fungsi tahan lama Lambda menggunakan alat Infrastructure as Code (IAc) AWS CloudFormation seperti AWS CDK,, atau. AWS Serverless Application Model Alat ini memungkinkan Anda menentukan fungsi, peran eksekusi, dan izin dalam kode, membuat penerapan dapat diulang dan dikontrol versi.

Ketiga alat mengharuskan Anda untuk:

  • Aktifkan eksekusi tahan lama pada fungsi

  • Berikan izin pos pemeriksaan untuk peran eksekusi

  • Publikasikan versi atau buat alias (fungsi tahan lama membutuhkan kualifikasi ARNs)

AWS CloudFormation

Gunakan CloudFormation untuk menentukan fungsi tahan lama Anda dalam template. Contoh berikut membuat fungsi tahan lama dengan izin yang diperlukan.

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

Untuk menyebarkan template

aws cloudformation deploy \ --template-file template.yaml \ --stack-name my-durable-function-stack \ --capabilities CAPABILITY_IAM

AWS CDK

AWS CDK memungkinkan Anda menentukan infrastruktur menggunakan bahasa pemrograman. Contoh berikut menunjukkan cara membuat fungsi tahan lama menggunakan TypeScript dan Python.

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.Function(this, 'DurableFunction', { runtime: lambda.Runtime.NODEJS_22_X, handler: 'index.handler', code: lambda.Code.fromAsset('lambda'), functionName: 'myDurableFunction', durableConfig: { executionTimeout: Duration.hours(1), retentionPeriod: Duration.days(30) }, }); // Add checkpoint permissions durableFunction.addToRolePolicy(new iam.PolicyStatement({ actions: [ 'lambda:CheckpointDurableExecutions', 'lambda:GetDurableExecutionState', ], resources: [durableFunction.functionArn], })); // 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', }); } }
Python
from aws_cdk import ( Stack, aws_lambda as lambda_, aws_iam as iam, CfnOutput, ) from constructs import Construct class DurableFunctionStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) # Create the durable function durable_function = lambda_.Function( self, 'DurableFunction', runtime=lambda_.Runtime.NODEJS_22_X, handler='index.handler', code=lambda_.Code.from_asset('lambda'), function_name='myDurableFunction', durable_execution={execution_timeout: Duration.hours(1), retention_period: Duration.days(30)} ) # Add checkpoint permissions durable_function.add_to_role_policy(iam.PolicyStatement( actions=[ 'lambda:CheckpointDurableExecutions', 'lambda:GetDurableExecutionState', ], resources=[durable_function.function_arn] )) # Create version and alias version = durable_function.current_version alias = lambda_.Alias( self, 'ProdAlias', alias_name='prod', version=version ) # Output the alias ARN CfnOutput( self, 'FunctionAliasArn', value=alias.function_arn, description='Use this ARN to invoke the durable function' )

Untuk menyebarkan tumpukan CDK

cdk deploy

AWS Serverless Application Model

AWS SAM menyederhanakan CloudFormation template untuk aplikasi tanpa server. Template berikut menciptakan fungsi yang tahan lama dengan 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

Untuk menyebarkan template SAM

sam build sam deploy --guided

Pola konfigurasi umum

Terlepas dari alat IAc mana yang Anda gunakan, ikuti pola ini untuk fungsi yang tahan lama:

Aktifkan eksekusi yang tahan lama

Atur DurableExecution.Enabled properti ketrue. Properti ini hanya tersedia saat membuat fungsi—Anda tidak dapat mengaktifkan eksekusi tahan lama pada fungsi yang ada.

Berikan izin pos pemeriksaan

Tambahkan lambda:CheckpointDurableExecutions dan lambda:GetDurableExecutionState ke peran eksekusi. Cakupan izin ini ke fungsi tertentu ARN.

Gunakan yang memenuhi syarat ARNs

Buat versi atau alias untuk fungsi Anda. Fungsi tahan lama membutuhkan kualifikasi ARNs (dengan versi atau alias) untuk pemanggilan. Gunakan AutoPublishAlias dalam AWS SAM atau buat versi eksplisit di CloudFormation dan AWS CDK.

Package dependensi

Sertakan SDK eksekusi tahan lama dalam paket penerapan Anda. Untuk Node.js, instal@aws/durable-execution-sdk-js. Untuk Python, instal. aws-durable-execution-sdk-python

Langkah selanjutnya

Setelah menerapkan fungsi tahan lama Anda:

  • Uji fungsi Anda menggunakan ARN yang memenuhi syarat (versi atau alias)

  • Pantau kemajuan eksekusi di konsol Lambda di bawah tab Eksekusi tahan lama

  • Lihat operasi pos pemeriksaan dalam peristiwa AWS CloudTrail data

  • Tinjau CloudWatch Log untuk output fungsi dan perilaku pemutaran ulang

Untuk informasi selengkapnya tentang penerapan fungsi Lambda dengan alat IAc, lihat: