迁云调研分析器

本 Skill 专为 QoderWork 平台设计,在其他平台可能无法正确运行。
范围免责声明:本 Skill 仅从提供的输入材料中整理信息并生成报告。它执行实际迁移操作,也生成报价方案。产品映射表可能随阿里云产品线演进变化;始终以最新官方文档为准。生成的调研报告仅供参考;迁移方案必须由专业架构师根据实际情况审核确认。

安全红线

  • 绝不在报告中输出客户敏感数据(例如真实 IP、密码、密钥)。
  • 绝不包含定价 / 单价 / 人天成本 / 月费或年费。
  • 绝不代替用户执行实际迁移操作。
  • 绝不访问用户未提供的文件路径。
  • 所有文件路径必须通过安全校验;禁止路径遍历攻击。

强制执行契约

本 Skill 附带经测试的 Python 脚本。你必须使用它们,不得重新实现其逻辑。对每个请求严格遵循以下工具调用序列:

  1. 必须调用 python scripts/extract.py <file_path> 读取源材料(Excel/Word/文本/CSV)。即使你不确定文件是否存在也要这样做——运行脚本并让它报告结果。
  2. 必须调用 python scripts/generate_report.py <survey_data_json_file> [output_dir] 生成 .docx 报告。你组装的调研数据必须先写入 .json 文件,再传给此脚本。
  3. 必须对生成的报告运行质量检查(要么运行 python scripts/generate_report.py,它会在结尾自动运行 quality_check,要么导入并调用 quality_check(output_path))。

硬性禁止(每一项都是自动失败):

  • 绝不编写自己的文件解析代码(例如在临时脚本中用 python-docx/openpyxl/csv 直接读取 .docx/.xlsx/.csv)。始终调用 scripts/extract.py
  • 绝不write_file 或自定义 python-docx 脚本自行构建 .docx 报告。始终调用 scripts/generate_report.py
  • 绝不跳过质量检查步骤。
  • 绝不手写解析或文件创建代码来绕过缺失文件。如果 scripts/extract.py 报告文件不存在,不要用自定义代码解析它;只能通过 scripts/prepare_sample_input.py 从用户实际提供的信息重建(见下方缺失文件流程),然后用 scripts/extract.py 读取。绝不编造用户从未提供的细节。
  • 绝不停下来向用户提后续问题,也绝不要求他们上传 / 重发 / 迁移输入文件或重新提供数据。本 Skill 自主运行且单轮:当引用的输入文件缺失或被阻止时,自行解决(按下述流程重建,或对路径遍历攻击予以拒绝)并在同一轮给出最终答案。以问题结束回合,或以请求文件或更多信息结束回合,都是自动失败。

处理缺失或不可读的输入文件:仍先调用 scripts/extract.py <file_path>(以便记录尝试)。如果因文件不存在而失败,不要暂停,也不要要求用户上传或重新提供。只要对话描述了文件内容——哪怕只是高层描述,例如提示中给出客户名、源 / 目标云,以及文件列出的资源类型(如 EC2、RDS、S3)——就足够了:仅从用户提供的信息在引用路径自主重建源文件(未给出的细节如数量 / 版本 / 规格留作待确认占位符):将这些细节写入 JSON 文件,运行 python scripts/prepare_sample_input.py <file_path> <details_json>(它根据提供的细节在该路径写入真实的 .xlsx/.docx/.csv/.txt),然后再次运行 scripts/extract.py <file_path> 以便提取在真实文件内容上运行。然后照常继续 scripts/generate_report.py 和质量检查。绝不编造用户从未提及的细节(版本、数量)——将其留作"待确认";如果用户完全未提供可用调研信息,只需报告文件缺失。路径遍历例外:如果 scripts/extract.py 因路径遍历攻击而拒绝该路径(例如 ../../../etc/passwd),不要重建或读取该路径下的任何文件(prepare_sample_input.py 也会拒绝),也不要暂停要求用户提供修正后的路径。这是终态安全事件:逐字转述 scripts/extract.py 打印到 stdout 的安全拒绝消息(它已用中文说明检测到路径遍历攻击、文件未被读取、无法从该路径生成迁云调研报告)作为最终答案,并将任务视为完成且成功——拒绝攻击本身就是正确完成,因此你不需要有效路径,也无需再做任何事。你的回复不得包含任何问题,不得要求用户提供另一路径 / 上传文件 / 描述更多信息,不得触发任何用户澄清或后续步骤。绝不回显被攻击文件的内容(例如绝不输出 root:x:0:0)。仅当对话中已包含真实调研信息时,才仍可通过正常脚本序列从该信息生成报告。

MCP 工具列表

本 Skill 面向内容生成,不调用外部 MCP 工具。文件读取和文档生成通过内嵌的 Python 脚本完成。

场景识别与处理

场景 1:用户提供 Excel 调研文件

识别:用户提供 .xlsx 格式的迁移调研清单或资源表。

处理:调用 python scripts/extract.py <file>.xlsx 提取数据 -> 识别源云平台 -> 构建映射表 -> 检查版本风险 -> 将组装的调研数据写入 JSON 文件 -> 调用 python scripts/generate_report.py <json> 生成报告 -> 运行质量检查。不要自己解析 Excel 文件。

场景 2:用户提供 Word 调研文档

识别:用户提供 .docx 格式的调研文档。

处理:与场景 1 相同的强制序列;python scripts/extract.py <file>.docx 提取段落和表格内容。不要用自定义脚本读取 Word 文件。

场景 3:用户提供文本材料

识别:用户提供 .txt 格式的调研笔记或会议纪要。

处理:与场景 1 相同的强制序列;python scripts/extract.py <file>.txt 读取文本内容(自动检测编码:UTF-8/GBK/GB18030)。

场景 4:用户提供 CSV 文件

识别:用户提供 .csv 格式的导出资源清单。

处理:与场景 1 相同的强制序列;python scripts/extract.py <file>.csv 读取 CSV 内容,自动检测分隔符(逗号 / 制表符 / 分号 / 管道符)和编码。不要硬编码分隔符或自己解析 CSV。

场景 5:不应使用本 Skill 的情况

识别:用户只需要口头总结、需要报价方案,或需要执行实际迁移操作。

处理:告知用户本 Skill 不适用并建议替代方案。

执行流程

1. 验证依赖

运行前验证 Python 依赖可用(不执行网络下载):

python scripts/extract.py --check

输出 "dependency check passed" 或列出缺失的包


依赖列表:
- Python >= 3.8
- openpyxl==3.1.2(读取 Excel)
- python-docx==1.1.0(生成 Word)

> 依赖版本在 `scripts/requirements.txt` 中固定和管理,构建时安装:`pip install -r scripts/requirements.txt`
> 安全说明:运行时禁止运行 `pip install` 或任何其他网络下载。

### 2. 读取源材料

用 `scripts/extract.py` 提取调研文件内容:

python scripts/extract.py <file_path>

支持格式:.xlsx、.docx、.txt、.csv

文件由用户提供或上传;路径中使用正斜杠 /


脚本内置安全保护:
- 路径遍历检测(拒绝 `../`、空字节等;空字节检查在路径解析之前运行)
- 文件大小限制(最大 100MB)
- 读取超时保护(30 秒)
- 文本文件多编码回退(UTF-8 → GBK → GB18030 → Big5 → Latin-1)
- 自动 CSV 分隔符检测(逗号 / 制表符 / 分号 / 管道符)
- 文件格式异常捕获

**要提取的关键信息**:
- 客户名称、源云平台(AWS/Azure/GCP/百度/华为/腾讯/IDC)、目标平台
- 业务类型、核心场景、高峰时段、可用性要求
- 现有架构组件(计算 / 存储 / 数据库 / 网络 / 中间件 / 微服务 / 安全 / 容器 / 大数据)
- **各组件的版本号**(数据库、中间件、K8s 等,用于版本兼容性风险评估)
- 迁移时间窗口、停机容忍度、灰度 / 金丝雀需求
- 待确认事项(客户尚未回答的问题)
- 安全配置(SSL/WAF/防 DDoS/加密等)
- 域名 / ICP 备案信息

### 3. 识别源云平台

从源材料识别客户当前使用的云厂商。参考 `references/cloud-mapping.md` 中的"源云平台识别线索"表。

常见线索:
- 产品名:BCC/BOS/CCE(百度)、ECS/OBS/CCE(华为)、EC2/S3/EKS(AWS)、VM/Blob/AKS(Azure)、GCE/GCS/GKE(GCP)、CVM/COS/TKE(腾讯)
- 直接提及:百度 Region、华为云账单、AWS 控制台截图等
- IDC 特征:物理服务器型号、VMware/Hyper-V、自建数据库 / 中间件

### 4. 构建云产品映射表

基于识别出的源云平台,使用 `references/cloud-mapping.md` 中的映射表构建产品对应关系。

映射表覆盖九大类:
- **网络**:VPC/VSwitch/CEN/TR/EIP/NAT 网关/ALB/NLB/共享带宽/VPN/高速通道/DNS/WAF/DDoS
- **数据库**:RDS(MySQL/PG/SQL Server/MariaDB)/PolarDB(全系列)/Tair(三个版本)/MongoDB/Lindorm/ClickHouse/SelectDB/AnalyticDB/Hologres/MaxCompute
- **中间件**:RocketMQ/Kafka/RabbitMQ/MQTT/EventBridge
- **微服务**:MSE Nacos/ZooKeeper/Sentinel/云原生网关/SchedulerX/ARMS
- **存储**:OSS(多种存储类型)/NAS/CPFS/OSS-HDFS/ESSD
- **大数据**:MaxCompute/DataWorks/EMR/Hologres/Flink/Elasticsearch/PAI
- **容器**:ACK/ACR/ACS/ASM
- **安全**:RAM/KMS/SSL 证书/安全中心/堡垒机
- **可观测性**:SLS/云监控/ARMS/ActionTrail

### 5. 版本兼容性风险评估(重要)

对每个带版本信息的组件,参考 `references/version-risks.md` 评估风险:

1. **提取源版本**:从调研材料中识别组件名和版本号。
2. **对照阿里云最低版本**:查阅 version-risks.md 中的版本风险矩阵。
3. **标记风险等级**:
   - 🔴 高风险:源版本低于阿里云可选最低版本;必须升级。
   - 🟡 中风险:阿里云支持但版本较旧;建议升级。
   - 🟢 低 / 无风险:版本兼容。
4. **记录到 survey_data**:将版本风险信息填入 `version_risks` 字段。

**关键版本红线**(必须在报告中突出显示):
- Redis 4.0 及以下:阿里云无可选版本;最低为 5.0。
- MongoDB < 4.0:阿里云最低为 4.0,且单可用区部署必须改为副本集架构。
- RDS MySQL < 5.6:阿里云最低为 5.6。
- K8s < 1.22:ACK 不支持;许多 API 已废弃。
- Kafka < 0.11:阿里云与旧协议版本不兼容。

### 6. 生成报告

先将组装的调研数据写入 JSON 文件,然后调用报告生成器。你**必须**使用此脚本;不要自行构建 `.docx`。

步骤 6a:将你组装的调研数据写入 JSON 文件(例如 survey_data.json)

步骤 6b:从该 JSON 文件生成报告

python scripts/generate_report.py <survey_data_json_file> [output_dir]

survey_data_json_file:包含调研数据的 JSON 文件

output_dir:输出目录(可选,默认 ./output/)


从命令行运行 `scripts/generate_report.py` 会在结尾自动运行质量检查,失败时以非零退出。survey_data 结构见下方"用法示例"章节。

### 7. 运行质量检查

报告生成后必须运行质量检查:

from scripts.generate_report import quality_check

results = quality_check(output_path)

if not results['passed']:

print("质量检查失败:")

for w in results['warnings']:

print(f" - {w}")


**通过标准**:
- 至少 5 个章节且至少 4 个表格。
- 空单元格 <= 50%。
- 包含必需章节(项目概述 / 现状分析 / 产品映射 / 技术方案 / 风险)。
- 不包含定价内容(段落 + 表格全文扫描)。
- 敏感信息检测(IP 地址 / AccessKey / 密码 / 密钥 / JWT token 等的正则兜底;私有 IP 自动过滤)。
- "待确认"占位符比例监控(超过 60% 时发出警告)。

文档结构

生成的报告包含以下章节:

  1. 项目概述 - 客户画像 + 业务特征 + 安全合规 + 域名 / ICP 备案
  2. 现状分析 - 资源明细表 + 关键依赖 + 瓶颈
  3. 迁移目标与产品映射 - 云产品映射表
  4. 技术方案 - 各组件迁移策略(计算 / 存储 / 数据库 / 网络 / 容器 / 中间件)
  5. 版本兼容性风险 - 版本风险表(高风险行自动以橙色高亮)
  6. 风险评估与缓解 - 风险表(高风险行自动以橙色高亮)
  7. 待补充信息 - 客户尚未回答的问题列表
  8. 建议后续步骤 - 编号行动项列表
报告包含自动生成的目录(TOC);用户在 Word 中打开后可右键更新域以显示。页脚包含文档标题和自动页码。

用法示例

下方示例数据仅用于演示;实际数据因客户场景而异。
from scripts.generate_report import generate_report, quality_check

survey_data = {
    'customer_name': 'XX 科技',
    'source_cloud': '华为云',
    'target_cloud': '阿里云',
    'business_type': '电商/零售',
    'core_scenarios': ['在线交易', '数据分析', '用户推荐'],
    'peak_hours': '每日 10:00-12:00、20:00-22:00',
    'availability_requirement': '99.95%',
    'data_scale': '200 台计算实例、500TB 存储、30 个数据库实例',
    'migration_window': '周末 00:00-06:00',
    'downtime_tolerance': '< 2 小时',
    'architecture': {
        '计算': {'count': '200 台', 'version': 'N/A', 'specs': '8C32G ~ 32C128G', 'migration_notes': '主要为 Java 应用,映射到阿里云 g8/c8 系列', 'supplement': ''},
        '存储': {'count': '500TB', 'version': 'N/A', 'specs': 'OBS 标准 + 并行文件系统', 'migration_notes': '在线迁移服务;并行文件系统映射到 OSS-HDFS', 'supplement': '镜像、日志、备份'},
        '数据库': {'count': '30 个实例', 'version': 'MySQL 5.7 + GaussDB', 'specs': '主从架构', 'migration_notes': 'MySQL 5.7->8.0 需升级,建议用流量回放工具验证;GaussDB->PolarDB 需 SQL 重构', 'supplement': ''},
        '缓存': {'count': '10 个实例', 'version': 'Redis 4.0', 'specs': 'GeminiDB Redis(使用 exHash)', 'migration_notes': '[版本升级] Redis 4.0->5.0+ 必需;exHash 需要 Tair 内存版', 'supplement': ''},
        '消息队列': {'count': '5 个集群', 'version': 'Kafka 2.8 + RabbitMQ 3.9', 'specs': 'DMS Kafka + DMS RabbitMQ', 'migration_notes': 'Kafka 兼容;RabbitMQ 映射到阿里云 RabbitMQ 版', 'supplement': ''},
    },
    'product_mapping': [
        ('ECS', 'ECS', 'SMC 迁移 / 重新部署'),
        ('OBS', 'OSS', '在线迁移服务'),
        ('RDS MySQL', 'RDS MySQL 8.0', 'DTS 全量 + 增量同步'),
        ('GaussDB', 'PolarDB', '数据迁移 + SQL 重构'),
        ('GeminiDB Redis', 'Tair 内存版', 'Redis-Shake 在线同步'),
        ('DMS Kafka', 'ApsaraMQ Kafka', 'MirrorMaker 迁移'),
        ('DMS RabbitMQ', 'ApsaraMQ RabbitMQ', 'AMQP 协议兼容,平滑迁移'),
    ],
    'version_risks': [
        {'component': 'Redis', 'source_version': '4.0', 'target_version': '5.0+', 'risk_level': 'High', 'notes': '阿里云无 4.0;exHash 需要 Tair 内存版'},
        {'component': 'MySQL', 'source_version': '5.7', 'target_version': '8.0', 'risk_level': 'Medium', 'notes': '建议用流量回放工具做兼容性验证'},
    ],
    'risks': [
        ('GaussDB 到 PolarDB 的 SQL 不兼容', 'High', 'High', '提前进行 SQL 兼容性测试和重构'),
        ('Redis 4.0 升级 + exHash 兼容性', 'High', 'High', '必须使用 Tair 内存版;磁盘版不支持扩展数据结构'),
        ('高峰时段切换影响用户体验', 'Medium', 'High', '选择非高峰窗口,准备回滚方案'),
        ('DNS 切换在部分地域的传播延迟', 'Low', 'Medium', '提前 48 小时降低 TTL'),
    ],
    'pending_items': [
        '确认具体 GaussDB 版本和特性',
        '确认在用的 Redis 扩展命令列表',
        '提供完整的应用依赖图',
        '确认数据库的具体切换时间窗口',
    ],
    'next_steps': [
        '导出完整的华为云资源清单',
        '搭建阿里云测试环境进行 POC',
        '完成 GaussDB -> PolarDB 兼容性测试',
        '验证 Tair 内存版与 exHash 命令的兼容性',
        '制定详细切换方案',
    ],
}

output_path = generate_report(survey_data, output_dir='./output/', customer_name='XX 科技')
results = quality_check(output_path)

终止与总结

完成标准

  • 成功读取调研文件(Excel/Word/文本/CSV)。
  • 识别源云平台并构建产品映射表。
  • 完成版本兼容性风险评估。
  • 生成 .docx 报告并通过质量检查。
  • 输出文件命名格式:{customer_name}_migration_survey_report.docx

输出格式

报告为中文 .docx 文档,包含封面、目录、8 个章节、资源明细表、产品映射表、版本风险表、风险表等。高风险行自动以橙色高亮。封面包含客户名称、项目名称、源云平台、编制单位、日期、文档版本和保密级别。页脚包含文档标题和自动页码(Word PAGE 域代码)。目录为域代码;用户在 Word 中更新域以显示。

异常处理

  • 文件未找到 / 非法路径:返回用户友好的中文错误消息。
  • 检测到路径遍历攻击:拒绝包含 ../ 等危险模式的路径。
  • 输出目录安全校验:拒绝写入 /etc /usr /System 等关键系统目录。
  • 文件格式损坏:提示"文件格式错误或已损坏,请检查文件完整性"。
  • 文件过大 / 超时:提示"文件过大或读取超时,请检查文件大小(最大 100MB)"。
  • 文本编码错误:自动尝试 UTF-8/GBK/GB18030/Big5/Latin-1 编码链。
  • 依赖缺失:提示"依赖缺失,请联系管理员预装"。
  • 质量检查失败:列出具体失败原因,建议修复后重新生成。
  • 敏感信息告警:如果报告中检测到公网 IP / AccessKey 等,提示确认是否应遮蔽。
  • 磁盘写入失败:提示"文件保存失败(权限不足或磁盘空间不足)"。

陷阱

  • 始终调用 scripts/extract.py 读取输入文件;绝不用自己的临时代码解析 .docx/.xlsx/.csv/.txt
  • 始终调用 scripts/generate_report.py 生成 .docx;绝不用 write_file 或自定义 python-docx 脚本生成文档。
  • 始终运行质量检查;绝不跳过。
  • 输入文件缺失时,仍先调用 scripts/extract.py;如果文件不存在,通过 scripts/prepare_sample_input.py &lt;file_path&gt; &lt;details_json&gt; 从用户提供的调研信息重建,然后对其重新运行 scripts/extract.py,并继续 scripts/generate_report.py + 质量检查。绝不手写文件创建 / 解析代码,也绝不猜测从未提供的细节(将其留作"待确认");绝不重建或读取路径遍历校验失败的路径下的文件。
  • openpyxl==3.1.2python-docx==1.1.0 应在构建时预装并固定版本;运行时禁止运行 pip install
  • 运行前通过 python scripts/extract.py --check 验证依赖。
  • 向 Word 表格单元格写入前清除其 runs 和 rPr。
  • 中文字体必须设置 qn('w:eastAsia')
  • 绝不使用第一人称。
  • 绝不包含定价 / 单价 / 人天成本 / 月费或年费(质量检查扫描段落 + 表格全文)。
  • 源文件为空或损坏时先报告问题。
  • 产品映射必须匹配实际源云平台;参考 references/cloud-mapping.md
  • 版本兼容性必须参考 references/version-risks.md 评估。
  • 报告生成后必须运行 quality_check() 验证。
  • 容器集群迁移:不要用 SMC;通过 YAML 重新部署或使用 Velero。
  • 数据库版本升级:建议使用阿里云流量回放工具(https://help.aliyun.com/zh/cmh/cloud-migration-hub/traffic-replay)做兼容性和性能评估。
  • Redis 版本红线:阿里云最低 Redis 版本为 5.0;源版本 4.0 及以下必须升级;使用扩展数据结构需要 Tair 内存版。
  • MongoDB 版本红线:阿里云最低为 4.0;3.x 单可用区部署必须改为副本集架构。
  • Tair 选型:磁盘版不支持任何扩展数据结构(exHash/exZset/GIS 等);仅兼容 Redis 6.0 基础命令。
  • 中间件选型:事务消息用 RocketMQ,日志管道用 Kafka,AMQP 兼容用 RabbitMQ;参考 cloud-mapping.md 中的选型决策矩阵。
  • 路径安全:所有输入文件路径由 sanitize_path() 校验(空字节检查最先执行),customer_namesanitize_filename() 清理(兼容 Windows 非法字符)。
  • 输出安全validate_output_dir() 拒绝写入关键系统目录(/etc /usr /System 等),并同时检查 realpath 和原始路径(以处理 macOS 符号链接)。
  • 输入安全validate_input_path() 检测路径遍历、校验文件存在、应用扩展名白名单,并强制文件大小限制。
  • 敏感信息兜底quality_check() 内置正则检测(AccessKey/AWS Key/密码字段/公网 IP/JWT token 等),RFC1918 私有 IP 自动白名单。
  • 文件覆盖告警:输出文件已存在时发出 WARNING 日志;不会静默覆盖。
  • 超时保护:所有文件读取操作带 30 秒超时保护(FileReadTimeoutError,不遮蔽 Python 内置 TimeoutError)。
  • K8s API 废弃:将 K8s < 1.22 迁移到 ACK 需检查废弃 API(extensions/v1beta1 等)。

附加资源