

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

# 設定 Lambda 耐用函數
<a name="durable-configuration"></a>

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

## 啟用持久性執行
<a name="durable-config-settings"></a>

若要為 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` - 是否允許調用 \$1LATEST 版本以進行持久性執行

## 耐用函數的 IAM 許可
<a name="durable-iam-permissions"></a>

除了標準 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: '*'
```

## 設定最佳實務
<a name="durable-config-best-practices"></a>

設定生產用途的耐用函數時，請遵循下列最佳實務：
+ **設定適當的執行逾時 **- `ExecutionTimeout` 根據工作流程的預期持續時間上限來設定 。請勿設定不必要的長時間逾時，因為它們會影響成本和資源配置。
+ **平衡保留與儲存成本** - `RetentionPeriodInDays`根據您的偵錯和稽核需求進行設定。較長的保留期會增加儲存成本。
+ 在**生產環境中使用版本控制** - `false` 在生產環境中將 `AllowInvokeLatest`設定為 ，並使用特定函數版本或別名進行持久性執行。
+ **監控狀態大小** - 大型狀態物件會增加儲存成本，並可能影響效能。將狀態降至最低，並針對大型資料使用外部儲存。
+ **設定適當的記錄** - 啟用詳細記錄，以對長時間執行的工作流程進行故障診斷，但請注意日誌磁碟區和成本。

**生產組態範例：**

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