AWS Lambda MicroVMs 的核心概念
AWS Lambda MicroVMs 会使用您创建和管理的多种资源类型。本页介绍了每种资源类型、Lambda 如何将您的 MicroVM 映像构建为快照,以及 MicroVM 在运行时的生命周期状态变化:这些都是使用 MicroVM 构建应用程序的基础。
重要概念
- MicroVM
-
MicroVM 是一种资源,代表用于单个租户、用户会话或作业的隔离计算环境。每个 MicroVM 都会运行包含各种操作系统功能的 Amazon Linux 2023 操作系统,提供近乎即时的启动和恢复能力。MicroVM 通过入站 HTTPS 连接接收请求,并且可在空闲时暂停运行,但保持内存和磁盘状态。已暂停的 MicroVM 将在有流量返回时恢复。
- MicroVM 映像
-
MicroVM 映像是一种用于为 MicroVM 定义应用程序环境的资源。当您创建映像时,Lambda 会将其构建到快照中,从而实现近乎即时的启动(请参阅下文的Lambda 如何构建映像)。
要创建 MicroVM 映像,您需要提供一个 zip 压缩包,其中包含已上传到 Amazon S3 的
Dockerfile以及您的应用程序构件。您必须以 Lambda 发布的托管式基础映像为基础(使用base-image-arn参数来指定)。您的Dockerfile用于定义 Lambda 将在托管式基础之上构建的应用程序层。MicroVM 映像已启用版本控制。每个版本都代表使用特定代码构件和基础映像生成的单个构建。版本将随构建状态(
PENDING→IN_PROGRESS→SUCCESSFUL或FAILED)不断演进,构建成功的版本可以设置为ACTIVE或INACTIVE。有关映像状态和管理的详细信息,请参阅 MicroVM 映像。 - 网络连接器
-
网络连接器是用于控制流量如何到达您的 MicroVM 以及 MicroVM 如何到达外部服务的资源。您可以在运行时将连接器关联到 MicroVM,从而独立配置入站和出站访问权限。
构建时和运行时连接器可以不同,从而让您的 MicroVM 能够在映像构建期间和运行时访问不同的环境。
使用 Lambda 提供的入站端口访问(使用 JWE 身份验证)、Shell 访问和公共互联网出口默认值。创建您自己的网络连接器以通过您的 VPC 路由出站流量。
Lambda 如何构建映像
当您创建或更新 MicroVM 映像时,Lambda 会执行一个构建进程来生成 Firecracker 快照。此快照会以完全初始化后的状态捕获您的应用程序,从而使利用该快照运行的 MicroVM 可以近乎即时地启动和恢复。
构建进程:
-
Lambda 使用您指定的托管式基础映像预调配一个全新的 MicroVM。
-
Lambda 会执行您的
Dockerfile指令来安装依赖项并配置环境。 -
Lambda 将使用
ENTRYPOINT或CMD命令启动您的应用程序。 -
如果您启用了
/ready钩子,Lambda 会等待您的应用程序发出准备就绪信号(HTTP 200)。 -
Lambda 会拍摄磁盘和内存状态的快照,包括所有正在运行的进程。
当您运行 MicroVM 时,Lambda 会使用该快照进行恢复。您的应用程序将以预初始化状态恢复,无需重复启动。
如果您的应用程序在构建期间生成了唯一的内容(例如唯一 ID、密钥或网络连接),则该内容将在运行相同映像版本的所有 MicroVM 之间共享。为避免这种情况,请在 MicroVM 启动后使用 /run 生命周期挂钩后生成唯一内容。有关详细信息,请参阅 MicroVM 映像中的“快照兼容性”部分。
MicroVM 生命周期
在运行时,MicroVM 会经历以下阶段:
-
运行:您可以调用
run-microvm。Lambda 将利用映像快照恢复 MicroVM,分配唯一的 ID 并创建端点。MicroVM 的状态将从PENDING变为RUNNING。 -
正在运行:您的应用程序通过其端点 URL 接收和处理请求。
-
暂停:经过可配置的空闲期后(或通过
suspend-microvmAPI),MicroVM 会经历SUSPENDING到SUSPENDED阶段。内存和磁盘状态会得以保留。 -
恢复:当有流量到达(如果
autoResumeEnabled=true)或在您调用resume-microvm时,MicroVM 的状态会从SUSPENDED直接变为RUNNING。 -
终止:当您调用
terminate-microvm或超过最大持续时间时,MicroVM 会经历TERMINATING到TERMINATED阶段。
状态
下表介绍了每个 MicroVM 状态。这些状态使您能够构建可靠的应用程序并实现正确的错误处理逻辑。
| 州 | 说明 |
|---|---|
PENDING |
正在预调配 MicroVM。正在分配资源并且正在加载快照。 |
RUNNING |
MicroVM 处于活动状态,并通过其端点 URL 接受流量。/run 钩子已完成。 |
SUSPENDING |
MicroVM 正在被暂停。/suspend 钩子正在执行。正在检查磁盘和内存。 |
SUSPENDED |
MicroVM 已暂停。状态已保留。不会产生计算费用。可以恢复或终止。 |
TERMINATING |
MicroVM 正在终止。/terminate 钩子正在执行。正在释放资源。 |
TERMINATED |
MicroVM 已终止。这是最终状态。MicroVM 无法恢复或重新启动。 |
状态变换
下表列举了 MicroVM 状态的有效变换以及会触发每种状态变换的因素。
| Initial state | 目标状态 | 触发器 |
|---|---|---|
PENDING |
RUNNING |
预调配完成,/run 钩子已成功。 |
RUNNING |
SUSPENDING |
超过空闲时长,或者显式调用了 suspend-microvm API。 |
SUSPENDING |
SUSPENDED |
/suspend 钩子已完成,内存和磁盘状态已检查。 |
SUSPENDED |
RUNNING |
有流量到达 (autoResumeEnabled=true) 或显式调用了 resume-microvm API。 |
RUNNING |
TERMINATING |
显式调用了 terminate-microvm API,或超过 maximumDurationInSeconds。 |
SUSPENDED |
TERMINATING |
超过 suspendedDurationSeconds,或显式调用了 terminate-microvm API。 |
TERMINATING |
TERMINATED |
/terminate 钩子已完成,所有资源已释放。 |
重要
如果 /run 钩子失败或超时,MicroVM 可能会直接变为 TERMINATING 状态,永远不会达到 RUNNING 状态。在钩子中实施超时和错误处理逻辑,以避免静默失败。