View a markdown version of this page

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

MicroVM 映像

本节介绍如何构建、配置、更新和管理 MicroVM 映像。

MicroVM 映像是一种用于为 MicroVM 定义的文件系统和应用程序环境的资源。MicroVM 映像包含您的运行时环境、应用程序代码和支持程序,例如后台进程和可观测性代理。要创建 MicroVM 映像,您需要提供一个 zip 压缩包,其中包含您上传到 Amazon S3 的 Dockerfile 以及您的应用程序构件。Dockerfile 用于定义应用程序的打包方式。Lambda 通过在 Lambda 托管式 MicroVM 基础映像提供的操作系统环境上运行您的 Dockerfile,从而构建您的应用程序容器映像。有关 MicroVM 基础映像的说明相见下文标题为“MicroVM 基础映像“的部分。

您可以通过更新 MicroVM 基础映像来更新 MicroVM 的应用程序代码或配置。您触发的每次更新都会创建一个新的 MicroVM 映像版本。

Lambda 如何构建 MicroVM 映像

当您创建 MicroVM 映像时,Lambda 会执行以下操作:

  • 从 Amazon S3 中检索您打包的构件。

  • 从 Lambda 托管式基础映像启动一个全新的 MicroVM。

  • 执行您的 Dockerfile 中的指令。

  • 使用 ENTRYPOINTCMD 指令启动您的应用程序。

  • 等待初始化完成,由生命周期挂钩发出信号。

  • 拍摄磁盘和内存状态的快照。

快照进程完成后,您的 MicroVM 映像将进入 CREATED 状态。这时您可以使用该 MicroVM 映像来创建 MicroVM,并且每个 MicroVM 映像都可用于创建多个独立的 MicroVM。从 MicroVM 映像运行的 MicroVM 会直接从快照状态恢复,从而实现快速启动。每个 MicroVM 映像都可用于运行多个 MicroVM,只要不超过您账户的可用限制即可。

有关打包代码和创建第一个 MicroVM 映像的分步演练,请参阅创建您的第一个 MicroVM

MicroVM 大小调整

Lambda MicroVMs 使用基准-峰值模式运行,因此无需针对峰值活动调整每个计算环境的大小。您可以为 MicroVM 配置基准计算资源。在峰值活动期间,您的 MicroVM 可以自动垂直扩展到基准水平的 4 倍。您只需按 MicroVM 的运行时间支付基准费率,并且只需为超过基准水平的实际使用量按秒付费。

您可以在创建 MicroVM 映像时通过 memory 参数设置基准水平。vCPU 与内存将按比例扩展(2 GB = 1 vCPU)。默认基准水平为 2 GB/1 vCPU。

可使用的大小详见下表:

基准 Peak 最大磁盘空间
0.5 GB 内存,0.25 个 vCPU 2 GB 内存,1 个 vCPU 8 GB
1 GB 内存,0.5 个 vCPU 4 GB 内存,2 个 vCPU 8 GB
2 GB 内存,1 个 vCPU(默认值) 8 GB 内存,4 个 vCPU 8 GB
4 GB 内存,2 个 vCPU 16 GB 内存,8 个 vCPU 16 GB
8 GB 内存,4 个 vCPU 32 GB 内存,16 个 vCPU 32 GB

MicroVM 基础映像

MicroVM 基础映像是您的 MicroVM 映像的基础。Lambda 发布了 MicroVM 基础映像,其中包含 Amazon Linux 2023 操作系统以及运行 MicroVM 所需的服务组件。当您创建或更新 MicroVM 映像时,Lambda 会从该基础映像启动一个新的 MicroVM,并在此操作系统环境中运行您的 Dockerfile 指令。

Lambda 会定期(例如在应用安全补丁时)发布服务托管式 MicroVM 基础映像的新版本,以更新操作系统或服务组件。默认情况下,当您创建/更新自己的 MicroVM 映像时,将会使用服务托管式基础映像的最新版本。要进行问题排查或调试,您可以在使用 base-image-version 参数创建自己的 MicroVM 映像时,选择覆盖服务托管式基础映像的版本。

基础映像版本遵循如下弃用生命周期:

  • AVAILABLE:最新版本,建议使用。

  • DEPRECATED(60 天):存在更新的版本。您仍然可以构建和运行。

  • EXPIRING(30 天):无法创建新映像。现有映像仍然可以运行。

  • EXPIRED:无法生成或运行。需要使用支持的版本重建映像。

  • RECALLED:由于存在严重安全问题,立即不可用(罕见)。

要确保使用的最新版本,请关注弃用通知,并在新的基础映像版本发布后重建 MicroVM 映像。

请注意,MicroVM 基础映像不同于您在 Dockerfiles 中指定的容器基础映像。前者用于定义您的 MicroVM 操作系统环境,而后者用于定义在打包应用程序时要使用的基础容器映像,以确保能与 Lambda MicroVMs 配合使用。有关更多详细信息,请参阅有关容器基本映像的一节。

使用以下 API 来发现可用的托管式 MicroVM 基础映像及其版本:

# List all managed MicroVM base images aws lambda-microvms list-managed-microvm-images # List the versions of a specific managed MicroVM base image aws lambda-microvms list-managed-microvm-image-versions \ --image-identifier arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1

MicroVM 映像构建钩子

Lambda 提供了多个 MicroVM 映像构建钩子,让您能够在创建 MicroVM 映像期间验证应用程序是否正确并优化性能。钩子在 Lambda 拍摄用于初始化每个 MicroVM 的快照之前运行。每个钩子都是您的应用程序公开的一个 HTTP 端点,Lambda 在构建过程中会调用该端点。通过响应这些请求,您可以控制和验证 MicroVM 映像的构建过程。Lambda 使用 HTTP 状态代码来确定钩子是否成功完成。

重要

如果您配置了任何钩子,则必须指定应用程序用来侦听钩子请求的端口。

钩子 路径 说明 HTTP 状态代码 超时
/ready /aws/lambda-microvms/runtime/v1/ready 在 MicroVM 映像构建期间,在您的应用程序通过 ENTRYPOINTCMD 启动之后调用。表示您的应用程序准备就绪,可以拍摄快照。 HTTP 503:尚未准备就绪;Lambda 会不断重试,直至超时。HTTP 200:初始化完成;Lambda 已拍摄快照。 1-3600 秒 (readyTimeoutInSeconds)
/validate /aws/lambda-microvms/runtime/v1/validate 构建完成后,在从创建的映像启动的新 MicroVM 上调用。确认应用程序在恢复后运行正常。 HTTP 503:需要更多时间才能完成验证;Lambda 会不断重试,直至超时。HTTP 200:验证通过。 1-3600 秒 (validateTimeoutInSeconds)
重要

返回 HTTP 503 消息时,应立即将其退回,而不是在等待期间保持请求处于打开状态。如果在请求处于打开状态时超时,Lambda 将结束构建。

注意

您还可以使用 /validate 钩子来优化启动时间。要执行此操作,请在验证期间运行模拟载荷。这使 Lambda 能够跟踪快照的访问区域,并在 MicroVM 启动期间优化其检索。

更新 MicroVM 映像

您可以通过调用 update-microvm-image API 来更新现有的 MicroVM 映像。每次更新都会触发一个新的 MicroVM 映像版本构建。通常,您会出于下列目的更新 MicroVM 映像:

  • 部署新的应用程序代码:指向新的代码构件(上传到 Amazon S3 的新 zip 文件)以发布应用程序的新版本。

  • 迁移至更新的 MicroVM 基础映像:更改 MicroVM 基础映像 ARN 以升级到更新版本的 Lambda MicroVM 基础映像。有关更多信息,请参阅MicroVM 映像修补MicroVM 基础映像

  • 更改构建角色:在 Lambda 在构建期间需要的权限更改时更新构建角色 ARN,例如当您的代码构件移至其他 Amazon S3 存储桶或您开始从私有 ECR 存储库拉取时。

  • 调整运行时配置:更改钩子、环境变量或功能,以重新配置 MicroVM 映像的构建和运行方式。

  • 更新描述:更改 MicroVM 映像描述以记录该版本中更改的内容。

以下 CLI 命令演示了如何更新 MicroVM 映像。每次触发新构建的 update-microvm-image 调用都必须使用 --base-image-arn--build-role-arn 参数,即使仅更改代码构件也不例外,省略这些参数会导致 ValidationException

aws lambda-microvms update-microvm-image \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --code-artifact uri=s3://my-bucket/deployments/app-v2.zip \ --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \ --build-role-arn arn:aws:iam::123456789012:role/MicrovmBuildRole \ --description "Updated with v2 application code"

映像状态和构建状态

每次创建或更新 MicroVM 映像时,Lambda 都会利用您的代码构件和基础映像构建一个新版本。随着时间的推移,一个 MicroVM 映像可能会有多个版本,并且您可以运行特定版本的 MicroVM。

三个独立的状态用于跟踪生命周期的不同方面:

  • 映像状态 :MicroVM 映像资源的整体生命周期(正在创建、已就绪可以使用、正在更新、失败或正在删除)。

  • 版本状态:特定版本的构建进度(待处理、正在构建、成功或失败)。检查 stateReason 或 CloudWatch 日志 (/aws/lambda/microvms/<image-name>) 以了解失败详情。

  • 版本激活:是否允许某个已成功构建的版本运行 MicroVMS。Lambda 会自动将新版本设置为 ACTIVE;您可以将任何版本设置为 INACTIVE,以将其禁用而不删除。

可能的值 状态变换控制者
映像状态 CREATING, CREATED, CREATION_FAILED, UPDATING, UPDATED, UPDATE_FAILED, DELETING, DELETED, DELETION_FAILED Lambda(自动)
版本状态 PENDING, IN_PROGRESS, SUCCESSFUL, FAILED Lambda(自动)
版本激活 ACTIVE, INACTIVE 您 (update-microvm-image-version --state)

要从某个版本运行 MicroVM,映像状态必须为 CREATEDUPDATED,版本状态必须为 SUCCESSFUL,切版本必须为 ACTIVE

注意

这些状态是相互独立的。处于 CREATED 状态的映像可以包含状态为 FAILED 的版本。

# De-activate a version aws lambda-microvms update-microvm-image-version \ --image-identifier my-image \ --image-version 1.0 \ --state INACTIVE

环境变量

环境变量将在构建 MicroVM 映像时通过 environmentVariables 字段设置(最多 50 个变量)。环境变量会在快照构建过程中注入到容器中。您可以在运行新 MicroVM 时传递动态设置的有效载荷。要了解更多信息,请参阅有关运行 MicroVM 的部分。

MicroVM 映像修补

当有新的 MicroVM 基础映像可用时,您可以发出 update-microvm-image 调用以触发包含最新补丁的 MicroVM 映像构建。您可以省略 base-image-version 参数(对于最新版本),也可使用最新版本指定该参数。

容器基本映像

Lambda MicroVMs 会在 MicroVM 操作系统环境中将您的应用程序作为容器运行。您可以使用自己的 Dockerfile 来定义该容器,并且您的 Dockerfile 中的 FROM 指令会为您的应用程序设置容器基础映像

您可以从适用于 Amazon Linux 2023 的 Lambda 基础容器映像 (public.ecr.aws/lambda/microvms:al2023-minimal) 开始,然后在该映像上添加自己的 Dockerfile 指令,也可以使用自己的基础容器映像。使用自己的容器映像时,请验证以下要求:

要求

  • 容器基础映像必须与目标 CPU 架构兼容。

  • 如果容器基础映像来自私有 Amazon ECR 存储库,则构建角色需要具有 ecr:GetAuthorizationTokenecr:BatchGetImage 权限。

  • 容器基础映像必须基于 Linux 操作系统。

  • 容器基础映像必须可以从 Lambda 构建基础设施(公共互联网或同一 Amazon 账户中的 ECR 存储库)进行访问。

  • 容器基础映像必须与快照兼容,详见以下说明。

与快照兼容的基础映像

当 Lambda MicroVMs 从预初始化的快照启动每个 MicroVM 时,基础映像都必须与快照兼容。当您将自己的基础映像用于 Lambda MicroVMs 时,我们建议您查看兼容性注意事项部分。

使用私有 ECR 映像

在您的 DockerfileFROM 指令中引用您的私有 ECR 容器基础映像:

FROM 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-base:latest WORKDIR /app COPY . . CMD ["./my-app"]

将以下权限添加到您的构建角色:

{ "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" }

操作系统功能

默认情况下,Lambda MicroVMs 使用一组标准的 Linux 功能运行。在创建或更新 MicroVM 映像时,您可以使用 additionalOsCapabilities 字段来授予升级权限的 Linux 功能。["ALL"] 是唯一受支持的值。启用升级权限的功能,您将可以执行挂载文件系统、创建网络命名空间或运行 eBPF 程序等操作。这些功能将在 VM 隔离边界内应用,不会影响主机或其他 MicroVM。

aws lambda-microvms create-microvm-image \ --name my-network-tool \ --code-artifact uri=s3://my-bucket/app.zip \ --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \ --build-role-arn arn:aws:iam::123456789012:role/BuildRole \ --additional-os-capabilities '["ALL"]'