利用MCP、Bedrock Nova构建自主型AWS SRE Copilot,并实现人工审批流程。
开发用于事故调查的SRE代理:一个可提供CloudWatch和DynamoDB工具的MCP服务器、Bedrock Converse循环机制、模型可移植性,以及每个修复方案都需要人工审核。
来源: Building an Autonomous AWS SRE Copilot: Giving LLMs “Hands and Eyes” in the Cloud with MCP
大约一年来,业界一直专注于ChatOps:将大型语言模型集成到Slack或Telegram中,作为CI/CD流程的智能封装层。不过,聊天机器人仅仅是其可见的部分,真正的企业价值在于从被动的聊天机器人转向自主代理。基于Amazon Bedrock(Nova)、模型上下文协议(MCP)及AWS构建的自主站点可靠性工程(SRE)辅助工具展现了这一愿景。它不仅能触发流程,还能自主分析实时生产故障,获取指标与日志,找出根本原因并应用修复措施,所有操作都在有人监管的安全信任范围内进行。
托管方案:AWS DevOps Agent
在构建任何定制化解决方案之前,架构师应先确认AWS是否已提供类似功能。实际上AWS确实有相关产品。AWS在2025年的re:Invent大会上推出了DevOps Agent,将于2025年12月进入预览阶段,并在2026年3月全面上市。这是一个功能强大的多代理系统,旨在实现AWS环境中的自动故障响应。
它远远超越了像DevOps Guru这样的旧工具:
- 自动故障响应。一旦CloudWatch警报触发,该系统便会启动调查,通过整合遥测数据、日志、追踪信息、代码变更记录以及部署历史来定位根本原因,并制定缓解方案。
- 主动预防。它能够分析历史故障模式,为提升可观测性、基础设施性能以及流程效率提出改进建议。
从理论上讲,它涵盖了SRE团队可能需要的所有功能。
为何要构建定制版本
问题在于访问权限。DevOps Agent仅随AWS Business+和Enterprise级别的支持计划一同提供,不向普通用户开放按需购买服务。使用Developer Support级别的机构、初创公司、独立团队,或是没有Enterprise支持而在客户账户中工作的顾问都无法使用它。
该托管服务适合那些已使用企业级支持、且遵循标准AWS架构模式的团队,因为AWS已经完成了大部分工作,同时具备广泛的集成能力。但对于AI架构师而言,更值得探讨的问题是:是否足够深入地理解这些模式,从而能够独立构建相关系统,并在托管产品无法覆盖的领域进行扩展。这个项目正是对此的体现。
核心问题:大规模工具的应用
像Amazon Nova这样的模型虽然理解分布式系统、AWS架构以及复杂的调试过程,但它们本质上仍只是“罐子里的大脑”——无法查看CloudWatch指标,也无法操作DynamoDB表。
以往,要让大型语言模型脱离传统工具运行,往往需要编写脆弱的定制代码:
- 为该工具定义JSON架构。
- 编写用于运行它的Python函数。
- 将AWS凭证硬编码到代理程序的运行环境中。
这使智能体与基础设施紧密绑定,从而带来安全问题及维护瓶颈。
MCP的登场
由Anthropic推出的模型上下文协议正迅速成为行业标准,它很好地解决了这一问题。这是一种标准化协议,堪称AI领域的USB-C,能够将模型与外部数据源及工具相连。无需将AWS工具硬编码到智能体中,而是构建独立的MCP服务器。该服务器位于AWS环境中,并拥有必要的IAM角色,通过标准协议提供严格类型化、具有语义意义的工具。无论在何处运行的智能体都可以作为MCP客户端进行连接,因为它无需AWS凭证,只需向服务器请求执行相应工具即可。
自由选择模型
由于MCP并不关心另一端使用的是哪种模型,SRE智能体编排器可以根据需求选择合适的模型:
Amazon Nova ─┐
Claude 3.5 ─┼──→ SRE Agent Orchestrator ──→ MCP Server ──→ AWS Cloud
OpenAI GPT-4o─┘ (agent.py) (server.py)
要使用其他提供商的模型,只需修改一行代码即可。MCP服务器及其提供的所有安全AWS工具完全保持不变。
SRE智能助手的架构
1. 目标基础设施
为了让智能助手有东西可修复,会使用Terraform部署一个标准的无服务器微服务:在Lambda函数前端设置API网关,该函数负责向DynamoDB表写入数据。人为设置的缺陷在于该表的读取容量单元和写入容量单元各仅为1,因此在任何实际负载下,此API都会抛出ProvisionedThroughputExceededException错误。
2. MCP服务器
一个Python FastMCP服务器充当操作接口,提供四种SRE功能:
describe_architecture功能可查找所有带有应用标签的AWS资源(ARN)。
query_cloudwatch_metrics用于获取诸如ThrottledRequests之类的时间序列数据。query_cloudwatch_logs会执行CloudWatch Logs Insights查询以定位堆栈跟踪信息。remediate_dynamodb_capacity是一种会修改数据的工具,用于提升表格的容量。信任边界是人类介入的位置。只读工具完全自主运行,因此模型可以随意使用它们来进行调查。而修复工具则要求必须有人类介入才能继续操作。在调用AWS API之前,它会暂停并请求终端中的操作员给出[y/N]确认,同时显示模型的处理理由。DevOps Guru和Amazon Q都无法提供这种由组织自身规则设定的、可审计的状态变更操作检查点。
3. 自主代理
该智能体是一个小型 Python 脚本,通过 boto3 与 Amazon Bedrock Converse API 进行交互,选用 Amazon Nova 模型系列是因为其功能强大且成本较低。它运行一个自动的 while 循环:
- 它接收类似“用户反馈 Payment API 出现超时问题,需要修复”的提示。
- 它向 MCP 服务器查询可用的工具。
- 它将 MCP 工具的架构直接转换为 Bedrock Converse 格式。
- 它开始进行分析:查找 Payment API 相关资源,检查其指标,然后读取日志。
- 它通过 MCP 调用相应工具,将结果反馈给 Bedrock,并持续处理直到找到解决方案并触发修复工具。
循环的实际运行过程
当被要求查明为何演示 API 会返回 429 和 500 错误码时,该智能体会按以下步骤进行处理:
- 它会调用
describe_architecture来获取Lambda函数和DynamoDB表的ARN。 - 接着它会对该表调用
query_cloudwatch_metrics,查看ProvisionedThroughputExceededRequests的数值,发现其出现了大幅上升。 - 为确认情况,它会进一步对Lambda函数调用
query_cloudwatch_logs,解析JSON日志后确认存在ProvisionedThroughputExceededException异常。 - 最终判断出容量不足,于是调用
remediate_dynamodb_capacity,请求分配50个RCU和50个WCU。
此时MCP服务器会拦截该请求并提示操作人员处理:
=======================================================
⚠️ URGENT: AGENT REQUESTING PERMISSION TO MODIFY INFRASTRUCTURE
=======================================================
Action: Scale DynamoDB Table 'sre-copilot-payments-dev'
New Capacity: Read=50, Write=50
Agent's Reason: The table is experiencing severe throttling (ProvisionedThroughputExceededException). Scaling up to mitigate the incident.
=======================================================
Approve this change? [y/N]: y
同一代理还以Streamlit聊天应用的形式运行,展示拟议的解决方案及审批流程。一旦人工完成审批,容量就会得到更新,事件也随之解决。
该架构的优势
通过MCP将“大脑”(Amazon Nova及Bedrock)与“双手”(AWS API)分离,带来了管理型AWS工具无法比拟的灵活性:
- LLM的可移植性。只需修改一次配置,即可将Nova替换为Claude或GPT-4o。
- 安全性。原始凭证永远不会传递到LLM运行时。
- 安全性。所有操作变更都必须经过可自定义的人工审批流程。
- 可扩展性。无论是PagerDuty、Datadog API查询还是ServiceNow工单检查,只需一个
@mcp.tool()函数即可实现。
云运维似乎正从束缚团队的单一管理型服务,转向由团队自行构建、拥有并持续改进的、可组合的、与模型无关且可审计的代理。这是一种适合投入实际应用的模式,而不仅仅是演示而已。
供参考,MCP规范发布在modelcontextprotocol.io上,AWS Labs也提供了开源的参考MCP服务器。