mcpField
A
aws-lambda-managed-instances

aws-lambda-managed-instances

github.com/aws云与 DevOps3.3k5.8k 次安装今天更新
代码仓库

关于 aws-lambda-managed-instances

aws-lambda-managed-instances 是运行 Lambda Event Functions 于用户账户 EC2 实例上的指导技能,涵盖适用性、成本比较、配置、迁移与故障排查;基础设施运维由 AWS 管理。

主要功能

  1. 01评估工作负载适用性
  2. 02指导成本比较
  3. 03介绍实例与并发配置
  4. 04提供迁移和基础设施指导
  5. 05列出故障排查要点

适用场景

  1. 01评估稳定流量或长时运行的 Lambda 工作负载
  2. 02比较 Lambda Managed Instances 成本
  3. 03配置容量提供方和实例规格
  4. 04迁移前检查并发安全准备情况

MCP 相关

该技能建议使用 AWS MCP 服务进行沙盒化 CLI 执行和审计记录,也支持 AWS CLI 或 SAM CLI。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aws/agent-toolkit-for-aws --skill aws-lambda-managed-instances

安装后在 Claude Code 中输入/aws-lambda-managed-instances确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/sqs-processor/
template.yaml
references/
configuration-guide.md
cost-comparison.md
infrastructure-setup.md
migration-patterns.md
thread-safety.md
troubleshooting.md

详细介绍

AWS Lambda 托管实例(LMI)

在用户账户的 EC2 实例上运行 Lambda Event Functions,同时由 AWS 管理资源预置、补丁、扩缩容、路由和负载均衡。结合 Lambda 的开发体验与 EC2 的定价和硬件选项。

最适合搭配 AWS MCP 服务,用于沙箱化 CLI 执行和审计日志记录。所有指导也适用于标准 AWS CLI 或 SAM CLI。

注意: 在生产部署前,请根据当前 AWS 文档确认区域可用性、配额和实例类型选项。

快速判断:LMI 适合此工作负载吗?

信号LMI 非常适合Lambda Event Functions 更合适
流量稳定、可预测,每月 5,000 万次以上请求流量突发、不可预测,且长时间没有流量
执行时长超过 15 分钟的长时间运行异步任务/ESM 作业(LMI 最长可达 90 分钟):ETL/数据处理、媒体转码、ML 推理、金融计算、网页抓取短时调用;需要超过 15 分钟的同步工作(任何 Lambda 均不支持)
成本大规模运行时长带来的高额开支调用量低或零星
冷启动不可接受(LMI 可消除预置容量的冷启动)可以接受
计算最新 CPU、特定系列、高网络带宽、GPU 需求Lambda Event Functions 的内存/CPU 已足够
隔离用户账户中的专用 EC2 实例,完全控制 VPC可以接受共享的 Firecracker micro-VM
缩容至零无法缩容至零,但可使用 AWS 提供的解决方案创建自定义计划必须支持(空闲时无需付费)
代码就绪情况线程安全(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. 流量模式:稳定还是突发?每秒请求数是多少?
  2. 当前成本:每月 Lambda 支出是多少?是否已有 Savings Plans?
  3. 运行时:Node.js、Java、.NET 还是 Python?
  4. 内存/CPU:需要多少内存?工作负载是受 CPU 限制还是受 I/O 限制?
  5. 执行时长:平均值和 P99 分别是多少?
  6. 并发准备情况:是否线程安全?是否使用共享的 /tmp 路径?是否为每次调用创建数据库连接?
  7. VPC:是否已位于 VPC 中?是否需要访问私有资源?

超过 15 分钟的长时间运行异步/ESM 作业非常适合 LMI —— LMI 支持异步和事件源映射调用的函数超时时间最长达 90 分钟(5400s),适用于 ETL/数据处理、媒体转码、ML 推理、金融计算和网页抓取。时长是这里的关键差异点,而不仅仅是成本。

推荐 LMI 时,务必提及:为确保 AZ 弹性,至少需要 3 个执行环境(生产环境中不能少于 3 个)。

步骤 2:进行成本比较

必须先进行成本比较,再推荐 LMI。

经验法则:在流量稳定且每月请求量达到 5,000 万至 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。
  • 函数超时时间最长可设为 5400s(90 分钟) —— 通过现有的 Timeout 字段设置(CLI 使用 update-function-configuration --timeout 5400,SAM/CFN 使用 Timeout: 5400,或通过控制台设置)。使用现有的 Timeout 字段 —— 不需要单独的 API、属性、标签或代码更改。仅适用于异步和 ESM 调用;同步和按需调用仍限制为 15 分钟(即使 Timeout 设置得更高;GetFunctionConfiguration 仍会报告配置值)。Init 阶段仍限制为 15 分钟。Durable Functions:每个步骤最长可运行 90 分钟;多步骤工作流最长可持续 1 年。
步骤 4:迁移代码

检查代码的并发安全性。LMI 会在每个执行环境中并发运行多个调用:

  • Python:基于进程的隔离 —— 全局变量不会共享。无需进行线程安全方面的更改。重点关注 /tmp 冲突和内存配置。
  • Node.js:使用 Worker 线程 —— 同一 worker 内共享全局变量。需要确保异步安全。
  • Java/.NET:使用 OS 线程/Tasks —— 处理程序会在线程间共享。需要确保全面的线程安全。
步骤 5:设置基础设施
  1. 创建两个 IAM 角色:执行角色(供函数使用)和操作员角色(用于管理容量提供程序 EC2)
  2. 配置 VPC,并在 3 个或更多 AZ 中设置子网
  3. 创建容量提供程序,并配置 VPC 和扩缩限制
  4. 创建一个关联容量提供程序的新函数
  5. 发布一个版本(触发实例预置)
步骤 6:验证并切换
  1. 先部署到非生产环境
  2. 监控 CloudWatch:CPU 利用率、内存、并发数、限流率
  3. 在调用服务或路由层逐步切换流量(10% → 50% → 100%)
  4. 使用 1-2 周的生产数据比较成本
  5. 稳定后停用 Lambda Event Function

最佳实践

定价(讨论成本时务必提及)
  • 三个组成部分:EC2 实例时长 + 15% 管理费 + 每 100 万次请求 $0.20
  • Savings Plans:Compute Savings Plans 适用于 EC2 部分(最高可享 60-72% 折扣)
  • 15% 管理费:在 EC2 成本之外收取,用于支付 AWS 在配置、修补、扩缩容和生命周期管理方面的服务
扩缩容(讨论扩缩容或流量时务必提及)
  • LMI 可立即吸收 50% 的流量峰值,并在 5 分钟内将容量翻倍——如果流量增长速度更快且超过当前容量的两倍,请求就会被限流
  • Lambda Event Functions 可立即突增至 3000;LMI 无法达到这一水平
  • 对于已知的流量峰值,可通过 MinExecutionEnvironments 预热
  • MaxVCpuCount(默认值为 400)——明确设置为成本上限
  • 形状调整:降低 MinExecutionEnvironments,以在非高峰时段降低容量(为确保 AZ 弹性,最低为 3)
实例规格
  • 每个实例预留 1 个 vCPU + 1 GB 用于操作系统开销(函数无法使用)
  • 可用容量 = 总容量 - 开销
配置
  • 从 4:1 比率和运行时默认并发数开始
  • 除非存在 x86 依赖,否则使用 ARM(Graviton)
  • 除非需要特定硬件,否则让 Lambda 选择实例类型
  • 设置 MaxVCpuCount 以控制成本上限
  • 切勿将 MinExecutionEnvironments 设为低于 3(会破坏 AZ 弹性)
迁移
  • 从 I/O 密集型函数开始(最能从多并发中受益)
  • 将函数关联到容量提供程序之前,检查代码的并发安全性
  • 在调用服务或路由层逐步切换流量
  • 在所有日志语句中包含请求 ID
  • 在处理程序之外初始化数据库连接池和 SDK 客户端
运维
  • 针对限流率 > 1% 和 CPU > 80% 设置 CloudWatch 告警
  • 为 14 天的实例轮换(自动执行)做好计划
  • 切勿手动终止 LMI EC2 实例(应删除容量提供程序)
  • 始终发布一个版本——未发布的函数无法在 LMI 上运行
长时调用(异步调用/ESM 最长 90 分钟)
  • SQS:队列可见性超时 MUST ≥ 函数超时时间(对于 90 分钟的函数,≥ 5400s)。ESM 会在创建和更新时验证此项——但 ESM 创建后,SQS 可见性超时和函数超时时间可以分别更改(在 ESM API 之外),从而绕过检查并再次导致二者不匹配,使消息重新出现并触发重复调用。
  • Kinesis / DynamoDB Streams:启用 部分批次失败报告(ReportBatchItemFailures),并调整最大批处理窗口和并行化因子——否则,一条记录失败就会导致整个批次重试,重新执行长达约 80 分钟的已完成工作。
  • 异步调用:失败或超时的调用会遵循重试策略(默认最多重试 2 次),之后路由到 DLQ / 失败目标。
  • 并非所有 ESM 来源都符合条件:Amazon MQ 和 Amazon DocumentDB ESM 仍限制为 15 分钟;只有 SQS、Kinesis 和 DynamoDB Streams ESM(以及异步调用)支持 90 分钟。
  • 可观测性保持不变:CloudWatch、CloudTrail(完成/超时时产生一个 Invoke 事件)和 X-Ray(单条跟踪)的行为均相同。使用 X-Ray 子分段查找接近 90 分钟上限时的缓慢阶段。
长时间运行的网络连接(函数现在会运行数十分钟)
  • NAT Gateway 空闲超时 — 通过 NAT Gateway 建立的长连接 TCP 连接应定期发送保活数据包。
  • 空闲连接超时(RDS、ElastiCache、外部 API)— 为可能在计算过程中变为空闲状态的连接添加连接健康检查/重连逻辑。
  • DNS TTL — 定期重新解析外部主机名;AWS SDK 会执行此操作,但自定义 HTTP 客户端可能会缓存超过 TTL 的时间。
  • 凭证 — 使用执行角色的临时凭证(由运行时自动刷新)。对于非 IAM 密钥(数据库密码、API 密钥),请通过 SDK 缓存和定期刷新,从 AWS Secrets Manager 或 SSM Parameter Store 中获取;切勿在代码或环境变量中嵌入长期有效的凭证。

限制速查

资源限制
内存最低 2 GB,最高 32 GB
异步/ESM 调用超时90 min(5400s),通过现有的 Timeout 字段设置
同步 + 按需调用超时15 min
初始化阶段15 min
ESM 源的上限为 15 minAmazon MQ、Amazon DocumentDB(SQS/Kinesis/DynamoDB Streams 为 90 min)
执行环境最少 3 个(MinExecutionEnvironments、AZ 弹性)
实例生命周期14 天(自动替换)
并发数/vCPU64(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 条件,以防止混淆代理攻击。
  • VPC 出站流量:将安全组出站范围限定为 VPC 端点安全组或 AWS 前缀列表,而不是 0.0.0.0/0。
  • 凭证:使用 AWS Secrets Manager 或 Parameter Store 存储数据库凭证;切勿将机密存放在环境变量中。
  • 加密:为任何静态数据启用 SQS SSE、CloudWatch Logs 加密(KMS)和 S3 默认加密。
  • 日志记录:设置 CloudWatch Log 组保留策略。避免记录 PII 或凭证。为 Lambda 启用 CloudTrail 数据事件。
  • 实例轮换:14 天自动轮换可确保应用安全补丁,无需手动干预。
  • 参考资料:Lambda 安全最佳实践、IAM 最佳实践

文件

文件内容
cost-comparison.md定价分析、盈亏平衡计算、Savings Plans/RI 的影响
configuration-guide.md实例选择、内存比例、扩缩容调优、容量提供程序配置
thread-safety.md各运行时的并发模型、代码审查清单、Powertools 兼容性
migration-patterns.md各运行时的迁移前后代码、连接池、渐进式切换
infrastructure-setup.mdIAM 角色、VPC 设置、SAM 模板、CLI 命令
troubleshooting.md常见错误、限流、调试、卡住的部署

评论

支持 Markdown