FinOps + DevOps 双Agent 协作:AI驱动的云成本优化实战¶
📊 Level ⭐⭐⭐⭐ | 10.7KB
Background:本文基于 AWS China Blog 2026-06-29 发布的实战案例,由亚马逊云科技客户解决方案经理倪晓峻和李刚撰写。案例展示 FinOps Agent(Preview)与 DevOps Agent(GA)通过结构化交接协议实现端到端云成本优化。
三个独有贡献(不应合并到现有 entity)¶
- 双Agent 结构化交接协议 — FinOps Agent 识别能力边界后自动生成排查清单(含 CLI 命令、决策条件、风险提示),作为 FinOps→DevOps 的协作桥梁
- 边界意识设计模式 — Agent 主动声明"我能做什么/不能做什么",在用户要求越权操作时坚守只读边界
- 18个月隐性成本案例 — SageMaker Canvas Quick Setup 向导创建的会话 24/7 空转,累计浪费 $47,629,揭示 Quick Setup 的"便利陷阱"
双Agent 协作架构¶
关注点分离¶
| 维度 | FinOps Agent | DevOps Agent |
|---|---|---|
| 职责 | 费用异常发现、根因分析 | 运行时验证、依赖分析、资源清理 |
| 权限 | 只读(即使用户要求执行删除也拒绝) | 可写(需用户确认后执行) |
| 数据源 | CloudWatch 账单数据 | CloudTrail 审计日志、SageMaker API |
| 边界 | 无法查询运行时状态、无法执行操作 | 无法进行费用趋势分析 |
结构化交接清单¶
FinOps Agent 生成的排查清单是整个协作的关键:
FinOps Agent 输出 → DevOps Agent 输入:
1. 目标资源:3个区域的 Canvas 会话
2. 验证命令:aws sagemaker list-apps ...
3. 决策条件:如果无活跃任务 → 可安全关闭
4. 预期收益:~$4,100/月
5. 风险提示:需确认无外部依赖
设计哲学¶
- 关注点分离 — 分析归分析,执行归执行
- 最小权限 — FinOps 只读,DevOps 可写但需用户确认
- 结构化交接 — 通过排查清单传递上下文,避免信息丢失
- 人在回路 — 关键决策(是否删除)由人类做出
案例详情¶
问题发现¶
FinOps Agent 对测试账号进行全景扫描后发现: - MTD 总花费 $4,211.96(日均 $351) - Top 1 服务:Amazon SageMaker,占比 36%($1,515) - 98.5% 来自 Canvas:Session-Hrs(Canvas 会话时长)
根因分析¶
- 3 个区域的 SageMaker Canvas 会话 24/7 持续运行
- 所有 Domain 命名遵循
QuickSetupDomain-{timestamp}模式 - 使用 IAM 认证模式,未绑定具体用户身份
- 历史累计浪费:$47,629(18个月)
DevOps Agent 验证与清理¶
- 运行时状态验证 — 并行查询 3 个区域,确认 Canvas 会话完全空闲
- 关联资源扫描 — 识别 34 个关联资源(3 EFS + 3 EMR + 8 IAM Roles + 6 S3 桶等)
- 依赖关系评估 — 确认与现有 Notebook 实例完全独立
- 清理脚本生成 — 按依赖顺序排列的 8 步清理脚本(先删 App → Profile → Domain)
- 执行后验证 — 再次扫描确认清理完成
SageMaker Canvas 隐性成本陷阱¶
- 计费模型:按会话运行时间(~$1.90/小时),非按使用量
- Quick Setup 向导创建的环境默认不自动关闭
- 多区域部署成倍放大问题
- 建议:定期审计 Canvas/Studio 会话状态,超过 7 天无活跃任务设置自动告警
提示词设计技巧¶
- 渐进式深入 — 全景扫描 → 聚焦根因 → 历史追溯
- 一句话传达目标+约束+期望 — "我计划回收...同时帮我确认...确保不影响生产"
- 适时转向 — Agent 无法提供更多信息时果断转向
- 了解风险后再授权 — 先理解"不能做"vs"不应该做",再授权执行
深度分析¶
为什么 FinOps+DevOps 必须双 Agent 分工¶
传统 FinOps 流程的结构性矛盾在于:发现问题靠账单数据,解决问题靠运行时与审计数据。费用数据只能回答"花了多少钱",无法回答"为什么在花钱";确认浪费后还要评估依赖关系、避免影响生产——这正是 FinOps 与 DevOps 的分界线。人工流程体现为"提工单 → 运维排查 → 审批 → 清理",耗时数天到数周,期间浪费持续产生。双 Agent 设计把这条分界线内化为协议边界:FinOps Agent 专注账单维度的异常发现与根因分析,DevOps Agent 专注运行时验证、依赖分析与清理执行,将闭环从"天级"压缩到"小时级",正是 多Agent协作模式 关注点分离原则的具体化。
结构化交接协议的工程价值¶
案例中最具工程意义的时刻,是 FinOps Agent 被问及 Canvas 运行时状态时明确回答"那是运行时/操作数据,不是账单数据"——没有猜测或编造,而是识别出能力边界。随后生成的排查清单本质上是一份机器可读的协作协议,含五个字段:目标资源、验证命令、决策条件、预期收益、风险提示。这解决了多 Agent 交接信息丢失的经典问题:接收方拿到的不是模糊的"去查一下",而是可直接执行的 CLI 命令和可判定的决策条件。且清单由输出方主动生成,不依赖共享内存或中心编排器,与 Agent 角色特化 以显式工件交接的思路相呼应。
Agent 自主执行清理动作的边界设计¶
本案例的权限模型呈三层结构:FinOps Agent 只读(即使用户要求删除 Canvas,也回答"我是只读的 FinOps 成本分析工具");DevOps Agent 可生成清理脚本但自身无删除权限,实际执行由用户运行其 CLI 命令完成;是否删除由人决策。文章称这不是缺陷而是安全设计。另一个细节:用户授权前先追问"是技术限制还是存在风险"——刻意区分"不能做"与"不应该做"之后才授权清理。8 步清理脚本同样体现边界约束:按依赖顺序(先 App → Profile → 最后 Domain)、步骤间加等待、明确排除 VPC/子网/KMS 共享资源、S3 桶标记确认后再删。
隐性成本发现的模式归纳¶
$47,629 的浪费持续 18 个月无人察觉,源于四个叠加的陷阱模式:其一,计费与使用量脱钩——Canvas 按会话运行时间计费(~$1.90/小时),会话处于 InService 即持续计费,即使从未训练模型;其二,便利工具副作用——Quick Setup 创建的环境默认不自动关闭,且关联生成大量用户不知道其存在的辅助资源;其三,命名与归属缺失——QuickSetupDomain-{timestamp} 命名、默认 User Profile 不绑定用户,难以追溯责任人;其四,多区域对称部署放大——3 个区域费用几乎完全对称、日均稳定无波动,反而因"看起来正常"躲过异常检测。检测信号是"费用曲线过于平稳"而非"突然飙升",与突发告警式监控形成互补。
实践启示¶
- 把"知道自己不知道什么"当作 Agent 的一等能力:FinOps Agent 在能力边界处主动生成协作清单而非编造答案;工程设计中应显式声明每个 Agent 的能力边界表。
- 交接走结构化工件,不走对话摘要:五字段排查清单(目标资源/验证命令/决策条件/预期收益/风险提示)可直接复用为多 Agent 协作的交接模板。
- 写权限分层下发,删除类操作由人执行:Agent 生成脚本、用户执行命令,既保留自动化效率又将不可逆操作的控制权留给人;授权前先让 Agent 解释"哪些必须手动、为什么"。
- 把 Quick Setup 类便利工具纳入定期审计:按前缀搜索向导生成的资源、检查 IAM Roles 最后使用时间识别僵尸角色。
- 用 SCP 和标签强制弥补归属缺失:组织层面限制 Quick Setup 使用或强制添加 Owner 标签;对 Canvas/Studio 等按会话计费的服务,超过 7 天无活跃任务即设自动告警。
与现有 FinOps 实体差异化¶
| 维度 | 本实体(双Agent协作) | strands-agents-cloud-cost-optimizer | amazon-quick-bedrock-agentcore-finops-chat |
|---|---|---|---|
| 架构 | FinOps + DevOps 双Agent | 单Agent(Strands SDK) | Quick Chat + Bedrock AgentCore |
| 独特价值 | 结构化交接协议 + 边界意识 | Strands SDK 框架实现 | MCP Server 自然语言查询 |
| 执行能力 | DevOps Agent 可执行清理 | 分析+建议 | 只读查询 |
| 案例 | $47,629 隐性成本发现 | 通用成本优化 | 多账号成本查询 |
→ 原文存档 → Strands 云成本优化 → Quick + AgentCore FinOps