介绍 亚马逊云科技 Lambda 运行时管理控件

作者: 朱利安·伍德 |

这篇博客文章由首席产品经理乔纳森·图利安尼撰写。

今天, 亚马逊云科技 L am bda 宣布了运行时管理控制措施,这些控制措施可以更好地了解 Lambda 何时对您的函数应用运行时更新。Lambda 还改变了为您的函数推出自动运行时更新的方式。这些更改共同为你提供了更大的灵活性,让你能够更灵活地利用最新的运行时功能、性能改进和安全更新。

默认情况下,所有函数将继续接收自动运行时更新。您无需更改使用 Lambda 的方式,即可继续受益于 Lambda 提供的托管运行时的安全性和操作简便性。对于需要对运行时更改进行更多控制的高级客户,运行时控制是可选功能。

这篇文章解释了有哪些新的运行时管理控件可用,以及如何利用这项新功能。

概述

对于每个运行时,Lambda 都提供托管执行环境。这包括底层的 亚马逊 Linux 操作系统、编程语言运行时和 亚马逊云科技 软件开发工具包 。Lambda 承担了对所有这些组件应用补丁和安全更新的运营负担。客户告诉我们,他们非常欣赏能够部署一项功能,然后将其保留下来,有时甚至可以保留数年,而不必应用补丁。使用 Lambda,修补可以自动 “正常工作”。

Lambda 努力提供向后兼容现有功能的更新。但是,与所有软件补丁一样,在极少数情况下,补丁会暴露依赖于先前行为的现有功能的潜在问题。例如,考虑其中一个运行时操作系统包中的错误。对于绝大多数客户和职能部门来说,应用补丁来修复错误是正确的选择。但是,在极少数情况下,函数可能取决于先前(不正确的)行为。在 Lambda 中运行关键工作负载的客户告诉我们,他们想要一种方法来进一步降低这种轻微的中断风险。

随着运行时管理控件的推出,Lambda 现在提供了三项新功能。首先,Lambda 可让您了解您的函数正在使用运行时的哪个补丁版本以及何时应用运行时更新。其次,您可以选择将运行时更新与函数部署同步。这使您可以控制 Lambda 何时应用运行时更新,并可以及早发现罕见的运行时更新不兼容性。第三,在极少数情况下出现运行时更新不兼容的情况,您可以将函数回滚到较早的运行时版本。这可以使您的函数正常运行并最大限度地减少干扰,从而在返回到最新的运行时版本之前有时间纠正不兼容问题。

运行时标识符和运行时版本

Lambda 运行时定义了运行函数 代码 的执行环境 组件。这包括操作系统、编程语言运行时、环境变量和证书。对于 Python、Node.js 和 Ruby,运行时还包括 亚马逊云科技 开发工具包。 每个 Lambda 运行时都有一个唯一的 运行时标识符 ,例如 nodejs 18.x 或 python3.9。 每个运行时标识符代表编程语言的不同主要版本。

运行时管理控件引入了 Lambda 运行时 版本的概念。 运行时版本是特定运行时的不可变版本。每个 Lambda 运行时,例如 Node.js 16 或 Python 3.9,都以初始运行时版本开始。Lambda 每次更新运行时时,都会向该运行时添加新的运行时版本。这些更新涵盖了所有运行时组件(操作系统、语言运行时等),因此使用 Lambda 定义的编号方案,与编程语言使用的版本号无关。对于每个运行时版本,Lambda 还会为将函数打包为容器镜像的客户发布相应的基础映像。

新的运行时标识符代表编程语言的主要版本,有时还代表其他运行时组件,例如操作系统或软件开发工具包。Lambda 无法保证运行时标识符之间的兼容性,尽管大多数时候您只需稍作修改或无需修改即可升级函数。您可以控制何时将函数升级到新的运行时标识符。相比之下,具有相同运行时标识符的新运行时版本与现有函数的向后兼容性非常高。默认情况下,Lambda 通过将函数从先前的运行时版本移至较新的运行时版本来自动应用运行时更新。

每个运行时版本都有一个版本号和一个 Amazon 资源名称 (ARN) 。您可以在新的平台日志行 INIT_START 中查看版本。Lambda 每次在冷启动初始化过程中创建新的执行环境时都会发出此日志行。

INIT_START Runtime Version: python:3.9.v14	Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

INIT_START 运行时版本:python: 3.9.v14 运行时版本 ARN: arn: aws: lambda: eu-south-1:: runtime: 7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a0fad1fa65127e9e6i

运行时版本提高了对托管运行时更新的可见性。您可以使用 INIT_START 日志行来识别函数何时从一个运行时版本过渡到另一个运行时版本。这可以帮助您调查运行时更新是否可能导致函数出现任何意外行为。由运行时更新引起的行为变化非常罕见。如果你的函数没有按预期运行,那么到目前为止,最有可能的原因是函数代码或配置中的错误。

运行时管理模式

借助运行时管理控件,您现在可以更好地控制 Lambda 何时将运行时更新应用于您的函数。现在,您可以 为每个函数指定 运行时管理配置 。您可以为 $LATEST 和每个已发布的函数版本单独设置运行时管理配置。

您可以指定三种运行时更新模式之一:自动、函数更新或手动。运行时更新模式控制 Lambda 何时将函数版本更新为新的运行时版本。默认情况下,所有函数都会自动接收运行时更新,在特定情况下,替代方案适用于高级用户。

自动

自动更新是默认设置,也是大多数客户的正确选择,可确保您继续从运行时版本更新中受益。它们让 Lambda 负责运行时更新,从而最大限度地减少您的运营开支。

虽然 Lambda 一直提供自动运行时更新,但此版本包括对自动运行时更新的推出方式的更改。以前,Lambda 会按照区域部署顺序对每个区域的所有函数应用运行时更新。在此版本中,配置为使用自动运行时更新模式的函数现在分两个阶段接收运行时更新。最初,Lambda 仅将新的运行时版本应用于新创建或更新的函数。在初始阶段结束后,Lambda 随后将运行时更新应用于配置为使用自动运行时更新模式的所有剩余函数。

此两阶段部署将运行时更新与功能更新同步,供正在积极开发功能的客户使用。这样可以更轻松地检测和响应任何意想不到的行为变化。对于未处于活跃开发阶段的功能,自动模式继续提供全自动运行时更新的操作优势。

函数更新

在函数更新模式下,只要您更改函数代码或配置,Lambda 就会将您的函数更新到最新的可用运行时版本。这与自动模式的第一阶段相同。不同之处在于,在自动模式下,Lambda 会将运行时更新应用于未更改的函数,这是第二阶段。在函数更新模式下,如果您不更改函数,它将无限期地继续使用当前的运行时版本。这意味着,在使用函数更新模式时,必须定期更新函数,以使其运行时保持最新状态。如果您不定期更新函数,则应使用自动运行时更新模式。

通过将运行时更新与函数部署同步,您可以控制 Lambda 何时应用运行时更新。例如,您可以避免在关键业务事件(例如产品发布或假日销售)期间应用更新。

与 CI/CD 管道一起使用时,函数更新模式可在运行时更新不兼容的极少数情况下进行早期检测和缓解。如果您在每次部署中创建新的已发布函数版本,则这种方法尤其有效。每个已发布的函数版本都会捕获函数代码和配置的静态副本,因此如果需要,您可以回滚到之前发布的函数版本。使用函数更新模式可以扩展已发布的函数版本,以同时捕获运行时版本。 这允许您同步整个 Lambda 执行环境的部署和回滚,包括函数代码、 配置和运行时版本。

手册

以运行时更新与您的某个函数不兼容的罕见事件为例。通过运行时管理控件,您现在可以回滚到较早的运行时版本。这可以使您的函数正常运行并最大限度地减少干扰,从而使您有时间在返回最新的运行时版本之前纠正不兼容问题。

有两种方法可以实现运行时版本回滚。您可以将函数更新模式与已发布的函数版本一起使用,以同步代码、配置和运行时版本的回滚。或者,对于使用默认自动运行时更新模式的函数,您可以使用手动模式回滚运行时版本。

手动运行时更新模式使您可以完全控制您的函数使用哪个运行时版本。启用手动模式时,必须指定要使用的运行时版本的 ARN,可以从 INIT_START 日志行中找到该版本。

Lambda 对你可以使用任何特定的运行时版本的时间没有时间限制。但是,亚马逊云科技 强烈建议仅使用手动模式来短期修复代码不兼容性。解决问题后,立即将功能恢复为自动模式。长时间使用相同运行时版本的函数最终可能会因为证书到期等原因而停止运行。

使用运行时管理控件

您可以通过 Lambda 亚马逊云科技 管理控制台 和 亚马逊云科技 命令行接口 ( 亚马逊云科技 CLI ) 配置运行时管理控制。 您还可以使用基础设施作为代码工具,例如 亚马逊云科技 CloudFormation 和 A WS 无服务器应用程序模型 (亚马逊云科技 SA M)。

控制台

在 Lambda 控制台中,导航到特定函数。您可以在 “运行时 设置” 面板的 “ 代码 ” 选项卡上找到 运行时 管理控件。展开 运行时管理配置 以查看当前的运行时更新模式和运行时版本 ARN。

Runtime settings

运行时设置

要更改运行时更新模式,请选择 编辑运行时管理配置 。您可以在自动、功能更新和手动运行时更新模式之间进行选择。

Edit runtime management configuration (Auto)

编辑运行时管理配置(自动)

在手动模式下,您还必须指定运行时版本 ARN。

Edit runtime management configuration (Manual)

编辑运行时管理配置(手动)

亚马逊云科技AM

亚马逊云科技 SAM 是一个用于构建无服务器应用程序的开源框架。您可以使用 runtimeManagementConfig 属性指定运行时管理设置。

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: lambda_function.handler
      Runtime: python3.9
      RuntimeManagementConfig:
        UpdateOn: Manual
        RuntimeVersionArn: arn:aws:lambda:eu-west-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6

亚马逊云科技 命令行

您还可以使用 亚马逊云科技 CLI 管理运行时管理设置。 您可以通过专用命令 aws lambda p ut-runtime-management-config 来配置运行时管理 控制,而不是 a ws lambda 更新函数配置。

aws lambda put-runtime-management-config --function-name <function_arn> --update-runtime-on Manual --runtime-version-arn <runtime_version_arn>

要查看现有的运行时管理配置,请使用 aw s lambda get-runtime-m an agement-config。

aws lambda get-runtime-management-config --function-name <function_arn>

当前的运行时版本 ARN 也由 aws lambda 获取函数和 a ws lambda 获取函数 配置返回。

结论

运行时管理控件为 Lambda 何时及如何将运行时更新应用于您的函数提供了更多的可见性和灵活性。您可以指定三种更新模式之一:自动、功能更新或手动。这些模式允许您继续利用 Lambda 的自动补丁功能,将运行时更新与部署同步,并在运行时更新对您的函数产生负面影响的情况下回滚到较早的运行时版本。

有关运行时管理控制的更多信息,请参阅我们的 文档页面

如需更多无服务器学习资源,请访问 无服务器世界


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。