了解 Lambda 如何管理运行时版本更新 - AWS Lambda

了解 Lambda 如何管理运行时版本更新

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

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

Lambda 还将每个新的运行时版本作为容器映像发布。要更新基于容器的函数的运行时版本,您必须从更新后的基本映像创建一个新的容器映像并重新部署函数。

每个运行时版本都与版本号和 ARN(Amazon 资源名称)相关联。运行时版本号使用 Lambda 定义的编号方案,独立于编程语言使用的版本号。运行时版本 ARN 是每个运行时版本的唯一标识符。您可以在 Lambda 控制台或函数日志 INIT_START 行中查看函数当前运行时版本的 ARN。

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

注意

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

运行时更新模式

Lambda 致力于提供与现有函数向后兼容的运行时更新。但是,与软件修补一样,在极少数情况下,运行时更新会对现有函数产生负面影响。例如,安全性补丁可能会暴露现有函数的潜在问题,而该问题取决于先前的不安全行为。在运行时版本不兼容的极少数情况下,Lambda 运行时管理控件有助于减少对工作负载造成任何有风险的影响。对于每个函数版本$LATEST 或已发布版本),您可以选择以下运行时更新模式之一:

  • 自动(默认)– 通过 两阶段运行时版本推出,自动更新到最新的安全运行时版本。我们建议大多数客户使用此模式,以便您始终受益于运行时更新。

  • 函数更新 – 当您更新函数时,系统将更新到最新的安全运行时版本。当您更新函数时,Lambda 会将函数的运行时更新为最新的安全运行时版本。这种方法可将运行时更新与函数部署同步,这样您就可以控制 Lambda 应用运行时更新的时间。使用此模式,您可以尽早检测和缓解少数运行时更新不兼容问题。使用此模式时,您必须定期更新函数以保持最新的函数运行时。

  • 手动 – 手动更新您的运行时版本。您需要在函数配置中指定运行时版本。该函数将无限期使用此运行时版本。在极少数情况下,新的运行时版本与现有函数不兼容,您可以使用此模式将函数回滚到早期运行时版本。不建议使用 Manual(手动)模式来尝试实现跨部署的运行时一致性。有关更多信息,请参阅 回滚 Lambda 运行时版本

将运行时更新应用于函数的责任因您选择的运行时更新模式而异。有关更多信息,请参阅 了解 Lambda 运行时管理的责任共担模式

两阶段运行时版本推出

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

  1. 在第一阶段,每当您创建或更新函数时,Lambda 都会应用新的运行时版本。当您调用 UpdateFunctionCodeUpdateFunctionConfiguration API 操作时,函数会更新。

  2. 在第二阶段,Lambda 会更新任何使用 Auto(自动)运行时更新模式且尚未更新到新运行时版本的函数。

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

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

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

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