背景
在上一篇文章中,我们将阿里云 Observable MCP Server 部署在腾讯云跳板机上,通过 Nginx 反向代理让智能顾问 CloudQ 访问阿里云 SLS 日志。方案虽然可行,但存在几个问题:
- 跳板机资源紧张:MCP Server 进程常驻占用约 139MB 内存,跳板机仅 2G 内存已达 92%
- AK/SK 跨云存储:阿里云的 AK/SK 存放在腾讯云跳板机上,存在凭证泄露风险
- 网络延迟:跳板机(腾讯云上海)→ 阿里云 SLS API(公网调用),存在跨云网络延迟
- 运维负担:需要手动维护 MCP Server 进程、Nginx 配置和 systemd 服务
本文记录将 MCP Server 迁移到阿里云函数计算(FC)的完整过程,实现零运维、AK/SK 不出阿里云、内网调用 SLS API 的最优方案。
架构对比
智能顾问 CloudQ 通过阿里云 FC 部署的 MCP Server 访问 SLS 日志(内网链路)
旧方案:跳板机部署
CloudQ → http://122.51.160.127:8080/sse (Basic Auth)
→ Nginx 反向代理
→ 127.0.0.1:8000 (MCP Server)
→ 阿里云 SLS API (公网)
→ Nginx 反向代理
→ 127.0.0.1:8000 (MCP Server)
→ 阿里云 SLS API (公网)
新方案:阿里云 FC 部署
CloudQ → https://xxxx.cn-hangzhou.fcapp.run/sse (Bearer Token)
→ 阿里云函数计算 (FC)
→ MCP Server 进程
→ 阿里云 SLS API (内网调用)
→ 阿里云函数计算 (FC)
→ MCP Server 进程
→ 阿里云 SLS API (内网调用)
方案对比
| 维度 | 跳板机方案 | FC 方案 |
|---|---|---|
| 运维 | 手动维护进程 + Nginx | 全托管,零运维 |
| AK/SK 安全 | 存在腾讯云跳板机(跨云) | 仅存在阿里云 FC 环境变量 |
| 网络 | 跳板机→公网→SLS API | FC→SLS 内网调用 |
| 认证 | Nginx Basic Auth | FC 内置 Bearer Token |
| 弹性 | 固定资源常驻 | 按需弹性,空闲不计费 |
| 成本 | 占跳板机 139MB 内存 | 按调用计费,轻量使用几乎免费 |
| 跳板机释放 | — | 释放 ~150MB 内存 |
前置条件
| 项目 | 要求 |
|---|---|
| 阿里云账号 | RAM 子账号,仅授予 SLS 只读权限(log:Get* + log:List*) |
| 阿里云函数计算 | 已开通 FC 服务(Function AI 控制台) |
| 智能顾问 | 已开通自定义 MCP 连接能力 |
Step 1:在 Function AI 创建 MCP 服务
- 登录 Function AI 控制台
- 点击「创建项目」→「创建空白项目」
- 项目名:
cloudq-sls-mcp - 点击项目 →「新建服务」→「MCP 服务」
Step 2:配置 MCP 服务参数
| 配置项 | 值 | 说明 |
|---|---|---|
| 传输类型 | SSE 协议 | 智能顾问通过 SSE 长连接通信 |
| 开启鉴权 | 开启 | 自动生成 Bearer Token |
| 运行环境 | 自定义运行时(Python) | MCP Server 是 Python 包 |
| 弹性策略 | 极速模式 | SSE 长连接需要会话一致性 |
| 预置快照 | 1 个 | 避免冷启动 |
| 实例限额 | 1 | 确保 SSE 请求分配到同一实例 |
| vCPU / 内存 | 1 vCPU / 2GB | MCP Server 运行需求 |
关键配置:由于 MCP SSE 协议依赖 session 机制,必须选择极速模式 + 实例限额 1,确保同一 session 的请求始终路由到同一实例。
Step 3:编写启动脚本
创建 bootstrap 启动脚本(FC 自定义运行时入口):
#!/bin/bash
pip install mcp-server-aliyun-observability -q
python3 -m mcp_server_aliyun_observability \
--transport sse \
--transport-port 9000 \
--access-key-id $ALIYUN_ACCESS_KEY_ID \
--access-key-secret $ALIYUN_ACCESS_KEY_SECRET
pip install mcp-server-aliyun-observability -q
python3 -m mcp_server_aliyun_observability \
--transport sse \
--transport-port 9000 \
--access-key-id $ALIYUN_ACCESS_KEY_ID \
--access-key-secret $ALIYUN_ACCESS_KEY_SECRET
Step 4:配置环境变量
在 FC 控制台的「服务变量」中配置:
| 变量名 | 值 | 说明 |
|---|---|---|
ALIYUN_ACCESS_KEY_ID | RAM 子账号 AK | SLS 只读权限 |
ALIYUN_ACCESS_KEY_SECRET | RAM 子账号 SK | FC 环境变量托管 |
安全优势:AK/SK 通过 FC 环境变量管理,不出阿里云,无需在腾讯云侧存储任何阿里云凭证。
Step 5:部署并获取端点
点击「预览&部署」完成部署后,在项目详情页获取:
- SSE 端点地址:
https://xxxx.cn-hangzhou.fcapp.run/sse - Bearer Token:控制台自动生成(用于鉴权)
Step 6:验证连通性
curl -N -H "Authorization: Bearer <Token>" \
https://xxxx.cn-hangzhou.fcapp.run/sse
# 成功返回:
event: endpoint
data: /message?sessionId=xxx-xxx-xxx
https://xxxx.cn-hangzhou.fcapp.run/sse
# 成功返回:
event: endpoint
data: /message?sessionId=xxx-xxx-xxx
看到 event: endpoint 响应即表示 MCP Server 正常运行。
Step 7:更新智能顾问 MCP 配置
在腾讯云智能顾问控制台,修改阿里云 SLS 的 MCP 连接配置:
| 配置项 | 旧值(跳板机) | 新值(FC) |
|---|---|---|
| URL | http://122.51.160.127:8080/sse | https://xxxx.cn-hangzhou.fcapp.run/sse |
| 认证 | Basic Auth | Bearer Token |
| 协议 | HTTP | HTTPS(FC 内置) |
Step 8:停用跳板机旧服务
FC 验证通过后,停用跳板机上的 MCP Server 释放资源:
systemctl stop aliyun-mcp
systemctl disable aliyun-mcp
# 释放约 150MB 内存
systemctl disable aliyun-mcp
# 释放约 150MB 内存
迁移前后跳板机内存对比:
| 状态 | 可用内存 |
|---|---|
| 迁移前 | 159 MB |
| 迁移后 | 311 MB(+152MB) |
可用工具
与跳板机方案完全相同,CloudQ 可调用以下 SLS 工具:
| 工具 | 功能 | 典型用法 |
|---|---|---|
sls_list_logstores | 列出所有 logstore | "有哪些日志库" |
sls_describe_logstore | 获取字段结构 | "xxx 日志库有哪些字段" |
sls_translate_natural_language_to_query | 自然语言转 SLS SQL | "最近1小时ERROR日志" |
sls_execute_query | 执行查询 | 执行上一步生成的 SQL |
踩坑记录
| 问题 | 现象 | 解决 |
|---|---|---|
| Python 版本不匹配 | 从跳板机(3.11)打包的依赖在FC(3.10)上报 ModuleNotFoundError | 改用 Function AI 控制台直接部署,pip install 在运行时环境执行 |
| SSE 会话不一致 | 多实例时 SSE session 断裂 | 极速模式 + 实例限额=1,确保请求路由到同一实例 |
| 冷启动超时 | 首次调用 pip install 耗时导致超时 | 预置 1 个快照,避免冷启动 |
| 智能顾问连接不上 FC | 复制 URL 时带入不可见字符 | 从纯文本文件复制 URL,避免从聊天工具复制 |
安全对比
| 安全维度 | 跳板机方案 | FC 方案 |
|---|---|---|
| AK/SK 存储位置 | 腾讯云跳板机(跨云) | 阿里云 FC 环境变量(不出阿里云) |
| 传输加密 | HTTP(无 TLS) | HTTPS(FC 内置证书) |
| 认证方式 | Nginx Basic Auth | FC Bearer Token(自动管理) |
| 进程隔离 | 与其他服务共享跳板机 | FC 沙箱隔离 |
| SLS 调用链路 | 跳板机→公网→SLS | FC→SLS 内网 |
成本估算
| 费用项 | 规格 | 预估费用 |
|---|---|---|
| 函数调用 | 前 100 万次/月免费 | 免费 |
| 执行时长 | 前 40 万 GB·s/月免费 | 免费 |
| 预留实例 | 1 个(2GB) × 24h | 约 ¥15/月 |
| 公网流量 | 返回查询结果文本 | 极少 |
| 月度合计 | 约 ¥15(不预留则接近免费) | |
总结
通过将 MCP Server 迁移到阿里云函数计算,实现了三重优化:
1. 安全提升:AK/SK 不出阿里云,HTTPS 加密传输,FC 沙箱隔离
2. 性能提升:FC 到 SLS 走内网,延迟更低;跳板机释放 150MB 内存
3. 运维简化:全托管零运维,无需维护进程/Nginx/证书
对于需要跨云接入 MCP Server 的场景,优先部署在数据源所在云的 Serverless 平台是最佳实践——既避免了凭证跨云,又获得了内网调用的低延迟优势。