aws-lambda-managed-instances

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。

2253Star
225Fork
更新于 2026/8/6
SKILL.md
只读
名称
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。

版本
1

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 步:评估工作负载

在给出建议前,先收集以下信息:

  1. 流量模式:平稳还是突发?每秒请求数(RPS)是多少?
  2. 当前成本:每月 Lambda 支出?是否有现成可用的 Savings Plans?
  3. 运行时环境:Node.js、Java、.NET 还是 Python?
  4. 内存/CPU 需求:需要多少内存?是 CPU 密集型还是 I/O 密集型?
  5. 执行时长:平均时长与 P99 延迟表现?
  6. 并发就绪状态:代码是否线程安全?是否存在共享 /tmp 路径?是否每次调用都新建数据库连接?
  7. 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 步:搭建基础设施

  1. 创建两个 IAM 角色:执行角色(供函数使用)和操作角色(供容量提供程序管理 EC2)
  2. 配置跨 3 个以上可用区的 VPC 子网
  3. 创建容量提供程序,配置 VPC 及伸缩上限
  4. 创建或更新函数,关联该容量提供程序
  5. 发布一个新版本(将触发 EC2 实例的预置)

第 6 步:验证与上线切流

  1. 优先部署到非生产环境验证
  2. 监控 CloudWatch 指标:CPU 利用率、内存、并发数、限流率
  3. 利用加权别名(Weighted Aliases)平滑切流(10% → 50% → 100%)
  4. 跑完 1-2 周生产环境数据后重新对比成本
  5. 系统稳定后,下线标准 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:SourceAccountaws: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 常见报错、限流解决、调试排错、部署卡死排查