aws-lambda-microvms

aws-lambda-microvms

热门

在 AWS Lambda MicroVMs 上构建、运行、调试与运维应用程序。这是一种运行在容器内部、基于 Firecracker 隔离且支持快照恢复的 Serverless 计算环境,单次最长可运行 8 小时。适用于需要强租户隔离、独立 Serverless 计算、沙箱计算或安全多租户执行的业务场景。同时也非常适合 AI/Agent 代码执行沙箱、交互式代码 Playground 与 Notebook(如 Jupyter、REPL 以及运行用户代码的开发环境)、强化学习环境、多租户 CI 执行器与 Build Runner、有状态的游戏或仿真服务器、以及独立的安全扫描器。当业务需要长会话、真实端口监听服务(gRPC、WebSocket、自定义 TCP 协议)、空闲期状态保存(挂起/恢复)、容器级权限访问(FUSE、eBPF、自定义系统调用)或会话亲和性路由时,也是理想之选。

2253Star
225Fork
更新于 2026/8/6
SKILL.md
只读
名称
aws-lambda-microvms
描述

在 AWS Lambda MicroVMs 上构建、运行、调试与运维应用程序。这是一种运行在容器内部、基于 Firecracker 隔离且支持快照恢复的 Serverless 计算环境,单次最长可运行 8 小时。适用于需要强租户隔离、独立 Serverless 计算、沙箱计算或安全多租户执行的业务场景。同时也非常适合 AI/Agent 代码执行沙箱、交互式代码 Playground 与 Notebook(如 Jupyter、REPL 以及运行用户代码的开发环境)、强化学习环境、多租户 CI 执行器与 Build Runner、有状态的游戏或仿真服务器、以及独立的安全扫描器。当业务需要长会话、真实端口监听服务(gRPC、WebSocket、自定义 TCP 协议)、空闲期状态保存(挂起/恢复)、容器级权限访问(FUSE、eBPF、自定义系统调用)或会话亲和性路由时,也是理想之选。

版本
1

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。

典型工作流

  1. 检查区域可用性——确认目标 Region 是否已支持 Lambda MicroVMs(运行 aws lambda-microvms list-managed-microvm-images)。你的 S3 产物存储桶和网络连接器必须与镜像位于同一 Region。
  2. 打包应用:在根目录放好 Dockerfile 并打成 zip 包,上传至 S3(需与镜像在同一 Region)。
  3. 实现生命周期 Hook(可选,但强烈建议):在指定端口(常用 9000)上暴露 HTTP 接口,处理 /run/resume/suspend/terminate/ready/validate 等请求。
  4. CreateMicrovmImage:指定 S3 产物路径、托管基础镜像(Base Image)以及构建角色。Lambda 会把 Dockerfile 编译为 OCI 镜像,启动应用并调用 /ready,然后对磁盘与内存打快照,最后可选地调用 /validate 进行校验。Lambda 会定期发布新的托管镜像版本,建议用户及时基于最新版本重新构建,确保镜像版本保持最新。
  5. RunMicrovm:选择镜像版本,绑定 executionRoleArn,配置 idlePolicy、进出站网络连接器以及可选的 runHookPayload。创建成功后会返回 endpoint URL 和 microvmId
  6. CreateMicrovmAuthToken:获取访问 Token(最长 60 分钟有效期),并在 allowedPorts 中指定 Token 允许访问的端口。发送请求时带着 HTTP 头 X-aws-proxy-auth: <token>
  7. Suspend / Resume / Terminate:可以通过 API 手动触发,也可以让 idlePolicy 自动管理(通过配置 maxIdleDurationSecondssuspendedDurationSecondsautoResumeEnabled)。

核心 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 权限。

已知限制

  • 镜像规格单一 — 无法动态调整...