

# 使用 Python 构建 Lambda 函数
<a name="lambda-python"></a>

您可以在 Amazon Lambda 中运行 Python。Lambda 为 Python 提供[运行时](lambda-runtimes.md)运行您的代码来处理事件。您的代码在包含 SDK for Python (Boto3) 的环境中运行，其中包含来自您管理的 Amazon Identity and Access Management (IAM) 角色的凭证。要了解有关 Python 运行时随附的 SDK 版本的更多信息，请参阅 [包含运行时的 SDK 版本](#python-sdk-included)。

Lambda 支持以下 Python 运行时。


| 名称 | 标识符 | 操作系统 | 弃用日期 | 阻止函数创建 | 阻止函数更新 | 
| --- | --- | --- | --- | --- | --- | 
| Python 3.14 | `python3.14` | Amazon Linux 2023 |  2029 年 6 月 30 日  |  2029 年 7 月 31 日  |  2029 年 8 月 31 日  | 
| Python 3.13 | `python3.13` | Amazon Linux 2023 |  2029 年 6 月 30 日  |  2029 年 7 月 31 日  |  2029 年 8 月 31 日  | 
| Python 3.12 | `python3.12` | Amazon Linux 2023 |  2028 年 10 月 31 日  |  2028 年 11 月 30 日  |  2029 年 1 月 10 日  | 
| Python 3.11 | `python3.11` | Amazon Linux 2 |  2027 年 6 月 30 日  |  2027 年 7 月 31 日  |  2027 年 8 月 31 日  | 
| Python 3.10 | `python3.10` | Amazon Linux 2 |  2026 年 10 月 31 日  |  2026 年 11 月 30 日  |  2027 年 1 月 15 日  | 

**创建 Python 函数**

1. 打开 [Lambda 控制台](https://console.amazonaws.cn/lambda)。

1. 选择 **Create function**（创建函数）。

1. 配置以下设置：
   + **函数名称**：输入函数名称。
   + **运行时系统**：选择 **Python 3.14**。

1. 选择**创建函数**。

控制台将使用名为 `lambda_function` 的源文件创建一个 Lambda 函数。您可以在内置代码编辑器中编辑此文件并添加更多文件。在**部署**部分，选择**部署**以更新函数的代码。然后，要运行您的代码，请在**测试事件**部分中选择**创建测试事件**。

您的 Lambda 函数附带了 CloudWatch Logs 日志组。函数运行时会将每次调用的详细信息发送到 CloudWatch Logs。该运行时会中继调用期间[函数输出的任何日志](python-logging.md)。如果您的函数返回错误，则 Lambda 将为错误设置格式，并将其返回给调用方。

**Topics**
+ [包含运行时的 SDK 版本](#python-sdk-included)
+ [已禁用的 Python 特征](#python-disabled-features)
+ [响应格式](#python-response-format)
+ [顺利关闭扩展程序](#python-graceful-shutdown)
+ [定义采用 Python 的 Lambda 函数处理程序](python-handler.md)
+ [将 .zip 文件归档用于 Python Lambda 函数](python-package.md)
+ [使用容器镜像部署 Python Lambda 函数](python-image.md)
+ [使用 Python Lambda 函数的层](python-layers.md)
+ [使用 Lambda 上下文对象检索 Python 函数信息](python-context.md)
+ [Python Lambda 函数日志记录和监控](python-logging.md)
+ [Python 中的 Amazon Lambda 函数测试](python-testing.md)
+ [在 Amazon Lambda 中检测 Python 代码](python-tracing.md)

## 包含运行时的 SDK 版本
<a name="python-sdk-included"></a>

Python 运行时中包含的 Amazon SDK 版本取决于运行时版本和您的 Amazon Web Services 区域。要查找您正在使用的运行时中包含的 SDK 的版本，请使用以下代码创建 Lambda 函数。

```
import boto3
import botocore

def lambda_handler(event, context):
   print(f'boto3 version: {boto3.__version__}')
   print(f'botocore version: {botocore.__version__}')
```

## 已禁用的 Python 特征
<a name="python-disabled-features"></a>

下表列出了在 Lambda 托管运行时和 Python 容器基础映像中禁用的 Python 特征。这些特征必须在编译 Python 运行时可执行文件时启用，不能通过使用执行时间标志来启用。要在 Lambda 中使用这些特征，您可以使用[容器映像](python-image.md#python-image-clients)或[自定义运行时](runtimes-custom.md)，在启用这些特征的情况下部署自己的 Python 运行时版本。


| Python 特征 | 受影响的 Python 版本 | Status | 
| --- | --- | --- | 
| 即时（JIT）编译器 | Python 3.13 及更高版本 | JIT 编译器是实验性的，不建议用于生产工作负载。因此，它在 Lambda Python 运行时中被禁用。 | 
| 自由线程 | Python 3.13 及更高版本 | 由于对单线程代码的性能影响，Lambda Python 版本中禁用了自由线程（禁用全局解释器锁的选项）。 | 

## 响应格式
<a name="python-response-format"></a>

在 Python 3.12 及更高版本的 Python 运行时系统中，函数作为其 JSON 响应的一部分返回 Unicode 字符。早期的 Python 运行时系统在响应中返回 Unicode 字符的转义序列。例如，在 Python 3.11 中，如果您返回诸如“こんにちは”之类的 Unicode 字符串，它会转义 Unicode 字符并返回“\\u3053\\u3093\\u306b\\u3061\\u306f”。Python 3.12 运行时系统会返回原始的“こんにちは”。

使用 Unicode 响应可以减小 Lambda 响应的大小，从而更轻松地将较大的响应容纳到同步函数 6 MB 的最大有效载荷大小中。在前面的示例中，转义后的版本为 32 个字节，而 Unicode 字符串的转义版本为 17 个字节。

升级到 Python 3.12 或更高版本 Python 运行时后，可能需要调整代码以适应新的响应格式。如果调用方期望使用转义 Unicode，则必须在返回函数中添加代码以手动转义 Unicode，或者调整调用方以处理 Unicode 返回。

## 顺利关闭扩展程序
<a name="python-graceful-shutdown"></a>

Python 3.12 及更高版本的 Python 运行时系统为带有[外部扩展程序](lambda-extensions.md)的函数提供了改进的顺利关闭功能。当 Lambda 关闭执行环境时，它会向运行时系统发送 `SIGTERM` 信号，然后将一个 `SHUTDOWN` 事件发送给每个注册的外部扩展。您可以在 Lambda 函数中捕获 `SIGTERM` 信号，并清理该函数创建的资源，例如数据库连接。

要了解有关执行环境生命周期的更多信息，请参阅 [了解 Lambda 执行环境生命周期](lambda-runtime-environment.md)。有关如何顺利关闭扩展程序的示例，请参阅 [Amazon Samples GitHub Repository](https://github.com/aws-samples/graceful-shutdown-with-aws-lambda)。