

# 了解 Lambda 如何管理运行时版本更新
<a name="runtimes-update"></a>

Lambda 通过安全更新、错误修复、新功能、性能增强和对次要发行版的支持，使每个托管运行时保持更新。这些运行时更新作为*运行时版本*发布。Lambda 通过将函数从早期运行时版本迁移到新的运行时版本，来对函数应用运行时更新。

对于使用托管式运行时的函数，默认情况下，Lambda 会自动应用运行时更新。借助自动运行时更新，Lambda 免去了修补运行时版本的操作负担。对于大多数客户来说，自动更新是正确的选择。您可以通过[配置运行时管理设置](runtime-management-configure-settings.md)来更改此默认行为。

Lambda 还将每个新的运行时版本作为容器映像发布。要更新基于容器的函数的运行时版本，您必须从更新后的基本映像[创建一个新的容器映像](images-create.md)并重新部署函数。

每个运行时版本都与版本号和 ARN（Amazon 资源名称）相关联。运行时版本号使用 Lambda 定义的编号方案，独立于编程语言使用的版本号。运行时版本号并不总是连续的。例如，版本 42 后可能是版本 45。运行时版本 ARN 是每个运行时版本的唯一标识符。您可以在 Lambda 控制台或[函数日志 `INIT_START` 行](runtime-management-identify.md)中查看函数当前运行时版本的 ARN。

不应将运行时版本与运行时标识符混淆。每个运行时都有唯一的**运行时标识符**，例如 `python3.14` 或 `nodejs24.x`。它们对应于每个主要的编程语言版本。运行时版本描述单个运行时的补丁版本。

**注意**  
相同运行时版本号的 ARN 可能因 AWS 区域 和 CPU 架构而异。

**Topics**
+ [向后兼容性](#runtime-update-compatibility)
+ [运行时更新模式](#runtime-management-controls)
+ [两阶段运行时版本推出](#runtime-management-two-phase)
+ [配置 Lambda 运行时管理设置](runtime-management-configure-settings.md)
+ [回滚 Lambda 运行时版本](runtime-management-rollback.md)
+ [识别 Lambda 运行时版本更改](runtime-management-identify.md)
+ [了解 Lambda 运行时管理的责任共担模式](runtime-management-shared.md)
+ [控制高合规性应用程序的 Lambda 运行时更新权限](runtime-management-hc-applications.md)

## 向后兼容性
<a name="runtime-update-compatibility"></a>

Lambda 致力于提供与现有函数向后兼容的运行时更新。但是，与软件修补一样，在极少数情况下，运行时更新会对现有函数产生负面影响。例如，安全性补丁可能会暴露现有函数的潜在问题，而该问题取决于先前的不安全行为。

在构建和部署函数时，重要的是要了解如何管理依赖项，以避免与未来的运行时更新可能出现不兼容。例如，假设您的函数依赖于程序包 A，而程序包 A 又依赖于程序包 B。两个包程序都包含在 Lambda 运行时中（例如，它们可能是 SDK 或其依赖项的一部分，或者是运行时系统库的一部分）。

考虑以下场景：


| 部署 | 补丁兼容 | Reason | 
| --- | --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/runtimes-update.html)  | 是 | 将来对程序包 A 和 B 的运行时更新是向后兼容的。 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/runtimes-update.html)  | 是 | 您的部署具有优先权，因此未来对程序包 A 和 B 的运行时更新无效。 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/runtimes-update.html)  | 是\$1 |  未来对程序包 B 的运行时更新是向后兼容的。 \$1如果 A 和 B 紧密耦合，则可能会出现兼容性问题。例如，适用于 Python 的 AWS SDK 中的 `boto3` 和 `botocore` 程序包应该一起部署。  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/runtimes-update.html)  | 否 | 未来对程序包 A 的运行时更新可能需要程序包 B 的更新版本。但是，程序包 B 的已部署版本优先，并且可能与程序包 A 的更新版本不兼容。 | 

为保持与未来的运行时更新兼容，请遵循以下最佳实践：
+ **如果可能，将所有依赖项打包：**在部署包中包含所有必需的库，包括 AWS SDK 及其依赖项。这样可以确保一组稳定、兼容的组件。
+ **谨慎使用运行时提供的 SDK：**只有在无法包含其他程序包时（例如，在 AWS CloudFormation 模板中使用 Lambda 控制台代码编辑器或内联代码时），才依赖运行时提供的 SDK。
+ **避免覆盖系统库：**不要部署可能与未来的运行时更新冲突的自定义操作系统库。

## 运行时更新模式
<a name="runtime-management-controls"></a>

Lambda 致力于提供与现有函数向后兼容的运行时更新。但是，与软件修补一样，在极少数情况下，运行时更新会对现有函数产生负面影响。例如，安全性补丁可能会暴露现有函数的潜在问题，而该问题取决于先前的不安全行为。在运行时版本不兼容的极少数情况下，Lambda 运行时管理控件有助于减少对工作负载造成任何有风险的影响。对于每个[函数版本](configuration-versions.md)（`$LATEST` 或已发布版本），您可以选择以下运行时更新模式之一：
+ **自动（默认）**– 通过 [两阶段运行时版本推出](#runtime-management-two-phase)，自动更新到最新的安全运行时版本。我们建议大多数客户使用此模式，以便您始终受益于运行时更新。
+ **函数更新** – 当您更新函数时，系统将更新到最新的安全运行时版本。当您更新函数时，Lambda 会将函数的运行时更新为最新的安全运行时版本。这种方法可将运行时更新与函数部署同步，这样您就可以控制 Lambda 应用运行时更新的时间。使用此模式，您可以尽早检测和缓解少数运行时更新不兼容问题。使用此模式时，您必须定期更新函数以保持最新的函数运行时。
+ **手动** – 手动更新您的运行时版本。您需要在函数配置中指定运行时版本。该函数将无限期使用此运行时版本。在极少数情况下，新的运行时版本与现有函数不兼容，您可以使用此模式将函数回滚到早期运行时版本。不建议使用 **Manual**（手动）模式来尝试实现跨部署的运行时一致性。有关更多信息，请参阅 [回滚 Lambda 运行时版本](runtime-management-rollback.md)。

将运行时更新应用于函数的责任因您选择的运行时更新模式而异。有关更多信息，请参阅 [了解 Lambda 运行时管理的责任共担模式](runtime-management-shared.md)。

## 两阶段运行时版本推出
<a name="runtime-management-two-phase"></a>

Lambda 按照以下顺序推出新的运行时版本：

1. 在第一阶段，每当您创建或更新函数时，Lambda 都会应用新的运行时版本。当您调用 [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html) 或 [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html) API 操作时，函数会更新。

1. 在第二阶段，Lambda 会更新任何使用 **Auto**（自动）运行时更新模式且尚未更新到新运行时版本的函数。

推出过程的总持续时间因多种因素而异，例如运行时更新中包含的任何安全性补丁的严重性。

如果您正在积极开发和部署函数，您很可能会在第一阶段接受新的运行时版本。这可以使运行时更新与函数更新同步。在极少数情况下，最新的运行时版本会对应用程序造成负面影响，而这种方法可让您及时采取纠正措施。未处于积极开发阶段的函数在第二阶段仍能获得自动运行时更新的操作优势。

这种方法不影响设置为 **Function update**（函数更新）或 **Manual**（手动）模式的函数。使用 **Function update**（函数更新）模式的函数只有在创建或更新时才会接收最新的运行时更新。使用 **Manual**（手动）模式的函数不接收运行时更新。

Lambda 以渐进、滚动的方式跨 AWS 区域 发布新的运行时版本。如果您的函数设置为 **Auto**（自动）或 **Function update**（函数更新）模式，则同时部署到不同区域或在同一区域不同时间部署的函数可能会采用不同的运行时版本。需要在其环境中保证运行时系统版本一致性的客户应[使用容器映像部署其 Lambda 函数](images-create.md)。**手动**模式旨在作为临时缓解措施，以便在出现运行时与您的函数不兼容的极少数情况下回滚运行时版本。