Lambda 运行时更新 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Lambda 运行时更新

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

对于使用托管式运行时的函数,默认情况下,Lambda 会自动应用运行时更新。借助自动运行时更新,Lambda 免去了修补运行时版本的操作负担。对于大多数客户来说,自动更新是正确的选择。有关更多信息,请参阅运行时管理控件

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

每个运行时版本都与版本号和 ARN(Amazon 资源名称)相关联。运行时版本号使用 Lambda 定义的编号方案,独立于编程语言使用的版本号。运行时版本 ARN 是每个运行时版本的唯一标识符。

您可以在函数日志 INIT_START 行和 Lambda 控制台中查看函数当前运行时版本的 ARN。

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

注意

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

运行时管理控件

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

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

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

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

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

两阶段运行时版本推出

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

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

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

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

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

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

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

回滚运行时版本

在极少数情况下,新的运行时版本与现有函数不兼容,您可以将其运行时版本回滚到早期版本。这样,可以使应用程序保持正常运行并最大限度地减少中断,从而在返回到最新的运行时版本之前有时间解决不兼容问题。

Lambda 不会对您可以使用任何特定运行时版本的时间施加限制。但是,我们强烈建议您尽快更新到最新的运行时版本,以便从最新的安全性补丁、性能改进和功能中受益。Lambda 提供回滚到早期运行时版本的选项,仅作为出现运行时更新兼容性问题的极少数情况下的临时缓解措施。如果长时间使用早期运行时版本的函数,最终可能会出现性能下降或证书过期等问题,进而导致函数无法正常运行。

您可以通过以下方式回滚运行时版本:

有关更多信息,请参阅 Amazon 计算博客上的 推出 Amazon Lambda 运行时管理控件

使用 Manual(手动)运行时更新模式回滚运行时版本

如果您使用的是 Auto(自动)运行时版本更新模式,或者 $LATEST 运行时版本,则可以使用 Manual(手动)模式回滚运行时版本。对于要回滚的函数版本,将运行时版本更新模式更改为 Manual(手动),并指定先前运行时版本的 ARN。有关查找先前运行时版本的 ARN 的更多信息,请参阅 识别运行时版本更改

注意

如果函数的 $LATEST 版本配置为使用 Manual(手动)模式,则无法更改函数使用的 CPU 架构或运行时版本。要进行这些更改,必须更改为 Auto(自动)或 Function update(函数更新)模式。

使用已发布的函数版本回滚运行时版本

已发布的函数版本是您对其进行创建时,$LATEST 函数代码和配置的不可变快照。在 Auto(自动)模式下,Lambda 会在运行时版本推出的第二阶段自动更新已发布函数版本的运行时版本。在 Function update(函数更新)模式下,Lambda 不会更新已发布函数版本的运行时版本。

因此,使用 Function update(函数更新)模式的已发布函数版本会创建函数代码、配置和运行时版本的静态快照。通过将 Function update(函数更新)模式与函数版本结合使用,您可以将运行时更新与部署同步。您还可以通过将流量重定向到较早发布的函数版本,来协调代码、配置和运行时版本的回滚。您可以将此方法集成到持续集成和持续交付(CI/CD)中,以便在运行时更新不兼容的极少数情况下实现全自动回滚。使用此方法时,必须定期更新函数并发布新的函数版本以获取最新的运行时更新。有关更多信息,请参阅责任共担模式

识别运行时版本更改

运行时版本号和 ARN 记录在INIT_START日志行中,Lambda 每次创建新的执行环境时都会将其发送到 CloudWatch 日志。由于执行环境对所有函数调用使用相同的运行时系统版本,因此 Lambda 仅在执行初始化阶段时才会发送 INIT_START 日志行。Lambda 不会针对每次函数调用发送此日志行。Lambda 会将日志行发送到 CloudWatch 日志,但在控制台中不可见。

例 示例 INIT_START 日志行
INIT_START Runtime Version: python:3.9.v14    Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

您可以使用 Amazon CloudWatch Contributor Insights 来识别运行时版本之间的过渡,而不是直接处理日志。以下规则计算每个 INIT_START 日志行中不同的运行时版本。要使用该规则,请将示例日志组名称 /aws/lambda/* 替换为函数或函数组的相应前缀。

{ "Schema": { "Name": "CloudWatchLogRule", "Version": 1 }, "AggregateOn": "Count", "Contribution": { "Filters": [ { "Match": "eventType", "In": [ "INIT_START" ] } ], "Keys": [ "runtimeVersion", "runtimeVersionArn" ] }, "LogFormat": "CLF", "LogGroupNames": [ "/aws/lambda/*" ], "Fields": { "1": "eventType", "4": "runtimeVersion", "8": "runtimeVersionArn" } }

以下 “ CloudWatch 贡献者见解” 报告显示了上述规则捕获的运行时版本转换示例。橙线表示早期运行时版本(python:3.9.v12)的执行环境初始化,蓝线表示新运行时版本(python:3.9.v14)的执行环境初始化。


        显示从一个运行时版本转换到另一个运行时版本的图表。

配置运行时管理设置

您可以使用 Lambda 控制台或 Amazon Command Line Interface(Amazon CLI)配置运行时管理设置。

注意

您可以为每个函数版本单独配置运行时管理设置。

配置 Lambda 更新运行时版本的方式(控制台)
  1. 打开 Lamba 控制台的函数页面

  2. 选择一个函数的名称。

  3. Code(代码)选项卡上的 Runtime settings(运行时设置)下,选择 Edit runtime management configuration(编辑运行时管理配置)。

  4. Runtime management configuration(运行时管理配置)下,选择以下选项之一:

    • 要让函数自动更新到最新的运行时版本,请选择 Auto(自动)。

    • 要在更改函数后将函数更新到最新的运行时版本,请选择 Function update(函数更新)。

    • 要仅在更改运行时版本 ARN 后将函数更新到最新的运行时版本,请选择 Manual(手动)。

      注意

      您可以在 Runtime management configuration(运行时管理配置)下找到运行时版本 ARN。您也可以在函数日志 INIT_START 行中找到 ARN。

  5. 选择保存

配置 Lambda 更新运行时版本的方式(Amazon CLI)

要为函数配置运行时管理,可将 put-runtime-management-config Amazon CLI 命令与运行时更新模式结合使用。使用 Manual 模式时,还必须提供运行时版本 ARN。

aws lambda put-runtime-management-config --function-name arn:aws:lambda:eu-west-1:069549076217:function:myfunction --update-runtime-on Manual --runtime-version-arn arn:aws:lambda:eu-west-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1

您应该可以看到类似于如下所示的输出内容:

{ "UpdateRuntimeOn": "Manual", "FunctionArn": "arn:aws:lambda:eu-west-1:069549076217:function:myfunction", "RuntimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1" }

责任共担模式

Lambda 负责为所有受支持的托管运行时和容器映像整理和发布安全更新。更新现有函数以使用最新运行时版本的责任因所使用的运行时更新模式而异。

Lambda 负责将运行时更新应用于配置为使用 Auto(自动)运行时更新模式的所有函数。

对于使用 Function update(函数更新)运行时更新模式配置的函数,您负责定期更新函数。Lambda 负责在您进行这些更新时应用运行时更新。如果您不更新函数,则 Lambda 不会更新运行时。如果您不经常更新函数,我们强烈建议您将其配置为自动运行时更新,以便其继续接收安全更新。

对于配置为使用 Manual(手动)运行时更新模式的函数,您需要负责更新函数以使用最新的运行时版本。强烈建议您仅使用此模式来回滚运行时版本,以此作为在出现运行时更新不兼容问题的极少数情况下的临时缓解措施。我们还建议您尽快切换为 Auto(自动)模式,以最大限度地减少未修补函数的时间。

如果您使用容器映像部署函数,则 Lambda 负责发布更新的基本映像。在这种情况下,您负责从最新的基本映像中重建函数的容器映像并对其进行重新部署。

下表对此进行了总结:

Deployment mode (部署模式) Lambda 的责任 客户责任
托管运行时,Auto(自动)模式

发布包含最新补丁的新运行时版本。

将运行时补丁应用于现有函数。

如果出现运行时更新兼容性问题的极少数情况,请回滚到先前的运行时版本。
托管运行时,Function update(函数更新)模式 发布包含最新补丁的新运行时版本。

定期更新函数以获取最新的运行时版本。

如果您不经常更新函数,请将函数切换为 Auto(自动)模式。

如果出现运行时更新兼容性问题的极少数情况,请回滚到先前的运行时版本。

托管运行时,Manual(手动)模式 发布包含最新补丁的新运行时版本。

只有在出现运行时更新兼容性问题的极少数情况下,才能使用此模式进行临时运行时回滚。

尽快将函数切换为 Auto(自动)或 Function update(函数更新)模式和最新的运行时版本。

容器映像 发布包含最新补丁的新容器映像。 使用最新的容器基本映像定期重新部署函数以获取最新的补丁。

有关与 Amazon 共同承担责任的更多信息,请参阅 Amazon Web Services 云 安全站点上的责任共担模式

高合规性应用程序

Lambda 客户通常依赖自动运行时更新来满足修补要求。如果您的应用程序需要严格遵守修补即时性要求,则您可能需要限制对早期运行时版本的使用。您可以使用 Amazon Identity and Access Management (IAM) 拒绝您Amazon账户中的用户访问 PutRuntimeManagementConfigAPI 操作,从而限制 Lambda 的运行时管理控制。此操作用于为函数选择运行时更新模式。拒绝访问此操作会导致所有函数默认为 Auto(自动)模式。您可以使用服务控制策略(SCP)在整个组织中应用此限制。如果您必须将函数回滚到较早的运行时版本,则可以 case-by-case 逐一授予策略例外权限。