

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

# 使用 部署和叫用 Lambda 耐用函數 AWS CLI
<a name="durable-getting-started-cli"></a>

使用 AWS CLI 以使用命令建立和部署 Lambda 耐用函數。此方法可讓您直接控制部署程序的每個步驟。

## 先決條件
<a name="durable-cli-prerequisites"></a>
+ 安裝及設定 AWS CLI。如需說明，請參閱[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。
+ 使用函數程式碼和耐用的執行 SDK 建立部署套件。
+ 建立具有檢查點許可的 IAM 執行角色。

## 建立執行角色
<a name="durable-cli-create-role"></a>

建立具有基本 Lambda 執行和檢查點操作許可的 IAM 角色。

**建立執行角色**

1. 建立允許 Lambda 擔任角色的信任政策文件。將此儲存為 `trust-policy.json`：

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 建立角色：

   ```
   aws iam create-role \
     --role-name {{durable-function-role}} \
     --assume-role-policy-document file://trust-policy.json
   ```

1. 連接檢查點操作和基本執行的耐久執行政策：

   ```
   aws iam attach-role-policy \
     --role-name {{durable-function-role}} \
     --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy
   ```

`AWSLambdaBasicDurableExecutionRolePolicy` 受管政策包含檢查點操作 (`lambda:CheckpointDurableExecution` 和 `lambda:GetDurableExecutionState`) 和基本 Lambda 執行所需的許可。

## 建立耐用的 函數
<a name="durable-cli-create-function"></a>

使用 `--durable-config` 參數建立您的耐用函數。

**建立耐用的函數**

1. 將具有相依性的函數程式碼封裝至 .zip 檔案：

   ```
   zip -r function.zip index.mjs node_modules/
   ```
**注意**  
對於以 Java 為基礎的耐用函數，您需要將函數程式碼和相依性編譯為單一 .zip 檔案或 Java Archive (JAR) 檔案。如需詳細資訊，請參閱[使用 .zip 或 JAR 檔案封存部署 Java Lambda 函數](java-package.md)。

1. 建立已啟用持久性執行的函數：

   ```
   aws lambda create-function \
     --function-name {{myDurableFunction}} \
     --runtime nodejs22.x \
     --role {{arn:aws:iam::123456789012:role/durable-function-role}} \
     --handler index.handler \
     --zip-file fileb://function.zip \
     --durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'
   ```

**注意**  
您只能在建立函數時啟用持久性執行。您無法在現有函數上啟用它。

## 發佈版本
<a name="durable-cli-publish-version"></a>

雖然可以使用`$LATEST`版本限定詞叫用持久性函數，但您必須一律使用指向穩定版本的合格 ARN，以確保確定性執行程式碼。

```
aws lambda publish-version \
  --function-name {{myDurableFunction}} \
  --description "Initial version"
```

命令會傳回版本 ARN。請注意 ARN 結尾的版本編號 （例如 `:1`)。

或者，建立指向 版本的別名：

```
aws lambda create-alias \
  --function-name {{myDurableFunction}} \
  --name prod \
  --function-version 1
```

## 叫用耐久函數
<a name="durable-cli-invoke"></a>

使用合格的 ARN （版本或別名） 叫用您的耐用函數。

**注意**  
**等冪叫用：**若要防止重試失敗叫用時重複執行，您可以提供執行名稱，確保at-most-once。如需詳細資訊，請參閱[等冪性](durable-execution-idempotency.md)。

**同步調用**  
對於在 15 分鐘內完成的執行，請使用同步調用：

```
aws lambda invoke \
  --function-name {{myDurableFunction:1}} \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

或使用別名：

```
aws lambda invoke \
  --function-name {{myDurableFunction:prod}} \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

**非同步調用**  
對於長時間執行的執行，請使用非同步調用：

```
aws lambda invoke \
  --function-name {{myDurableFunction:prod}} \
  --invocation-type Event \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

使用非同步調用時，Lambda 會立即傳回 。函數會繼續在背景執行。

**注意**  
您可以在 主控台中使用 `$LATEST`進行原型設計和測試。對於生產工作負載，請使用發佈的版本或別名。

## 管理持久的執行
<a name="durable-cli-manage-executions"></a>

使用下列命令來管理和監控持久的函數執行。

**列出執行**  
列出耐用函數的所有執行：

```
aws lambda list-durable-executions-by-function \
  --function-name {{myDurableFunction}}
```

**取得執行詳細資訊**  
取得特定執行的詳細資訊：

```
aws lambda get-durable-execution \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

**取得執行歷史記錄**  
檢視執行的檢查點歷史記錄：

```
aws lambda get-durable-execution-history \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

**停止執行**  
停止執行中的耐久執行：

```
aws lambda stop-durable-execution \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

## 更新函數程式碼
<a name="durable-cli-update-function"></a>

更新您的耐用函數程式碼並發佈新版本：

**更新和發佈新版本**

1. 更新函數程式碼：

   ```
   aws lambda update-function-code \
     --function-name {{myDurableFunction}} \
     --zip-file fileb://function.zip
   ```

1. 等待更新完成：

   ```
   aws lambda wait function-updated \
     --function-name {{myDurableFunction}}
   ```

1. 發佈新版本：

   ```
   aws lambda publish-version \
     --function-name {{myDurableFunction}} \
     --description "Updated order processing logic"
   ```

1. 更新別名以指向新版本：

   ```
   aws lambda update-alias \
     --function-name {{myDurableFunction}} \
     --name prod \
     --function-version 2
   ```

**重要**  
執行中的執行會繼續使用其啟動的版本。新的調用使用更新的別名版本。

## 檢視函數日誌
<a name="durable-cli-view-logs"></a>

在 CloudWatch Logs 中檢視耐用函數的日誌：

```
aws logs tail /aws/lambda/myDurableFunction --follow
```

篩選特定執行的日誌：

```
aws logs filter-log-events \
  --log-group-name /aws/lambda/myDurableFunction \
  --filter-pattern "exec-abc123"
```

## 清除資源
<a name="durable-cli-cleanup"></a>

刪除您的耐用函數和相關聯的資源：

```
# Delete the function
aws lambda delete-function --function-name {{myDurableFunction}}

# Delete the IAM role policies
aws iam detach-role-policy \
  --role-name {{durable-function-role}} \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

aws iam detach-role-policy \
  --role-name {{durable-function-role}} \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy

# Delete the role
aws iam delete-role --role-name {{durable-function-role}}
```

## 後續步驟
<a name="durable-cli-next-steps"></a>

使用 部署您的耐用函數之後 AWS CLI：
+ 使用 `list-durable-executions-by-function`和 `get-durable-execution`命令監控執行
+ 檢視 AWS CloudTrail 資料事件中的檢查點操作
+ 針對執行失敗或長時間執行的執行設定 CloudWatch 警示
+ 使用 shell 指令碼或 CI/CD 管道自動化部署

如需 Lambda AWS CLI 命令的詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/lambda/index.html)。