
aws-lambda-microvms
热门在 AWS Lambda MicroVMs 上构建、运行、调试与运维应用程序。这是一种运行在容器内部、基于 Firecracker 隔离且支持快照恢复的 Serverless 计算环境,单次最长可运行 8 小时。适用于需要强租户隔离、独立 Serverless 计算、沙箱计算或安全多租户执行的业务场景。同时也非常适合 AI/Agent 代码执行沙箱、交互式代码 Playground 与 Notebook(如 Jupyter、REPL 以及运行用户代码的开发环境)、强化学习环境、多租户 CI 执行器与 Build Runner、有状态的游戏或仿真服务器、以及独立的安全扫描器。当业务需要长会话、真实端口监听服务(gRPC、WebSocket、自定义 TCP 协议)、空闲期状态保存(挂起/恢复)、容器级权限访问(FUSE、eBPF、自定义系统调用)或会话亲和性路由时,也是理想之选。
在 AWS Lambda MicroVMs 上构建、运行、调试与运维应用程序。这是一种运行在容器内部、基于 Firecracker 隔离且支持快照恢复的 Serverless 计算环境,单次最长可运行 8 小时。适用于需要强租户隔离、独立 Serverless 计算、沙箱计算或安全多租户执行的业务场景。同时也非常适合 AI/Agent 代码执行沙箱、交互式代码 Playground 与 Notebook(如 Jupyter、REPL 以及运行用户代码的开发环境)、强化学习环境、多租户 CI 执行器与 Build Runner、有状态的游戏或仿真服务器、以及独立的安全扫描器。当业务需要长会话、真实端口监听服务(gRPC、WebSocket、自定义 TCP 协议)、空闲期状态保存(挂起/恢复)、容器级权限访问(FUSE、eBPF、自定义系统调用)或会话亲和性路由时,也是理想之选。
AWS Lambda MicroVMs
推荐配合 AWS MCP server 使用,以实现沙箱化执行与审计日志记录。
AWS Lambda MicroVMs 是一种兼具 Firecracker VM 隔离安全性与容器化高效率的 Serverless 计算环境。每个 MicroVM 具备以下特性:
- 在 Firecracker 微虚拟机内以容器形式运行应用——方便在本地复现环境。
- 内部采用 Amazon Linux 2023 作为基础操作系统。
- 启动时直接读取构建阶段捕获的内存 + 磁盘快照,跳过应用初始化过程,实现极速启动。
- 拥有独立的 TLS 终结 HTTPS 终端节点,可通过 Auth Token 访问。
- 支持**挂起与恢复(Suspend/Resume)**且能完好保留状态;单次最长存活时间达 8 小时。
双资源模型:
MicrovmImage:由{包含 Dockerfile 的 S3 zip 包} + baseImageArn构建而成的版本化产物。每个版本都包含针对不同架构/芯片组的Build。Microvm:基于特定镜像版本创建(RunMicrovm)的运行实例。
双角色机制:
buildRoleArn:镜像构建期间使用(具备 S3 读取、CloudWatch 日志写入权限,可选 ECR 权限)。executionRoleArn:MicroVM 在运行时调用的 IAM 角色。
适用场景
优先选择 Lambda MicroVMs 的场景
- 数据分析类业务:需要强租户隔离的数据处理、ETL 任务或查询执行计算。
- AI / Agent 代码执行沙箱:单次会话即开即用、完全隔离,多轮对话间支持快速恢复。
- 交互式代码 Playground 与 Notebook:运行用户自定义代码的 Jupyter、REPL 及在线开发环境。
- 强化学习环境:每次 Episode 都保持干净独立,且支持工具调用。
- 多租户 CI 执行器 / Build Runner:提供高强度的租户隔离。
- 游戏 / 仿真服务器:有状态、需要长时间运行(最长 8 小时)的业务。
- 安全扫描:在隔离环境中运行不可信的分析工具。
总体而言,Lambda MicroVMs 非常适合长会话、需要真实端口监听(gRPC、WebSocket、自定义 TCP 协议)、空闲期保留状态(挂起/恢复)、容器级访问权限(FUSE、eBPF、自定义系统调用)或需要会话亲和性路由到特定计算环境的场景。
优先选择 AWS Lambda (Functions) 的场景
- 任务执行时间在 15 分钟以内。
- 只需要按次调用的单次隔离,无需在内存中保留会话状态。
- 更喜欢全自动弹性扩缩容(无需手动管理
RunMicrovm)。 - 由事件源驱动(如 S3、SQS、EventBridge 等)。
选择其他方案的场景
- 运行时间超过 8 小时的连续计算 → 选择 ECS / EKS / EC2。
- 需要修改内核或运行非 Linux 系统的平滑迁移(Lift-and-shift)业务 → 选择 EC2。
典型工作流
- 检查区域可用性——确认目标 Region 是否已支持 Lambda MicroVMs(运行
aws lambda-microvms list-managed-microvm-images)。你的 S3 产物存储桶和网络连接器必须与镜像位于同一 Region。 - 打包应用:在根目录放好
Dockerfile并打成 zip 包,上传至 S3(需与镜像在同一 Region)。 - 实现生命周期 Hook(可选,但强烈建议):在指定端口(常用
9000)上暴露 HTTP 接口,处理/run、/resume、/suspend、/terminate、/ready、/validate等请求。 - CreateMicrovmImage:指定 S3 产物路径、托管基础镜像(Base Image)以及构建角色。Lambda 会把 Dockerfile 编译为 OCI 镜像,启动应用并调用
/ready,然后对磁盘与内存打快照,最后可选地调用/validate进行校验。Lambda 会定期发布新的托管镜像版本,建议用户及时基于最新版本重新构建,确保镜像版本保持最新。 - RunMicrovm:选择镜像版本,绑定
executionRoleArn,配置idlePolicy、进出站网络连接器以及可选的runHookPayload。创建成功后会返回endpointURL 和microvmId。 - CreateMicrovmAuthToken:获取访问 Token(最长 60 分钟有效期),并在
allowedPorts中指定 Token 允许访问的端口。发送请求时带着 HTTP 头X-aws-proxy-auth: <token>。 - Suspend / Resume / Terminate:可以通过 API 手动触发,也可以让
idlePolicy自动管理(通过配置maxIdleDurationSeconds、suspendedDurationSeconds、autoResumeEnabled)。
核心 CLI 命令
# 创建镜像(S3 存储桶根目录下放着包含 Dockerfile 的 zip 包,加上托管基础镜像)
aws lambda-microvms create-microvm-image \
--name my-image \
--base-image-arn arn:aws:lambda:<region>:aws:microvm-image:al2023-1 \
--build-role-arn arn:aws:iam::<acct>:role/MicroVMBuildRole \
--code-artifact '{"uri":"s3://<bucket>/<key>.zip"}'
# 运行 MicroVM(返回 endpoint + microvmId)。--image-identifier 传入镜像 ARN(直接传简短名称会报错);
# --image-version 为完整的 major.minor 版本字符串。
aws lambda-microvms run-microvm \
--image-identifier arn:aws:lambda:<region>:<acct>:microvm-image:my-image \
--image-version 1.0 \
--execution-role-arn arn:aws:iam::<acct>:role/MicroVMExecutionRole \
--idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300,"autoResumeEnabled":true}'
# 生成 Auth Token 并调用 endpoint
TOKEN=$(aws lambda-microvms create-microvm-auth-token \
--microvm-identifier microvm-... --expiration-in-minutes 30 \
--allowed-ports '[{"port":8080}]' \
--query 'authToken."X-aws-proxy-auth"' --output text)
curl "<endpoint>/" -H "X-aws-proxy-auth: $TOKEN"
# 生命周期控制
aws lambda-microvms suspend-microvm --microvm-identifier microvm-...
aws lambda-microvms resume-microvm --microvm-identifier microvm-...
aws lambda-microvms terminate-microvm --microvm-identifier microvm-...
请参阅 references/getting-started.md 获取包含 --hooks 配置和生命周期 Hook 的完整指南。
Hook 配置
Hook 通过 --hooks 参数统一配置,分为两大类:
microvmImageHooks(构建期 Hook)
建议:强烈建议实现镜像构建期的 Hook(
/ready和/validate)以获得最佳性能。它们能让平台捕获完整的快照,并在运行时预加载访问频繁的数据块。
| Hook | 作用 | 超时时间范围 |
|---|---|---|
ready |
在应用启动期间调用。当该 Hook 返回 200 状态码时,表明应用已完全就绪,可以进行快照捕获。用它来确保快照生成前应用已彻底启动。如果应用未就绪,请返回 503 状态码直到准备就绪。 | 1–3600 秒(默认 30 秒) |
validate |
在基于快照启动 MicroVM 应用后调用。用该 Hook 验证应用能否正常处理流量。此外,平台会借此采样应用运行时访问的快照内存/磁盘区域,以便 Lambda 在后续启动时**预提取(prefetch)**这些数据以降低时延。为实现最佳性能,建议在 validate 期间跑一些 Mock 流量测试。返回 200 表示 MicroVM 镜像校验通过;如需更多时间运行校验逻辑,可返回 503。 | 1–3600 秒(默认 30 秒) |
为什么要实现
/ready? 它能告诉平台你的应用已经完成引导。如果不实现,快照可能会在初始化中途被截取,导致缓存的状态不完整,每次运行都不得不重复一部分启动逻辑。为什么要实现
/validate? 它不仅能让平台校验快照的正确性,还能采样RunMicrovm期间访问了快照的哪些部分。这样平台就能在未来的启动中预提取这些部分,大幅缩短冷启动时间。
microvmHooks(运行期 Hook)
| Hook | 作用 | 超时时间范围 |
|---|---|---|
run |
基于快照运行后触发一次 | 1–60 秒(默认 1 秒) |
resume |
从 SUSPENDED(挂起)切换为 RUNNING(运行)后触发 | 1–60 秒(默认 1 秒) |
suspend |
从 RUNNING(运行)切换为 SUSPENDED(挂起)前触发 | 1–60 秒(默认 1 秒) |
terminate |
实例销毁(terminate)前触发 | 1–60 秒(默认 1 秒) |
参阅 references/getting-started.md 查看启用所有 Hook 的完整示例。
单个 MicroVM 配额限制
| 资源 | 限制 |
|---|---|
| 单个 MicroVM 最高 vCPU | 16 核 |
| 单个 MicroVM 最高内存 | 32 GB |
关于其他配额(如单账号并发 MicroVM 数、启动速率、镜像数量限制、最长运行时间、Auth Token 有效期、Lambda Network Connector (LNC) 限制、单 ENI 带宽等),请参阅 AWS 官方文档或 Service Quotas 控制台。大部分属于软限制,可通过提交 Service Quotas 申请或联系 Support 提高。
进阶功能
默认情况下,容器运行时仅拥有受限的 Linux Capabilities。只有在你的业务场景有明确需求时,才需要在创建镜像时指定 --additional-os-capabilities '["ALL"]':
- 挂载文件系统:如 EFS 或基于 FUSE 的文件系统。
- 嵌套容器:在 MicroVM 内部使用 containerd 运行其他容器。
- eBPF 程序:用于链路追踪、性能分析或自定义网络策略。
aws lambda-microvms create-microvm-image \
--name my-image \
--base-image-arn arn:aws:lambda:<region>:aws:microvm-image:al2023-1 \
--build-role-arn arn:aws:iam::<acct>:role/MicroVMBuildRole \
--code-artifact '{"uri":"s3://<bucket>/<key>.zip"}' \
--additional-os-capabilities '["ALL"]'
适用于 Agent 场景的 Shell Ingress 接入
如果需要以编程方式获取 Shell 访问权限(如 Agent 工作流、远程命令执行),可以挂载 SHELL_INGRESS 网络连接器:
# 1. 启用了 SHELL_INGRESS 运行 MicroVM
aws lambda-microvms run-microvm \
--image-identifier arn:aws:lambda:<region>:<acct>:microvm-image:my-image \
--execution-role-arn arn:aws:iam::<acct>:role/MicroVMExecutionRole \
--ingress-network-connectors '["arn:aws:lambda:<region>:aws:network-connector:aws-network-connector:SHELL_INGRESS"]' \
--idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300,"autoResumeEnabled":true}'
# 返回结果包含 microvmId 以及 endpoint
# 2. 签发 Shell 专用的 Auth Token(最长 60 分钟;建议按需设为最短时长)
# 请将 Token 视为敏感凭据——避免打日志、保存到文件或留存在 Shell 历史记录中。
TOKEN=$(aws lambda-microvms create-microvm-shell-auth-token \
--microvm-identifier microvm-... \
--expiration-in-minutes 15 \
--query 'authToken."X-aws-proxy-auth"' --output text)
# 3. 通过 WebSocket 建立连接(端口 8022)
# CLI 参数在进程列表 (ps aux) 中是可见的。在多租户/共享宿主机上,
# 建议通过文件描述符传递 Header 或使用包装脚本。
websocat "wss://<endpoint>/shell" \
-H "Sec-WebSocket-Protocol: lambda-microvms.authentication.${TOKEN}, lambda-microvms, lambda-microvms.port.8022"
进入 Shell 后将直接落入与正在运行的应用相同的容器中——共享网络命名空间、文件系统和进程树。这提供了基于 WebSocket 的 Shell 通道,客户端(终端或浏览器)可以通过该通道进行交互式 PTY 操作,非常契合需要深入 MicroVM 内部执行命令的 Agent 自动化工作流。
前提条件:运行 MicroVM 时必须挂载 SHELL_INGRESS,且调用方需要具备 lambda:CreateMicrovmShellAuthToken 权限。
已知限制
- 镜像规格单一 — 无法动态调整...





