

# 持久性函数支持的运行时
<a name="durable-supported-runtimes"></a>

持久性函数适用于选定的托管运行时和 OCI 容器映像，可提高运行时版本的灵活性。您可以直接在控制台中使用托管运行时为 Node.js、Python 和 Java 创建持久性函数，也可以通过基础设施即代码以编程方式创建。

## Lambda 托管运行时
<a name="durable-managed-runtimes"></a>

当您在 Lambda 控制台中或使用具有 `--durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'` 参数的 Amazon CLI 创建函数时，以下托管运行时将支持持久性函数。有关 Lambda 运行时的完整信息，请参阅 [Lambda 运行时](lambda-runtimes.md)。


| 语言 | 运行时 | 
| --- | --- | 
| 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。但是，我们建议将 SDK 包含在您的生产部署包中。这样可以确保版本一致性，并且可以避免可能影响函数行为的潜在运行时更新。由于 Java 属于编译型语言，Lambda Java 运行时未内置持久执行 SDK，因此需将该 SDK 一并打包至部署包中。

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

在 Node.js 项目中安装 SDK：

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

SDK 支持 JavaScript 和 TypeScript。对于 TypeScript 项目，SDK 包含类型定义。

### 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 SDK 同时为每种方法提供同步和异步版本。

## 容器映像
<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.amazonaws.cn/lambda/latest/dg/images-create.html)。

## 运行时系统注意事项
<a name="durable-runtime-considerations"></a>

**SDK 版本管理：**在您的部署包或容器映像中包含持久执行 SDK。这样可以确保您的函数使用的是特定的 SDK 版本，并且不会受到运行时更新的影响。将 SDK 版本固定在您的 `package.json` 或 `requirements.txt` 中以控制升级时间。

**运行时更新：**Amazon 将更新托管运行时，以包括安全补丁和错误修复。这些更新可能包括新的 SDK 版本。为避免发生意外行为，请将 SDK 包含在部署包中，并在部署到生产环境之前进行彻底测试。

**容器映像大小：**容器映像的最大未压缩大小为 10GB。持久执行 SDK 为映像添加了最小大小。通过采用多阶段构建方式并移除不必要的依赖项来优化您的容器。

**冷启动性能：**容器映像的冷启动时间可能比托管运行时长。持久执行 SDK 对冷启动性能的影响极小。如果冷启动延迟对您的应用程序至关重要，请使用预置并发。