設定 Lambda 耐用函數 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Lambda 耐用函數

若要為 Lambda 函數啟用持久性執行,您需要設定特定設定,以控制函數的執行時間、保留狀態資料的時間,以及需要哪些許可。

啟用持久性執行

若要為 Lambda 函數啟用持久性執行,請在函數組態DurableConfig中設定 。此設定控制執行逾時、狀態保留和版本控制行為。

AWS CLI
aws lambda update-function-configuration \ --function-name my-durable-function \ --durable-config '{ "ExecutionTimeout": 3600, "RetentionPeriodInDays": 30, "AllowInvokeLatest": true }'
CloudFormation
Resources: MyDurableFunction: Type: AWS::Lambda::Function Properties: FunctionName: my-durable-function Runtime: nodejs18.x Handler: index.handler Code: ZipFile: | // Your durable function code DurableConfig: ExecutionTimeout: 3600 RetentionPeriodInDays: 30 AllowInvokeLatest: true

組態參數:

  • ExecutionTimeout - 最長執行時間,以秒為單位 (一年最多 31,536,000 個)

  • RetentionPeriodInDays - 保留執行狀態和歷史記錄的時間長度 (1-365 天)

  • AllowInvokeLatest - 是否允許調用 $LATEST 版本以進行持久性執行

耐用函數的 IAM 許可

除了標準 Lambda 執行角色之外,耐用函數需要額外的 IAM 許可。函數的執行角色必須包含狀態管理和持久執行 APIs許可。

最低必要許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction", "lambda:ManageDurableState", "lambda:GetDurableExecution", "lambda:ListDurableExecutions" ], "Resource": "arn:aws:lambda:*:*:function:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }

CloudFormation 執行角色範例:

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: DurableFunctionPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - lambda:ManageDurableState - lambda:GetDurableExecution - lambda:ListDurableExecutions Resource: '*'

設定最佳實務

設定生產用途的耐用函數時,請遵循下列最佳實務:

  • 設定適當的執行逾時 - ExecutionTimeout 根據工作流程的預期持續時間上限來設定 。請勿設定不必要的長時間逾時,因為它們會影響成本和資源配置。

  • 平衡保留與儲存成本 - RetentionPeriodInDays根據您的偵錯和稽核需求進行設定。較長的保留期會增加儲存成本。

  • 生產環境中使用版本控制 - false 在生產環境中將 AllowInvokeLatest設定為 ,並使用特定函數版本或別名進行持久性執行。

  • 監控狀態大小 - 大型狀態物件會增加儲存成本,並可能影響效能。將狀態降至最低,並針對大型資料使用外部儲存。

  • 設定適當的記錄 - 啟用詳細記錄,以對長時間執行的工作流程進行故障診斷,但請注意日誌磁碟區和成本。

生產組態範例:

{ "ExecutionTimeout": 86400, "RetentionPeriodInDays": 7, "AllowInvokeLatest": false }