AWS MCP 服务器到 Microsoft Copilot Studio 解决方案加速器
此解决方案提供了一个可投入生产的代理,使 Microsoft Copilot Studio 能够通过基于 FastAPI 的 HTTP 桥接与 AWS MCP(模型上下文协议)服务器进行通信。
🚀 快速入门
先决条件
- Azure 订阅
- Azure 开发者 CLI(
azd) - 具有Bedrock访问权限的AWS凭证
- 带有Azure扩展的VS Code
1. 设置环境配置
# Clone and navigate to the project
git clone https://github.com/HaoZhang615/Azure-Container-Apps-as-Proxy-for-AWS-managed-MCP-Server-via-FastAPI.git
cd Azure-Container-Apps-as-Proxy-for-AWS-managed-MCP-Server-via-FastAPI
# Copy the environment template
cp .env.template .env
# Edit .env file with your actual AWS credentials
AWS_CLIENT_ID=your_actual_client_id
AWS_CLIENT_SECRET=your_actual_client_secret
AWS_AUTH_URL=https://your-cognito-domain.auth.region.amazoncognito.com/oauth2/token
AWS_MCP_URL=https://bedrock-agentcore.region.amazonaws.com/runtimes/your-runtime-arn/invocations?qualifier=DEFAULT
AWS_SCOPE=your_actual_scope2. 部署到Azure
# Deploy infrastructure and application
# The .env values will be automatically loaded as environment variables
azd up部署过程将:
- 预部署自动读取您的
.env文件并加载所有变量 - 验证验证所有必需的AWS凭证是否已设置
- 基础设施使用 Azure Key Vault 部署以实现安全的密钥存储
- 应用程序使用环境变量构建和部署容器应用
注Azd 钩子将自动运行,无论您使用的是哪个环境,确保您的(操作/设置/等,根据上下文补充具体内容) .env 文件总是在部署前加载。
3. 设置Copilot Studio自定义连接器
- 在Copilot Studio中,创建一个新的自定义连接器(从完整教程中学习更多内容 )
- 使用您已部署的 Azure 容器应用的 URL 作为基础 URL
- 配置POST请求以
/mcp终端节点 - 将认证设置为“无认证”(内部处理)
⚙️ 配置
环境设置
该项目采用了一种 .env 配置文件。复制 .env.template to .env 并填写你的价值观:
cp .env.template .env所需的环境变量
| 变量 | 描述 | 示例 | |||
|---|---|---|---|---|---|
| (无对应中文) | (无对应中文) | (无对应中文) | AWS_CLIENT_ID | 2p3li5ek3... | AWS Cognito 客户端 ID |
AWS_CLIENT_SECRET | 1ok90cr91cmjlj... | AWS Cognito 客户端密钥 | |||
AWS_AUTH_URL | https://.amazoncognito.com/oauth2/token | Cognito OAuth2 令牌端点 | |||
AWS_MCP_URL | https://.amazonaws.com/runtimes/arn... | AWS MCP 服务器端点 | |||
AWS_SCOPE | /read | AWS访问的OAuth2范围 |
|
- 安全注意事项
.env这个(或“该”).gitignore文件被 Git 自动忽略(在 - )
- 在部署过程中,值被安全地存储在 Azure 密钥保管库中
- AWS_CLIENT_SECRET 以密钥保管库(Key Vault)秘密的形式存储,而非明文存储
环境变量由 azd 插件自动加载
├── main.py # FastAPI proxy server
├── pyproject.toml # Python dependencies
├── Dockerfile # Production container config
├── azure.yaml # Azure Developer CLI config with hooks
├── .env.template # Environment template (copy to .env)
├── .env # Your environment variables (gitignored)
└── infra/ # Azure infrastructure (Bicep)
├── main.bicep # Main infrastructure template
├── main.parameters.json # Infrastructure parameters
└── resources.bicep # Resource definitions with Key Vault📁 项目结构
Copilot Studio → Custom Connector → Azure Container App → AWS MCP Server
(This Solution)🏗️ 建筑学
- 代理处理:
- AWS Cognito OAuth2 认证
- MCP协议转换
- HTTP状态码规范化
- 错误处理和日志记录
通过 Azure Key Vault 实现安全的凭证管理
可选的环境变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| PORT | 3000 | | 服务器端口 | LOG_LEVEL | INFO |
| 日志级别 |
🔧 定制化
修改AWS认证 get_aws_token() 编辑 main.py函数中的(功能/作用)
async def get_aws_token():
# Your custom AWS authentication logic
pass:
添加请求验证 validate_mcp_request() 扩展
def validate_mcp_request(request_data):
# Your custom validation logic
pass功能:
更改响应处理 process_aws_response() 修改
def process_aws_response(aws_response):
# Your custom response processing
pass功能:
🐞 故障排除
- 常见问题
- 来自AWS的空响应 - 检查AWS凭证配置 - 验证MCP服务器终端URL
- 查看 Azure 容器应用日志
- 认证失败 - 验证 AWS_CLIENT_ID 和 AWS_CLIENT_SECRET - 在AWS_AUTH_URL中检查Cognito域名
- 确保OAuth2作用域设置正确
- Copilot Studio 连接错误 - 验证自定义连接器配置 - 检查 Azure 容器应用是否正在运行
检查网络连接
调试
LOG_LEVEL=DEBUG通过设置环境变量来启用详细日志记录:
azd logs查看 Azure 容器应用日志:
📊 监控
- 该解决方案包括:
/health - 健康检查端点位于
- 使用关联ID进行结构化日志记录
Azure Application Insights 集成(通过容器应用)
- 🔒 安全
- AWS 凭据以 Azure 容器应用环境变量的形式存储
- 源代码中不包含敏感数据
- 通过Azure容器应用强制使用HTTPS
为安全起见配置的CORS(跨源资源共享)
🚀 生产环境部署
- 该解决方案已准备好投入生产,具备:
- 多阶段Docker构建以进行优化
- 可靠性健康检查
- 安全方面的最小依赖
- Azure Container Apps 用于可扩展性
使用Bicep实现基础设施即代码
FastAPI 文档
- 🤝 贡献(或:参与贡献)
- 为仓库创建分支(或:克隆仓库)
- 创建一个特性分支
- 做出你的更改
- 彻底测试
提交一个拉取请求
📄 许可证
