掘金 人工智能 06月05日 13:03
使用 Amazon Q Developer CLI 调用 MCP Server 实现 Amazon Support 案例自动创建
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何通过 Amazon Q Developer CLI 结合自建的 Model Context Protocol (MCP) Server,提升云上基础设施运维效率。通过案例演示,展示了如何利用该工具自动生成问题描述、开启技术支持案例,并实现与 Amazon Support 的高效交互。文章还提供了详细的部署步骤和代码示例,帮助读者构建个性化的 Amazon Q Developer CLI,从而更好地拥抱生成式 AI 时代。

💡 Amazon Q Developer CLI 是一款命令行工具,它允许开发者直接在终端与 Amazon Q 的 AI 功能交互,从而提高开发效率。

🛠️ 通过引入 Model Context Protocol (MCP) Server,可以扩展 Amazon Q Developer CLI 的功能,以适应各种个性化需求场景,例如实现云上基础设施的运维、排障和代码生成。

⚙️ 本文演示了如何搭建 MCP Server 并将其注册到 Amazon Q Developer CLI 中,通过自动生成问题描述和开启技术支持案例,提升与 Amazon Support 的交互效率,并提供了详细的部署步骤和代码示例。

✅ 实验结果表明,Amazon Q Developer CLI 能够精确提取开启技术支持案例所需信息,并根据上下文纠正错误,极大地提升了运维自动化工作效率。

Amazon Q Developer CLI 是亚马逊云科技推出的一种命令行工具,作为 Amazon Q Developer 的一部分,它允许开发者直接在命令行界面与 Amazon Q 的人工智能能力进行交互,通过 Amazon Q Developer CLI,开发者可以在不离开终端环境的情况下获取 AI 助手的支持,提高开发效率并简化 AWS 资源的管理和操作流程。借助 Amazon Q Developer CLI 的强大能力,可以实现云上基础设施的运维、排障、架构设计、代码生成等等各种功能。然而,由于 Amazon Q Developer CLI 默认支持的调用工具限制,针对某些个性化需求难免会受到一些限制。好在刚刚推出的 Amazon Q Developer CLI 1.9.0 版本开始支持模型上下文协议(Model Context Protocol MCP),借助外部 MCP Server,可以极大地扩充 Amazon Q Developer CLI 的能力,以适应各种各样的个性化需求场景。

📢限时插播:Amazon Q Developer 来帮你做应用啦!

🌟10分钟帮你构建智能番茄钟应用,1小时搞定新功能拓展、测试优化、文档注程和部署

⏩快快点击进入《Agentic Al 帮你做应用 -- 从0到1打造自己的智能番茄钟》实验

免费体验企业级 AI 开发工具的真实效果吧

构建无限,探索启程!

方案概述

在使用 Amazon Q Developer CLI 进行亚马逊云科技云上资源排障的时候,虽然其功能强大,但是很多时候虽然经过多轮交互,依旧不能解决问题,因此需要 Amazon Support 介入进行更深一步的调查。通过 Amazon Q Developer CLI 的总结能力,自动生成问题描述,提取资源 id 或者 ARN ,并总结已经执行过的的排查步骤,借助自建的 MCP Server 自动开启技术支持案例,就能够极大地提升和 Amazon Support 的交互效率,达到事半功倍的效果。有关 MCP 的介绍可以参考这里。本文事例具体工作原理可以参考下图:

方案实施前置条件

首先,对应亚马逊云科技账号开启 商业支持级别技术支持,同时需要订阅 Amazon Q Developer 并且保证安装版本在 1.9.0 以上参考订阅步骤。使用如下 Q CLI 命令查看并升级版本:

其次,需要正确配置 Amazon CLI 并保证有足够的权限,具体配置步骤可以参考这里

最后,本测试代码运行在 Python 3.12 环境中,并保证安装 uv, 有关 uv 相关的介绍以及安装,可以参考这里。安装完成之后具体运行环境如下:

方案代码实现

首先建立初始化对应的项目,安装相应的依赖,具体步骤如下:

其次,编辑 awscase.py 文件,文件具体内容如下:

from typing import Anyfrom mcp.server.fastmcp import FastMCPimport boto3import loggingfrom typing import Dict, Any, List, Optional# 配置日志logging.basicConfig(    level=logging.INFO,    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')logger = logging.getLogger(__name__)region_name = 'us-east-1'support_client = boto3.client('support', region_name=region_name)logger.info(f"已初始化AWS Support客户端,区域: {region_name}")# Initialize FastMCP servermcp = FastMCP("awssupportcase")@mcp.tool()def create_case(                    service: str,                   category: str,                    severity: str,                   subject: str,                   description: str,                   language: str = 'zh',                   issue_type: str = 'technical') -> Dict[str, Any]:        """        创建AWS技术支持案例                Args:            service: 服务名称,如'EC2', 'S3'等            category: 问题类别            severity: 严重程度,如'low', 'normal', 'high', 'urgent', 'critical'            subject: 案例主题            description: 案例详细描述            language: 语言代码,默认为'zh'(中文)            issue_type: 问题类型,默认为'technical'(技术问题)                    Returns:            包含案例ID和其他信息的字典        """        try:            response = support_client.create_case(                subject=subject,                serviceCode=service,                severityCode=severity,                categoryCode=category,                communicationBody=description,                language=language,                issueType=issue_type            )                        case_id = response.get('caseId')            logger.info(f"成功创建案例,案例ID: {case_id}")            return response        except Exception as e:            logger.error(f"创建案例失败: {str(e)}")            raise@mcp.tool()def add_communication(case_id: str, body: str) -> Dict[str, Any]:        """        向案例添加通信(更新)                Args:            case_id: 案例ID            body: 通信内容                    Returns:            API响应字典        """        try:            response = support_client.add_communication_to_case(                caseId=case_id,                communicationBody=body            )                        logger.info(f"成功向案例 {case_id} 添加通信")            return response        except Exception as e:            logger.error(f"添加案例通信失败: {str(e)}")            raise@mcp.tool()def get_case_details(case_id: str) -> Dict[str, Any]:        """        获取案例详情                Args:            case_id: 案例ID                    Returns:            案例详情字典        """        try:            response = support_client.describe_cases(                caseIdList=[case_id],                includeResolvedCases=True            )                        if response.get('cases'):                logger.info(f"成功获取案例 {case_id} 详情")                return response['cases'][0]            else:                logger.warning(f"未找到案例 {case_id}")                return {}        except Exception as e:            logger.error(f"获取案例详情失败: {str(e)}")            raise@mcp.tool()def update_case_status(case_id: str, status: str) -> Dict[str, Any]:        """        更新案例状态(关闭或重新打开)                Args:            case_id: 案例ID            status: 状态,可选值为'resolved'(关闭)或'reopened'(重新打开)                    Returns:            API响应字典        """        if status.lower() not in ['resolved', 'reopened']:            raise ValueError("状态必须是'resolved'(关闭)或'reopened'(重新打开)")                try:            if status.lower() == 'resolved':                response = support_client.resolve_case(                    caseId=case_id                )            else:                # 使用add_communication_to_case方法重新打开案例                response = support_client.add_communication_to_case(                  caseId=case_id,                  communicationBody="重新打开案例"            )                        logger.info(f"成功将案例 {case_id} 状态更新为 {status}")            return response        except Exception as e:            logger.error(f"更新案例状态失败: {str(e)}")            raiseif __name__ == "__main__":    # Initialize and run the server    mcp.run(transport='stdio')

代码说明,MCP Server 借助 FastMCP 框架并配置相应的日志。因此,文件开始初始化 MCP 框架,然后引入创建技术支持案例的 MCP Tool。这里需要注意,使用函数的文档字符串(docstring)用来描述函数的功能、参数以及返回值,务必认真填写。FastMCP 框架会根据这里的描述生成标准格式输入模版,并传入到 MCP Client 端的上下文中。

在本例中,MCP Client 就是 Q Developer CLI。与引入的第一个MCP tool 类似,代码继续顺序引入向案例中添加内容的工具add_communication,以及获得案例详细内容的工具 get_case_details,最后引入更改案例的工具 update_case_status,然后初始化并运行 MCP Server。需要补充说明的是,MCP Server 配置部署在本地因此 transport 配置成为 ‘stdio’。

到这里,基本 MCP Server 代码的编写已经完成,为了验证并调试 MCP Server 的状态,官方提供了 MCP Inspector ,具体细节可以参考这里

在浏览器运行 http://127.0.0.1:6274 可以进入到 MCP Inspector,测试 MCP Server 以及 tool 对应的情况,如下图:

有关 Amazon Q Developer CLI 对 MCP 的支持,可以参考这个文档

方案部署

有关在 Amazon Q Developer CLI 上部署 MCP Server 可以参考如下文档。具体在本例中,mcp.json 文件配置如下:

{  "mcpServers": {    "manage-aws-support-case": {            "command": "uv",            "args": [                "--directory",                "/Users/XXXXXXXX/qdemo/manage-aws-support-case",                "run",                "awscase.py"            ]      }  }}

补充说明 “/Users/XXXXXXXX/qdemo/manage-aws-support-case” 是代码运行的路径,也就是前文中我们 使用 uv 初始化的项目所在的路径,读者可以根据自己实际环境进行更改。

配置完成之后启动 Amazon Q Developer CLI,如下检测 MCP Server 以及 MCP tools 状态。

出现如上如图红框中的信息,说明 MCP Server 已经成功注册到 Amazon Q Developer CLI 中,并且能够显示可供调用的 MCP tools。

方案验证

验证过程模拟运维工程师对账号下一台 EC2 实例网络联通性进行测试,具体步骤如下:

中间过程经过多轮对话以及验证,结合篇幅所限省略部分过程,Amazon Q Developer CLI 给出如下回复:

以上截图可见,当 Q CLI 接受到开启技术支持案例的指令之后,调用 MCP Server 中 create_case 工具建立 Amazon Support 案例,注意标红的位置, Q CLI 根据上下文,选取正确的 service code,”service”: “amazon-elastic-compute-cloud-linux”。 在亚马逊云科技控制台查看开启的案例,如下:

可以清晰地看到,Amazon Q Developer CLI 不但精确地提取了开启亚马逊云科技技术支持案例的所需要的必要信息,成功开启技术支持案例,同时针对故障给出了精确的描述,并提供应尝试的操作,方便技术支持工程师能够快速定位故障,最后礼貌地重复强调自己的要求并加以感谢,拉满情绪价值。

同样的,继续测试 MCP Server 其他几个 Tools, 包括向案例中添加内容、列出案例的具体内容,以及更改案例状态, Q Developer CLI 都正确地调用工具很好的完成了任务。具体如下图:

值得注意的是,在向案例添加信息操作时,由于作者手误,案例号少输入了最后一个字符“a”,Q Developer CLI 结合上下文很好地识别到了错误并自动加以纠正,正确地执行了操作,具体细节参见上面的截图中的红框。

总结

通过本文的例子,笔者展示了如何从零开始搭建 MCP Server 并注册到 Amazon Q Developer CLI 中,通过自建的 MCP Server 扩充了 Q Developer CLI 的能力,增强了运维的自动化的工作效率 。从中不难看出,Amazon Q Developer CLI 整合 MCP 能力之后,增加了无限的想象空间,借以本文抛砖引玉,读者可以结合自己实际工作中的场景,借助 GenAI 的强大能力,参考本文的例子,创造出更多的 MCP Server,打造一个性化十足的专属 Amazon Q Developer CLI,提升自己的工作效率,更好地拥抱这个 GenAI 的时代。另外,笔者也测试了一些其他官方的 MCP Server,也能和 Amazon Q Developer CLI 很好地集成,具体可以参考官方 MCP Server 的相关文档,这里就不一一赘述。

附录

有关 Amazon Q Developer 的定价可以参考如下官方文档:

aws.amazon.com/cn/q/develo…

另外,亚马逊云科技也给出了一些官方可用的 MCP Server,经过测试,均能集成在 Amazon Q Developer CLI 中,具体可以参考这里:

github.com/awslabs/mcp…

*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

本篇作者

本期最新实验为《Agentic AI 帮你做应用 —— 从0到1打造自己的智能番茄钟

✨ 自然语言玩转命令行,10分钟帮你构建应用,1小时搞定新功能拓展、测试优化、文档注释和部署

💪 免费体验企业级 AI 开发工具,质量+安全全掌控

⏩️[点击进入实验] 即刻开启 AI 开发之旅

构建无限, 探索启程!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Amazon Q Developer CLI MCP Server 云运维 AI
相关文章