🪪本文作者:孙凤龙、许业宝
✍️ 1️⃣ 作者孙凤龙信息:
🌞 亚马逊云合作伙伴 技术总监
🏆 两项AWS能力认证 | 两项 CCIE 认证
🏅 RedHat认证 | 阿里云认证
✍️ 2️⃣ 作者许业宝信息:
🌞 云解决方案架构师 | AWS Ambassador
🪪 AWS Community Builder | 亚马逊云科技技能云博主
⭐ 已获九项 AWS 认证 | CKA、CKS认证 |
🏆 CSDN博客专家 | CSDN云计算领域优质创作者
文章目录
- 一、序言
- 二、理论篇
-
- [2.1. 什么是 MCP(Model Context Protocol)](#2.1. 什么是 MCP(Model Context Protocol))
- [2.2. MCP 工作原理](#2.2. MCP 工作原理)
- [2.3. 实验架构图](#2.3. 实验架构图)
- 三、实战篇
-
- [3.1 先决条件](#3.1 先决条件)
-
- [3.1.1 安装环境依赖包](#3.1.1 安装环境依赖包)
- [3.1.2 安装python环境](#3.1.2 安装python环境)
- [3.2 本地安装与配置 AWS CLI](#3.2 本地安装与配置 AWS CLI)
- [3.3 安装并配置 Goose Desktop](#3.3 安装并配置 Goose Desktop)
- [3.4 添加 Amazon Nova 模型](#3.4 添加 Amazon Nova 模型)
- [3.5 设置 MCP 工具拓展](#3.5 设置 MCP 工具拓展)
-
- [3.5.1 设置MCP工具,点击"添加扩展"](#3.5.1 设置MCP工具,点击“添加扩展”)
- [3.5.2 启用Amazon Nova Canvas MCP Server 拓展工具](#3.5.2 启用Amazon Nova Canvas MCP Server 拓展工具)
- [3.6 开始体验](#3.6 开始体验)
-
- [3.6.1 使用自然语言指令轻松创建EKS集群](#3.6.1 使用自然语言指令轻松创建EKS集群)
- [3.6.2 查询该账号的账单消费情况](#3.6.2 查询该账号的账单消费情况)
- [3.6.3 添加文件系统 MCP 服务器实现本地文件的「增删改查」](#3.6.3 添加文件系统 MCP 服务器实现本地文件的「增删改查」)
- [3.6.4 使用CloudFormation将本地的yaml文件上传并部署到AWS云上](#3.6.4 使用CloudFormation将本地的yaml文件上传并部署到AWS云上)
- [3.6.5 调用 Novacanvasmcpserver 工具生成图片](#3.6.5 调用 Novacanvasmcpserver 工具生成图片)
- 四、常见问题
- 五、参考链接
一、序言
在云计算与人工智能技术飞速发展的今天,如何高效地探索、管理和优化云上资源,已成为开发者和运维团队面临的重要挑战。AWS 作为全球领先的云服务提供商,提供了丰富的工具和服务,但面对庞大的云架构,如何快速获取精准信息、自动化执行任务,并借助 AI 能力提升效率,仍然是许多用户的需求痛点。
为此,我们结合MCP Server(多功能云平台服务)和 Amazon Bedrock(全托管生成式 AI 服务),打造了一套智能化云上探索与发现方案。这套方案不仅能帮助开发者通过自然语言交互快速查询 AWS 资源、生成自动化脚本,还能借助大语言模型(LLM)的能力,实现智能化的运维决策和优化建议。
在本文中,我们将详细介绍如何利用这一技术组合,轻松实现:
✅ 自然语言驱动的云资源创建与查询------用自然语言对话的方式获取 AWS 服务状态和配置
✅ 自动化任务执行------通过 MCP Server 调用 AWS API,完成复杂操作
✅ AI 增强的运维与分析------基于 Amazon Bedrock 的生成式 AI,提供优化建议和故障排查
无论您是云架构师、DevOps 工程师,还是开发者,都能通过本文掌握如何利用 AI + MCP工具链,让 AWS 云上探索变得更高效、更智能。
现在,让我们一起踏上这场 "AI+云" 的探索之旅,解锁更强大的云端生产力! 🚀
二、理论篇
2.1. 什么是 MCP(Model Context Protocol)
MCP是"模型上下文协议(Model Context Protocol)"的简称,用一句简单通俗易懂的话描述:
是一种让 AI 模型能够无缝连接到外部工具和数据源的标准化方式。想象它就像 AI 的"万能接口",能让 AI 像用 USB 线连接设备一样,轻松调用其他程序或服务。被誉为 "AI领域 USB 接口" 。
MCP 采用经典的客户端-服务器架构:

2.2. MCP 工作原理
这张示意图描述了一个基于 LLM 的智能交互系统的工作流程:用户通过客户端(如 Goose)输入请求后,LLM 会分析内容并动态决定是否需要调用 MCP 服务 访问远程 API 获取外部数据,最终将整合后的结果返回给用户,从而实现结合大模型推理能力与外部工具服务的智能响应。

用户 客户端 (Goose) LLM (amazon.nova-pro-v1:0) MCP服务 远程服务 (Web Api) 初始化阶段 注册并启动MCP服务 1 服务注册成功 2 交互流程 输入内容 3 将用户输入的内容提交给LLM 4 分析用户内容, 并决定是否需要 调用MCP 5 请求客户端调用特定MCP工具 6 调用MCP服务,执行特定动作 7 调用远程Api服务 8 返回远程结果 9 返回结果给客户端 10 将MCP返回结果或动作作为上下文再次请求LLM 11 直接返回大模型输出结果 alt [需要调用MCP] [不需要调用MCP] 输出内容给客户端 12 显示回答内容 13 用户 客户端 (Goose) LLM (amazon.nova-pro-v1:0) MCP服务 远程服务 (Web Api)
2.3. 实验架构图
该架构实现了一个基于 AI 的智能运维系统,允许用户用自然语言与 AWS 资源交互,自动完成资源创建、查询、分析等任务,极大提升了操作效率与智能化程度。

三、实战篇
3.1 先决条件
3.1.1 安装环境依赖包
- 使用 curl 下载脚本并使用 sh 执行:
bash
curl -LsSf https://astral.sh/uv/install.sh | sh
演示截图如下:

3.1.2 安装python环境
- 执行如下命令安装python环境:
bash
uv python install 3.12
演示截图如下:
3.2 本地安装与配置 AWS CLI
-
创建访问密钥(建议:创建子账号并授予相应的权限策略。不建议在根账号下设置密钥!)
-
安装或更新 AWS CLI
bash
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
- 要验证 Shell 是否可以在 $PATH 中找到并运行 aws 命令,请使用以下命令。
bash
which aws
aws --version
- 设置可访问 AWS 服务的 AWS 凭证
bash
aws configure
AWS Access Key ID [****************I66M]:
AWS Secret Access Key [****************o4pv]:
Default region name [us-east-1]:
Default output format [json]:
演示截图如下:
- 验证用户身份
bash
% aws sts get-caller-identity
{
"UserId": "xxxxxxxxxxxxxxxxxxxx",
"Account": "xxxxxxxxxxxx",
"Arn": "arn:aws:iam::xxxxxxxxxxxx:user/xxx"
}
3.3 安装并配置 Goose Desktop
随着亚马逊云科技对 MCP(Model Context Protocol)的支持,许多客户尝试将 MCP 与Amazon Bedrock提供的基础模型(如Amazon Nova Pro)结合使用。
Goose Desktop 这是一款开源的MCP桌面客户端。MCP桌面客户端提供了基于GUI的接口,使用户无需编写代码即可在本地设置MCP工具或第三方工具。
无论您是原型设计创意、完善现有代码,还是管理复杂的工程管道,鹅都能适应您的工作流程,并精确地执行任务。goose旨在实现最大的灵活性,可与任何LLM配合使用,与MCP服务器无缝集成,并且可以作为桌面应用程序和CLI使用------使其成为想要更快地移动并专注于创新的开发人员的终极人工智能助手。
Goose MCP桌面客户端下载链接:https://github.com/block/goose/releases/download/stable/Goose.zip
安装完成后,将出现"提供商"页面。您可以在此处选择您的 LLM 提供商。
- 这里我们选择【Amazon Bedrock】模型提供商,点击「Configure」配置。

- 添加AWS_PROFILE配置文件,这里选择默认即可。
注意:若未配置AWS CLI,请先行完成配置。

3.4 添加 Amazon Nova 模型
这里我们点击右上角三个点,选择"advanced settings"。

在Goose桌面客户端中运行Amazon Bedrock中的模型,并可以根据需要在不同模型之间切换。

选择Amazon Bedrock作为模型提供者,并添加模型ID

输入的模型ID可以是:
- amazon.nova-pro-v1:0------适用于Amazon Nova
- amazon.nova-micro-v1:0------适用于Amazon Nova
- us.anthropic.claude-3-7-sonnet-20250219-v1:0------适用于Claude Sonnet 3.7
有关更多模型ID可访问Amazon Bedrock模型托管平台进行查询。


3.5 设置 MCP 工具拓展
亚马逊云科技官方提供的MCP可用Server如下,您可参阅设置指南进行操作。
- 核心MCP Server:具备MCP Server自动管理功能。
- Amazon Bedrock知识库检索MCP Server:用于访问Amazon Bedrock知识库。
- Amazon Web Services CDK MCP Server:用于Amazon Web Services CDK项目分析与辅助。
- 成本分析MCP Server:用于亚马逊云科技服务成本分析。
- Amazon Nova Canvas MCP Server:用于借助Amazon Nova Canvas生成图像。
3.5.1 设置MCP工具,点击"添加扩展"
这里以"使用 Amazon Nova Canvas 生成图像的 MCP 服务器"作为添加MCP工具,演示操作说明。
点击"Add custom extension"
- Extension Name:novacanvasmcpserver
- Type:STDIO
- Description:使用 Amazon Nova Canvas 生成图像的 MCP 服务器
- Command:uvx awslabs.nova-canvas-mcp-server@latest
演示截图如下:
3.5.2 启用Amazon Nova Canvas MCP Server 拓展工具
Amazon Nova Canvas MCP Server:用于借助Amazon Nova Canvas生成图像。

3.6 开始体验
3.6.1 使用自然语言指令轻松创建EKS集群
bash
1. 您希望在哪个AWS区域创建EKS集群?
2. 您希望集群的名称是什么?
3. 您需要什么版本的Kubernetes?
4. 您希望使用哪种类型的节点组(托管节点组、自管理节点组或Fargate)?
5. 您对节点实例类型有特定要求吗?
prompts:
帮我创建一个EKS集群,具体配置需求如下:
- 我希望在 us-east-1区域创建eks集群;
- 我希望创建的集群名称是xybeks;
- 我需要创建k8s的版本是1.28.2;
- 我希望使用托管节点组类型的节点组;
- 节点实例类型要求4核8GB的实例类型即可。

查询xybdiy-eks集群是否完成创建

最终登录到EKS管理控制台,进行确认。

3.6.2 查询该账号的账单消费情况
通过调用了Cost Analysis MCP Server工具,查询 AWS 账单消费情况。

3.6.3 添加文件系统 MCP 服务器实现本地文件的「增删改查」
前往"设置",点击"添加自定义扩展",并填写以下信息。
- 名称:filesystem
- 描述:用于文件系统操作的MCP
- command:npx -y @modelcontextprotocol/server-filesystem /Users/username/Desktop/
功能:
- 读/写文件
- 创建/列出/删除目录
- 移动文件/目录
- 搜索文件
- 获取文件元数据
然后在"命令"一栏中,使用刚才提取的命令,点击"添加"后,第一个MCP设置完成。

查询本地文件目录下,所有的文件。
在本地目录下创建game-2048文件夹。

3.6.4 使用CloudFormation将本地的yaml文件上传并部署到AWS云上
prompts:我现在需要使用CloudFormation一键部署一台在us-east-1区域的EC2实例,并配置好完整的VPC虚拟网络,需要启用公网IP地址访问,访问密钥是xybdiy-PII-global-key。请帮我在本地生成一份.yaml 配置文件。请将配置文件命名为xyb-ec2-deploy.yaml。

生成的完整xyb-ec2-deploy.yaml配置文件如下:
yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation template to deploy an EC2 instance in us-east-1 with a complete VPC, public IP address, and specific SSH key pair.
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
InternetGateway:
Type: AWS::EC2::InternetGateway
VPCGatewayAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
Subnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
RouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Route:
Type: AWS::EC2::Route
DependsOn: VPCGatewayAttachment
Properties:
RouteTableId: !Ref RouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
SubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref Subnet
RouteTableId: !Ref RouteTable
SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow SSH access
VpcId: !Ref VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0e449927258d45bc4 # Amazon Linux 2 AMI (HVM), SSD Volume Type
InstanceType: t2.micro
KeyName: xybdiy-PII-global-key
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: 0
DeleteOnTermination: true
SubnetId: !Ref Subnet
GroupSet:
- !Ref SecurityGroup
Outputs:
PublicIP:
Description: Public IP address of the EC2 instance
Value: !GetAtt EC2Instance.PublicIp
prompts:直接使用AWS CLI命令,将本地的xyb-ec2-deploy.yaml配置文件上传至cloudformation,用于部署EC2实例

通过CloudFormation控制台查看到该堆栈已创建完成。
- 通过以下命令可以获取到由堆栈创建出来的EC2实例的公网IP地址
bash
aws cloudformation describe-stacks --stack-name xyb-ec2-stack --query 'Stacks[0].Outputs' --output table

- 通过以下命令也可以看到堆栈状态和实例详细信息。

3.6.5 调用 Novacanvasmcpserver 工具生成图片

Goose本身不支持直接调用amazon.nova-pro-v1:0
模型,这时就可以借助 MCP 拓展工具,将Amazon Nova Canvas MCP Server
集成到Goose客户端里,进行MCP拓展,最终调用该工具,实现文生图操作。

通过调用novacanvasmcpserver工具,生成一张猫咪的照片。
最后输出保存到本地文件夹下。如下图所示。
也可以调用novacanvasmcpserver工具,将本地的图片转换不同的显示风格输出出来。

这里有显示模型给出来的 提示词 和 否定的关键词。

最后,我们可以查询到图片的不同显示风格。可以对比看下输入和输出的图片差异。

四、常见问题
bash
Ran into this error: Execution error: content was missing: content was not specified but it is required when building ToolResultBlock.
Please retry if you think this is a transient or recoverable error.

https://github.com/block/goose/issues/1267
五、参考链接
1\]