介绍适用于 AWS Lambda 的 Amazon Linux 2023 运行时 计算博客

新版 AWS Lambda 的 Amazon Linux 2023 运行环境

由 James Beswick 发布于 2023 年 11 月 10 日,内容涉及 AWS Lambda,无服务器架构永久链接 分享:

关键要点

AWS Lambda 现已支持 Amazon Linux 2023AL2023作为托管运行时和容器基础镜像。新的 providedal2023 运行时为 Lambda 函数提供了一个仅含操作系统的环境。AL2023 相较于 Amazon Linux 2AL2具有更小的部署体积和更新的库版本。dnf 成为新的包管理工具,替代了 AL2 中的 yum。未来的 Lambda 托管运行时将建立在 Amazon Linux 2023 之上。

AWS Lambda 现在支持 Amazon Linux 2023AL2023作为管理运行时和容器基础映像。该运行时时称为 providedal2023,提供一个仅包含操作系统的环境来运行您的 Lambda 函数。

AL2023 基于 Amazon Linux 2023 最小容器映像 发布,并相较于 Amazon Linux 2 AL2,在多个方面进行了改进,包括更小的部署体积、更新的库版本如 glibc和全新的包管理工具。

什么是仅含操作系统的 Lambda 运行时?

Lambda 运行时定义了您的函数运行的执行环境。它们提供操作系统、语言支持以及诸如环境变量和证书等附加设置。

Lambda 提供的管理运行时包括 Java、Python、Nodejs、NET 和 Ruby。但是,如果您想使用 Lambda 不支持的编程语言来开发 Lambda 函数,那么“provided”运行时系列提供了一个仅含操作系统的环境,您可以在其中运行用任何语言编写的代码。此次发布扩展了 provided 运行时系列,支持 Amazon Linux 2023。

客户在以下三个常见场景中使用这些仅含操作系统的运行时:

用于编译为本地代码的语言,例如 Go、Rust、C、NET Native AOT 和 Java GraalVM Native。这些语言只需上传编译后的二进制文件,而不需要专用的语言运行时,仅需一个操作系统环境即可运行该二进制文件。

仅含操作系统的运行时还使得构建您可以现成使用的第三方语言运行时成为可能。例如,您可以使用 Bref 用 PHP 编写 Lambda 函数,或者使用 Swift AWS Lambda Runtime 用 Swift 编写。

您可以利用仅含操作系统的运行时部署自定义运行时,以支持 Lambda 不提供的语言或语言版本。例如,Nodejs 19 只有在 LTS 版本偶数版本对外提供管理运行时。

Amazon Linux 2023 基础镜像的新特性

更新的包

AL2023 Lambda 基础镜像基于 AL2023minimal 容器镜像,与 providedal2 相比,包含了各种软件包的更新和更改。

AL2023 基础镜像中的 glibc 版本已升级至 234,而 AL2 基础镜像包含的版本为 226。开发者希望在提供的运行时中使用的某些库需要更新版本的 glibc。此次发布后,您可以在 Lambda 函数中使用更新的 glibc 版本。

AL2 的 Lambda 基础镜像预先安装了 Python 27,因为某些软件包需要该版本 Python 作为依赖。AL2023 Lambda 基础镜像已移除对 Python 27 的依赖,并且不自带任何预安装的语言运行时。您可以自由选择并安装所需的任何兼容 Python 版本。

由于 AL2023 Lambda 基础镜像 是基于 AL2023minimal 构建的,因此您还可以从中受益,享有显著更小的部署体积。新镜像小于 40MB,而基于 AL2 的基础镜像超过 100MB。您可以在 AL2023 的 软件包列表文档 中查看 AL2023 Lambda 基础镜像中的所有软件包的完整列表。

包管理工具

Amazon Linux 2023采用 dnf 作为包管理工具,取代了 Amazon Linux 2 中的默认包管理工具 yum。AL2023 Lambda 基础镜像使用 microdnf 作为包管理工具,它是 dnf 的独立实现,基于 libdnf,并且不需要像 Python 这样的额外依赖。providedal2023 中的 microdnf 被链接为 dnf。请注意,microdnf 不支持 dnf 的所有选项。例如,您无法使用 rpm 的 URL 安装远程 rpm,也无法安装本地 rpm 文件。相反,您可以直接使用 rpm 命令来安装此类软件包。

以下示例 Dockerfile 显示了如何在构建基于容器的 Lambda 函数时使用 dnf 安装软件包:

dockerfile

使用 Amazon Linux 2023 Lambda 基础镜像

FROM publicecraws/lambda/providedal2023

安装所需的 Python 版本

RUN dnf install y python3

运行时支持

随着 providedal2023 的发布,您可以立即迁移基于 AL2 自定义运行时的 Lambda 函数。它还为未来的 Lambda 管理运行时奠定了基础。即将发布的管理语言运行时如 Nodejs 20、Python 312、Java 21 和 NET 8将基于 Amazon Linux 2023,并将使用 providedal2023 作为基础映像。

更改运行时及使用其他计算服务

之前,providedal2 基础镜像是作为自定义镜像构建的,使用了 AL2 中的一部分软件包。它包括诸如 curl 和 yum 之类的软件包,这些软件包在使用自定义运行时构建函数时是必需的。此外,每种管理语言运行时基于不同的用例使用了不同的软件包。

由于未来的管理运行时将 providedal2023 作为基础镜像,因此它们包含与 AL2023minimal 一致的一组基本软件包。这简化了将您的 Lambda 函数从自定义运行时迁移到管理语言运行时的过程。此外,转向其他计算服务如 AWS Fargate 或 亚马逊弹性容器服务ECS来运行您的应用程序也变得更加便捷。

从基于 AL1 的运行时升级

有关 Lambda 运行时弃用的更多信息,请参阅 Lambda 运行时。

介绍适用于 AWS Lambda 的 Amazon Linux 2023 运行时 计算博客

AL1 的支持结束时间定于 2023 年 12 月 31 日。自此日期起,基于 AL1 的运行时 go1x、java8 和 provided 将被弃用。您应 将基于 Go 的 Lambda 函数迁移至提供的运行时系列,例如 providedal2 或 providedal2023。使用 provided 运行时相较于 go1x 运行时具有多项优势。首先,您可以在 AWS Graviton2 处理器上运行 Lambda 函数,其性能价格比最高可提高 34。第二,它提供了更小的部署包和更快的函数调用路径。第三,它将 Go 与其他也编译为本地代码并运行在 provided 运行时系列的语言保持一致。

Amazon Linux 1AL1基础镜像的弃用也定于 2023 年 12 月 31 日。随着 providedal2023 一般可用,您应开始规划将 go1x 和基于 AL1 的 Lambda 函数迁移到 providedal2023。

使用 AL2023 Lambda 基础镜像

要使用自定义运行时构建 Lambda 函数,请按照以下步骤使用 providedal2023 运行时。

AWS 管理控制台

前往 创建函数 页面,在 Lambda 控制台中创建函数。要使用 AL2023 自定义运行时,请选择 在 Amazon Linux 2023 上提供您自己的引导程序 作为 运行时 值:

AWS 无服务器应用程序模型AWS SAM模板

如果您使用 AWS SAM 模板来构建和部署 Lambda 函数,请将 providedal2023 作为 Runtime 的值:

yamlResources HelloWorldFunction Type AWSServerlessFunction Properties CodeUri helloworld/ Handler mybootstrapfile Runtime providedal2023

构建本地编译的 Lambda 函数

Lambda 的自定义运行时简化了使用编译为本地代码的语言构建函数的体验,扩大了您可以使用的语言范围。Lambda 提供了 运行时 API,这是一个 HTTP API,自定义运行时可以使用它与 Lambda 服务进行交互。该 API 的实现称为 运行时接口客户端RIC,允许您的函数接收来自 Lambda 的调用事件,将响应发送回 Lambda,并向 Lambda 服务报告错误。RIC 作为多种流行编程语言的特定于语言的库提供。

例如,您可以如 使用 Go 构建 部分的 Lambda 开发者文档所示,使用 Go 构建函数。请注意,当使用 zip 部署模型时,您在 providedal2023 中的函数可执行文件的名称应始终为 bootstrap。在这个示例中,您可以使用 providedal2023 作为 Lambda 函数的运行时。

如果您使用 CLI,请将 runtime 选项设置为 providedal2023:

bashaws lambda createfunction functionname myFunction runtime providedal2023 handler bootstrap role arnawsiam111122223333role/servicerole/mylambdarole zipfile fileb//myFunctionzip

如果您使用 AWS 无服务器应用程序模型,请在 AWS SAM 模板文件中将 providedal2023 作为 Runtime 的值:

yamlAWSTemplateFormatVersion 20100909Transform AWSServerless20161031Resources HelloWorldFunction Type AWSServerlessFunction Metadata BuildMethod go1x Properties CodeUri helloworld/ # 存放您的主程序的文件夹 Handler bootstrap Runtime providedal2023 Architectures [arm64]

如果您像之前的 部署容器镜像 示例那样运行您的函数作为容器图像,可以使用以下 Dockerfile。使用容器镜像时,您可以为函数的可执行文件使用任何名称。您需要在 Dockerfile 中将可执行文件名称指定为 ENTRYPOINT:

dockerfileFROM golang120 as buildWORKDIR /helloworld

复制依赖项列表

COPY gomod gosum /

使用可选的 lambdanorpc 标签进行构建

COPY maingo RUN go build tags lambdanorpc o main maingo

将文件复制到干净的图像

FROM publicecraws/lambda/providedal2023COPY from=build /helloworld/main /mainENTRYPOINT [ /main ]

结论

此次发布后,您现在可以使用 Amazon Linux 2023 作为自定义运行时构建 Lambda 函数,或将其用作运行基于容器的 Lambda 函数的基础镜像。更新版的库如 glibc、新的包管理工具以及比基于 Amazon Linux 2 的运行时更小的部署体积,使您获得了更为优越的体验。Lambda 还以 Amazon Linux 2023minimal 为基础,为今后的 Lambda 运行时发布奠定了基础。

飞跃加速器官网入口

欲获取更多无服务器学习资源,请访问 Serverless Land。

标签:贡献,无服务器架构