View a markdown version of this page

AWS Lambda MicroVMs 的核心概念 - AWS Lambda

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 映像已启用版本控制。每个版本都代表使用特定代码构件和基础映像生成的单个构建。版本将随构建状态(PENDINGIN_PROGRESSSUCCESSFULFAILED)不断演进,构建成功的版本可以设置为 ACTIVEINACTIVE。有关映像状态和管理的详细信息,请参阅 MicroVM 映像

网络连接器

网络连接器是用于控制流量如何到达您的 MicroVM 以及 MicroVM 如何到达外部服务的资源。您可以在运行时将连接器关联到 MicroVM,从而独立配置入站和出站访问权限。

构建时和运行时连接器可以不同,从而让您的 MicroVM 能够在映像构建期间和运行时访问不同的环境。

使用 Lambda 提供的入站端口访问(使用 JWE 身份验证)、Shell 访问和公共互联网出口默认值。创建您自己的网络连接器以通过您的 VPC 路由出站流量。

Lambda 如何构建映像

当您创建或更新 MicroVM 映像时,Lambda 会执行一个构建进程来生成 Firecracker 快照。此快照会以完全初始化后的状态捕获您的应用程序,从而使利用该快照运行的 MicroVM 可以近乎即时地启动和恢复。

构建进程:

  1. Lambda 使用您指定的托管式基础映像预调配一个全新的 MicroVM。

  2. Lambda 会执行您的 Dockerfile 指令来安装依赖项并配置环境。

  3. Lambda 将使用 ENTRYPOINTCMD 命令启动您的应用程序。

  4. 如果您启用了 /ready 钩子,Lambda 会等待您的应用程序发出准备就绪信号(HTTP 200)。

  5. Lambda 会拍摄磁盘和内存状态的快照,包括所有正在运行的进程。

当您运行 MicroVM 时,Lambda 会使用该快照进行恢复。您的应用程序将以预初始化状态恢复,无需重复启动。

如果您的应用程序在构建期间生成了唯一的内容(例如唯一 ID、密钥或网络连接),则该内容将在运行相同映像版本的所有 MicroVM 之间共享。为避免这种情况,请在 MicroVM 启动后使用 /run 生命周期挂钩后生成唯一内容。有关详细信息,请参阅 MicroVM 映像中的“快照兼容性”部分。

MicroVM 生命周期

在运行时,MicroVM 会经历以下阶段:

  1. 运行:您可以调用 run-microvm。Lambda 将利用映像快照恢复 MicroVM,分配唯一的 ID 并创建端点。MicroVM 的状态将从 PENDING 变为 RUNNING

  2. 正在运行:您的应用程序通过其端点 URL 接收和处理请求。

  3. 暂停:经过可配置的空闲期后(或通过 suspend-microvm API),MicroVM 会经历 SUSPENDINGSUSPENDED 阶段。内存和磁盘状态会得以保留。

  4. 恢复:当有流量到达(如果 autoResumeEnabled=true)或在您调用 resume-microvm 时,MicroVM 的状态会从 SUSPENDED 直接变为 RUNNING

  5. 终止:当您调用 terminate-microvm 或超过最大持续时间时,MicroVM 会经历 TERMINATINGTERMINATED 阶段。

状态

下表介绍了每个 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 状态。在钩子中实施超时和错误处理逻辑,以避免静默失败。