
aws-lambda-managed-instances
热门评估、配置并将工作负载迁移至 AWS Lambda Managed Instances (LMI)。在用户自己的 AWS 账号下运行基于 EC2 的 Lambda 函数,同时由 AWS 自动处理资源创建、补丁更新、弹性伸缩、路由及负载均衡。当用户提问中包含 Lambda Managed Instances、LMI、容量提供程序(capacity provider)、多并发执行环境、基于 EC2 的 Lambda、持久化 Lambda 实例、PerExecutionEnvironmentMaxConcurrency、CapacityProviderConfig、通过专属实例消除冷启动、将标准 Lambda 迁移到托管实例,或是在配合 Savings Plans / 预留实例(Reserved Instances)下对比标准 Lambda 与 LMI 的成本时,触发此 Skill。
评估、配置并将工作负载迁移至 AWS Lambda Managed Instances (LMI)。在用户自己的 AWS 账号下运行基于 EC2 的 Lambda 函数,同时由 AWS 自动处理资源创建、补丁更新、弹性伸缩、路由及负载均衡。当用户提问中包含 Lambda Managed Instances、LMI、容量提供程序(capacity provider)、多并发执行环境、基于 EC2 的 Lambda、持久化 Lambda 实例、PerExecutionEnvironmentMaxConcurrency、CapacityProviderConfig、通过专属实例消除冷启动、将标准 Lambda 迁移到托管实例,或是在配合 Savings Plans / 预留实例(Reserved Instances)下对比标准 Lambda 与 LMI 的成本时,触发此 Skill。
AWS Lambda Managed Instances (LMI)
在用户自己的 AWS 账号下的 EC2 实例上运行 Lambda 函数,同时由 AWS 托管资源创建、补丁更新、弹性伸缩、路由与负载均衡。兼具 Lambda 极佳的开发者体验与 EC2 的灵活计价和硬件选择。
最佳搭配:结合 AWS MCP server 使用,可获得沙盒化的 CLI 执行环境与审计日志。所有指引同样适用于标准 AWS CLI 或 SAM CLI。
注意:在生产环境部署前,请对照 AWS 最新官方文档核对所在地区的可用性、配额及可用的实例类型。
快速决策:LMI 适合当前工作负载吗?
| 信号 | 强烈推荐使用 LMI | 更适合标准 Lambda |
|---|---|---|
| 流量 | 稳定、可预测,每月请求量 5000 万以上 | 突发性高、不可预测,存在长时间无流量的平段 |
| 成本 | 规模化且时长占用高的持续性支出 | 调用量低或零星调用 |
| 冷启动 | 零容忍(预置容量下 LMI 可彻底消除冷启动) | 可接受 |
| 算力 | 需要最新 CPU、特定实例系列、高网络带宽或 GPU | 标准 Lambda 的内存/CPU 已够用 |
| 隔离性 | 用户账号内专属 EC2 实例,完全掌控 VPC | 可接受共享的 Firecracker micro-VM |
| 缩容至零 | 不支持自动缩容至零(但可使用 AWS 提供的方案创建自定义定时策略) | 必须支持(空闲时 0 扣费) |
| 代码改造 | 线程安全(Node.js/Java/.NET)或任意 Python 代码 | 非线程安全代码且重构成本极高 |
路由指引
仅读取与用户当前任务匹配的单份参考文件,切勿预加载多份参考资料。
| 用户需求 | 操作 |
|---|---|
| 成本对比、定价分析、Savings Plans、预留实例(Reserved Instances) | 读取 cost-comparison.md |
| 实例类型、内存规格配比、vCPU 比例、伸缩调优、容量提供程序配置 | 读取 configuration-guide.md |
| 线程安全、并发模型、代码审查清单、多并发准备工作 | 读取 thread-safety.md |
| 改造前后代码示例、特定运行时的迁移方案、连接池管理 | 读取 migration-patterns.md |
| IAM 角色、VPC 配置、CLI 命令、SAM 模板、CDK 示例 | 读取 infrastructure-setup.md |
| 报错、限流、调试排错、部署卡死 | 读取 troubleshooting.md |
排错速记(诊断问题时务必提及):
- 容量提供程序卡在 CREATING 状态 → 最常见的原因是私有子网缺少 NAT 网关路由(实例拉取镜像及与 Lambda 服务通信需要出站公网访问)
- 函数没有触发伸缩 → 检查是否已发布版本(PublishToLatestPublished: true)
- 内存溢出/报错 → LMI 内存最小值限制为 2048 MB
工作流
第 1 步:评估工作负载
在给出建议前,先收集以下信息:
- 流量模式:平稳还是突发?每秒请求数(RPS)是多少?
- 当前成本:每月 Lambda 支出?是否有现成可用的 Savings Plans?
- 运行时环境:Node.js、Java、.NET 还是 Python?
- 内存/CPU 需求:需要多少内存?是 CPU 密集型还是 I/O 密集型?
- 执行时长:平均时长与 P99 延迟表现?
- 并发就绪状态:代码是否线程安全?是否存在共享
/tmp路径?是否每次调用都新建数据库连接? - VPC 配置:是否已在 VPC 内?是否需要访问私有资源?
推荐使用 LMI 时,务必强调:为了保障跨可用区(AZ)的高可用容灾,最少必须保持 3 个执行环境(生产环境中不得低于 3)。
第 2 步:构建成本对比方案
必须项:在推荐 LMI 前,必须先出具成本对比。
经验法则:流量稳定且月请求量达到 5000 万到 1 亿以上时,LMI 开始具备成本优势。建议使用 LMI 价格计算器 进行精确对比。
第 3 步:配置部署参数
- 实例系列(支持 400+ 种类型,规格 .large 起步):C 系列(计算型)、M 系列(通用型)、R 系列(内存型)。首选 ARM (Graviton) 以获取最佳性价比。
- 使用 Graviton 实例时,必须在函数配置中将
Architectures: [arm64]设置一致。 - 内存与 vCPU 配比:2:1(计算型)、4:1(通用型,默认)、8:1(内存型)。内存最小 2 GB,最大 32 GB。
- 单 vCPU 多并发上限:Node.js 64、Java 32、.NET 32、Python 16。这些是系统硬性限制 —— 实际配置项为
PerExecutionEnvironmentMaxConcurrency(针对单个执行环境,而非单 vCPU)。 - 对于 I/O 密集型工作负载:使用运行时默认值或更高的
PerExecutionEnvironmentMaxConcurrency(例如 Node.js 设为 10),因为请求在等待网络返回时 CPU 占用极低。 - 对于 CPU 密集型工作负载:将
PerExecutionEnvironmentMaxConcurrency设置为每个 vCPU 1-2,因为单个请求就会吃满 CPU。 - 伸缩配置:
MinExecutionEnvironments(默认 3)、MaxVCpuCount(可选,默认 400 —— 最佳实践建议显式指定)、TargetResourceUtilization。
第 4 步:迁移代码
审查代码的并发安全性。LMI 每个执行环境会同时并发处理多个请求调用:
- Python:基于进程隔离 —— 全局变量不共享。无需调整线程安全,重点关注
/tmp冲突和内存规格大小。 - Node.js:Worker 线程机制 —— Worker 内部共享全局变量。需要确保异步逻辑安全。
- Java/.NET:操作系统线程/Task 机制 —— Handler 在多线程间共享。需要实现完整的线程安全。
第 5 步:搭建基础设施
- 创建两个 IAM 角色:执行角色(供函数使用)和操作角色(供容量提供程序管理 EC2)
- 配置跨 3 个以上可用区的 VPC 子网
- 创建容量提供程序,配置 VPC 及伸缩上限
- 创建或更新函数,关联该容量提供程序
- 发布一个新版本(将触发 EC2 实例的预置)
第 6 步:验证与上线切流
- 优先部署到非生产环境验证
- 监控 CloudWatch 指标:CPU 利用率、内存、并发数、限流率
- 利用加权别名(Weighted Aliases)平滑切流(10% → 50% → 100%)
- 跑完 1-2 周生产环境数据后重新对比成本
- 系统稳定后,下线标准 Lambda
最佳实践
计价规则(讨论成本时务必提及)
- 三大费用组成:EC2 实例运行时长费用 + 15% 托管费 + $0.20/百万次请求
- Savings Plans:Compute Savings Plans 适用于 EC2 计费部分(最高可享 60-72% 折扣)
- 15% 托管费:AWS 帮你在后台搞定资源创建、补丁更新、伸缩和生命周期管理,此费用按 EC2 原价的 15% 额外收取
弹性伸缩(讨论伸缩或流量时务必提及)
- LMI 能瞬间消化 50% 的突发流量,并在 5 分钟内将容量翻倍 —— 如果流量翻倍的速度更快,请求将被限流
- 标准 Lambda 支持瞬间冲到 3000 并发 —— LMI 无法达到这个瞬时爆发力
- 在已知流量高峰前,提前通过设置
MinExecutionEnvironments进行预热 - MaxVCpuCount(默认 400)—— 建议显式设定作为成本兜底上限
- 按需防缩:非高峰时段可降低
MinExecutionEnvironments来省钱(但为了 AZ 容灾,最少不得低于 3)
实例选型 sizing
- 每台实例保留 1 vCPU + 1 GB 内存 用于操作系统开销(函数无法使用这部分资源)
- 实际可用容量 = 实例总规格 - 系统开销
配置建议
- 建议从 4:1 的内存配比和运行时默认并发度开始尝试
- 除非存在 x86 架构依赖,否则一律优先使用 ARM (Graviton)
- 除非有特定硬件需求,否则交由 Lambda 自动选择最佳 EC2 实例类型
- 设置
MaxVCpuCount防范成本失控 - 切勿将
MinExecutionEnvironments设为 3 以下(会破坏多可用区高可用容灾)
代码迁移
- 优先从 I/O 密集型函数切入(能从多并发中获得最大收益)
- 在挂载到容量提供程序前,务必审查代码并发安全性
- 使用加权别名平滑灰度切流
- 所有日志输出中必须包含 request ID
- 数据库连接池和 SDK 客户端对象必须在 Handler 函数体外部进行初始化
运维规范
- 针对限流率 > 1% 和 CPU > 80% 配置 CloudWatch 告警
- 为 14 天的实例自动轮换预留心理预期
- 绝对不要手动去销毁 LMI 运行的 EC2 实例(需要销毁请删除容量提供程序)
- 务必发布版本 —— 未发布的函数无法在 LMI 上运行
限制与规格速查
| 资源 | 限制 / 规格 |
|---|---|
| 内存范围 | 2 GB 最小值,32 GB 最大值 |
| 执行环境数 | 最少 3 个(MinExecutionEnvironments,多可用区容灾要求) |
| 实例生存周期 | 14 天(到期自动替换) |
| 单 vCPU 并发数 | 64 (Node.js), 32 (Java/.NET), 16 (Python) |
| 支持的运行时 | Node.js 22+, Java 21+, .NET 8+, Python 3.13+, Rust (provided.al2023) |
| 实例系列 | C、M、R 系列(.large 及以上规格) |
| 弹性伸缩 | 突发缓冲容量等于 TargetResourceUtilization 剩余的空闲容量;新实例在几分钟内启动 |
安全考量
- 操作角色权限收紧:在信任策略中添加
aws:SourceAccount和aws:SourceArn条件,防止混淆代理(confused deputy)攻击。 - VPC 出站限制:将安全组的出站规则精确限制在 VPC Endpoint 安全组或 AWS Prefix Lists,避免直接放行 0.0.0.0/0。
- 凭据管理:数据库凭据请使用 AWS Secrets Manager 或 Parameter Store —— 严禁将敏感信息直接写在环境变量中。
- 数据加密:对静态数据启用 SQS SSE、CloudWatch Logs 加密 (KMS) 以及 S3 默认加密。
- 日志规范:设置 CloudWatch Log group 日志保留策略。避免记录 PII(个人身份信息)或敏感凭据。为 Lambda 开启 CloudTrail 数据事件跟踪。
- 实例轮换:14 天自动轮换机制保证了安全补丁无需人工干预即可自动应用。
- 参考资料:Lambda 安全最佳实践,IAM 最佳实践
关联文件
| 文件 | 内容说明 |
|---|---|
| cost-comparison.md | 价格分析、保本点计算、Savings Plans / 预留实例影响评估 |
| configuration-guide.md | 实例选型、内存配比、伸缩调优、容量提供程序配置 |
| thread-safety.md | 各运行时的并发模型、代码审查 checklist、Powertools 兼容性 |
| migration-patterns.md | 各运行时迁移前后代码对比、连接池管理、平滑灰度切流 |
| infrastructure-setup.md | IAM 角色、VPC 配置、SAM 模板、CLI 常用命令 |
| troubleshooting.md | 常见报错、限流解决、调试排错、部署卡死排查 |





