

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

# 支援耐用函數的執行時間
<a name="durable-supported-runtimes"></a>

持久性函數可用於選取的受管執行期和 OCI 容器映像，以提高執行期版本的靈活性。您可以直接在主控台中使用受管執行時間，或透過infrastructure-as-code以程式設計方式建立 Node.js、Python 和 Java 的耐用函數。

## Lambda 受管執行時間
<a name="durable-managed-runtimes"></a>

當您在 Lambda 主控台中或使用 AWS CLI 搭配 `--durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'` 參數建立函數時，下列受管執行期支援耐久函數。如需 Lambda 執行時間的完整資訊，請參閱 [Lambda 執行時間](lambda-runtimes.md)。


| Language | 執行時期 | 
| --- | --- | 
| Node.js | nodejs22.x | 
| Node.js | nodejs24.x | 
| Python | python3.13 | 
| Python | python3.14 | 
| Java | java17 | 
| Java | java21 | 
| Java | java25 | 

**注意**  
Lambda Node.js 和 Python 執行時間包括用於測試和開發的耐久執行 SDK。不過，我們建議您在部署套件中包含 開發套件以供生產。這可確保版本一致性，並避免可能影響函數行為的潛在執行時間更新。由於 Java 是編譯語言，因此 Lambda Java 執行時間不包含耐用的執行 SDK，因此必須包含在您的部署套件中。

### Node.js
<a name="durable-runtime-nodejs"></a>

在 Node.js 專案中安裝 SDK：

```
npm install @aws/durable-execution-sdk-js
```

開發套件支援 JavaScript 和 TypeScript。對於 TypeScript 專案，開發套件包含類型定義。

### Python
<a name="durable-runtime-python"></a>

在 Python 專案中安裝 SDK：

```
pip install aws-durable-execution-sdk-python
```

Python SDK 使用同步方法，不需要 `async/await`。

### Java
<a name="durable-runtime-java"></a>

將相依性新增至 `pom.xml`：

```
<dependency>
    <groupId>software.amazon.lambda.durable</groupId>
    <artifactId>aws-durable-execution-sdk-java</artifactId>
    <version>VERSION</version>
</dependency>
```

在 Java 專案中安裝 SDK：

```
mvn install
```

Java 開發套件提供每種方法的同步和非同步版本。

## 容器映像
<a name="durable-container-images"></a>

您可以搭配容器映像使用耐用的函數，以支援其他執行時間版本或自訂執行時間組態。容器映像可讓您使用不可用作受管執行期的執行期版本，或自訂執行期環境。

若要使用容器映像建立耐用的函數：

1. 根據 Lambda 基礎映像建立 Dockerfile

1. 在容器中安裝耐用的執行 SDK

1. 建置容器映像並將其推送至 Amazon Elastic Container Registry

1. 從已啟用持久性執行的容器映像建立 Lambda 函數

### 容器範例
<a name="durable-container-python"></a>

建立 Dockerfile：

------
#### [ Python ]

建立適用於 Python 3.11 的 Dockerfile：

```
FROM public.ecr.aws/lambda/python:3.11

# Copy requirements file
COPY requirements.txt ${LAMBDA_TASK_ROOT}/

# Install dependencies including durable SDK
RUN pip install -r requirements.txt

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}/

# Set the handler
CMD [ "lambda_function.handler" ]
```

建立`requirements.txt`檔案：

```
aws-durable-execution-sdk-python
```

------
#### [ Java ]

為 Java 25 建立 Dockerfile：

```
FROM --platform=linux/amd64 public.ecr.aws/lambda/java:25

# Install Maven
RUN dnf install -y maven

WORKDIR /var/task

# Copy Maven configuration and source code
COPY pom.xml .
COPY src ./src

# Build
RUN mvn clean package -DskipTests

# Move JAR to lib directory
RUN mv target/*.jar lib/

# Set the handler
CMD ["src.path.to.lambdaFunction::handler"]
```

------

建置並推送映像：

```
# Build the image
docker build -t my-durable-function .

# Tag for ECR
docker tag my-durable-function:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-durable-function:latest

# Push to ECR
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-durable-function:latest
```

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

```
aws lambda create-function \
  --function-name myDurableFunction \
  --package-type Image \
  --code ImageUri=123456789012.dkr.ecr.us-east-1.amazonaws.com/my-durable-function:latest \
  --role arn:aws:iam::123456789012:role/lambda-execution-role \
  --durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'
```

如需搭配 Lambda 使用容器映像的詳細資訊，請參閱[《Lambda 開發人員指南》中的建立 Lambda 容器映像](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)。

## 執行時期考量
<a name="durable-runtime-considerations"></a>

**SDK 版本管理：**在您的部署套件或容器映像中包含耐久的執行 SDK。這可確保您的函數使用特定的 SDK 版本，並且不受執行時間更新的影響。在 `package.json`或 中釘選 SDK 版本`requirements.txt`，以控制升級時間。

**執行期更新：** AWS 更新受管執行期，以包含安全性修補程式和錯誤修正。這些更新可能包含新的 SDK 版本。為了避免意外行為，請在部署套件中包含 SDK，並在部署至生產環境之前進行徹底測試。

**容器映像大小：**容器映像的最大未壓縮大小為 10 GB。耐用的執行 SDK 為您的映像新增最小大小。使用多階段建置並移除不必要的相依性，以最佳化您的容器。

**冷啟動效能：**容器映像的冷啟動時間可能比受管執行時間更長。耐用的執行 SDK 對冷啟動效能的影響最小。如果冷啟動延遲對您的應用程式至關重要，請使用佈建並行。