阿里云 DTS 任务管理器
概述
管理阿里云 DTS(数据传输服务)任务:创建数据迁移/同步任务,查看任务状态/延迟,停止/启动/释放任务。所有操作交互式引导完成。
参数解析
根据用户输入确定操作模式,并阅读对应参考文件获取详细工作流:
| 用户意图 | 关键词 | 操作 | 参考文件 |
|---|---|---|---|
| 创建迁移任务 | 空 / "create" / "new" / "migration" | 交互式创建 | references/create-task.md |
| 创建同步任务 | "sync" / "synchronization" | 交互式创建同步任务 | references/create-task.md |
| 查看任务列表 | "list" / "view" / "ls" | 列出所有任务 | references/list-tasks.md |
| 查看任务状态 | "status ID" | 查看指定任务详情 | references/task-status.md |
| 停止任务 | "stop ID" / "suspend ID" / "pause ID" | 暂停指定任务 | references/suspend-task.md |
| 启动/恢复任务 | "start ID" / "resume ID" | 启动或恢复任务 | references/start-task.md |
| 释放任务 | "release ID" / "delete ID" / "remove ID" | 释放(删除)任务 | references/delete-task.md |
| 环境设置 | "setup" / "configure" / "init" | 检查并配置环境 | references/setup.md |
未提供参数时,请用户选择所需操作。
分步操作工作流
创建任务(迁移 / 同步)
步骤(完整详情见 references/create-task.md):
- 前置条件检查(CLI 已安装、认证已配置)
- 选择地域 + 任务类型(MIGRATION 或 SYNC)
- 配置源:引擎类型、接入方式、连接信息、可选 SSL
- 配置目标:引擎类型、接入方式、连接信息、可选 SSL
- 定义迁移对象:整库或指定表,可选名称映射
- 选择迁移类型:结构 / 全量数据 / 增量(默认:全部)
- 选择实例规格:micro / small / medium / large
- 审查摘要(密码显示为
******)并确认 - 执行:CreateDtsInstance -> ConfigureDtsJob -> StartDtsJob
- 实例创建后任何步骤失败,自动释放实例
示例输入:“创建 MySQL 到 Kafka 同步任务”
示例输出:
DTS 任务创建成功!
实例 ID:<dts-instance-id>
Job ID: <job-id>
状态: 初始化中
查看状态:aliyun dts DescribeDtsJobDetail --DtsJobId <job-id> --RegionId cn-hangzhou
列出任务
步骤(完整详情见 references/list-tasks.md):
- 前置条件检查
- 按各 JobType(MIGRATION、SYNC、SUBSCRIBE)分别查询任务
- 以表格格式展示合并结果
示例输入:“列出我的 DTS 任务”
示例输出:
| 任务 ID | 名称 | 类型 | 状态 | 源 | 目标 | 延迟 |
|----------------|------------------------------|-----------|--------------|--------------|--------------|--------|
| <job-id-1> | migration-mysql-mysql-0401 | MIGRATION | 迁移中 | RDS MySQL | RDS MySQL | - |
| <job-id-2> | sync-mysql-kafka-0401 | SYNC | 同步中 | RDS MySQL | Kafka | 128ms |
查看任务状态
步骤(完整详情见 references/task-status.md):
- 前置条件检查
- 解析 ID:如果只给一个 ID,先通过 DescribeDtsJobs 查询
- 调用 DescribeDtsJobDetail
- 展示状态、进度、延迟(毫秒转换为可读格式)
示例输入:“检查 <job-id> 的状态”
示例输出:
任务:<job-id> (migration-mysql-mysql-0401)
类型:MIGRATION
状态:迁移中
进度:
结构迁移: 已完成
全量数据迁移: 已完成(1,234,567 行)
增量: 运行中,延迟 236ms
源: RDS MySQL <source-instance-id> (cn-hangzhou)
目标:RDS MySQL <dest-instance-id> (cn-hangzhou)
停止 / 启动 / 释放任务
停止(完整详情见 references/suspend-task.md):
- 解析 ID,展示任务信息,确认,然后调用 SuspendDtsJob
启动/恢复(完整详情见 references/start-task.md):
- 解析 ID,然后调用 StartDtsJob
释放/删除(完整详情见 references/delete-task.md):
- 解析 ID
- 预检查:调用 DescribeDtsJobDetail 检查当前状态
- 如果任务活跃(Synchronizing/Migrating/InitializingDataLoad),警告用户并要求明确确认
- 调用 DeleteDtsJob 前需要双重确认
环境设置
步骤(完整详情见 references/setup.md):
- 检查 aliyun CLI 安装
- 检查认证配置
- 用 DescribeDtsJobs 调用测试连通性
边界情况
- 用户只提供一个 ID:先尝试作为 DtsJobId;通过 DescribeDtsJobs 查询 DtsInstanceId。如果任务的 DtsInstanceID 字段为空,只传 DtsJobId。
- API 参数大小写不一致:
DescribeDtsJobDetail使用--DtsInstanceID(大写 D),而DeleteDtsJob/ConfigureDtsJob使用--DtsInstanceId(小写 d)。调用前始终用aliyun dts <API> help验证。 - ID 格式模糊:如果 ID 不明确匹配 DtsJobId 或 DtsInstanceId 模式,通过 DescribeDtsJobs 模糊搜索。
- 删除活跃任务:绝不在预检查前删除运行中任务。先查询状态;如果 Synchronizing/Migrating,提示用户先暂停或明确确认强制删除。
- 创建流程中途失败:如果 CreateDtsInstance 成功但 ConfigureDtsJob 或 StartDtsJob 失败,自动释放已创建实例以避免持续计费。
- 超时/重试:所有 API 调用使用
--read-timeout 30 --connect-timeout 10。CreateDtsInstance 包含--ClientToken(UUID)用于幂等重试。 - 多地域查询:列出任务时,按地域分别查询 MIGRATION/SYNC/SUBSCRIBE。
--JobType参数默认为 MIGRATION;省略它会静默丢弃同步/订阅任务。绝不用--Type(导致 InvalidParameter)。 - MongoDB 特殊处理:MongoDB endpoint 在 ConfigureDtsJob 中需要
--SourceEndpointDatabaseName。
交互规则
重要:所有信息收集必须使用交互式选择,避免自由文本问题导致工作流中断。
选择型信息:提供固定选项
适用于有固定选择的场景:任务类型、引擎类型、接入方式、实例选择、迁移类型、规格选择等。
自由输入信息:提供常见默认值 + 自定义输入
适用于需要用户自由输入的场景:IP 地址、端口、用户名、密码、数据库名、表名等。
提供常见默认值作为选项;用户可选择或输入自定义值。
将相关输入项合并到尽可能少的交互轮次。
敏感信息:绝不显示明文
关键:密码、AccessKey Secret、证书和私钥绝不能以明文出现在对话中的任何位置——这适用于所有阶段:
- 收集时:当用户在消息中提供密码或密钥(例如“password: MyPass123”),你必须立即将其视为敏感信息。不要在你的响应中引用、重复、总结或提及明文值。 只需确认收到,例如“源数据库密码已收到。”然后在内部存储供后续 CLI 执行使用。即使用户以明文输入密码,你的回复也绝不能包含它。
- 总结用户输入时:如果用户在一则消息中提供多个字段包括密码(例如“username: dts, password: abc123”),你的确认必须掩码密码:“用户名:dts,密码:******”。绝不复制用户消息中的密码部分。
- 确认摘要中:密码字段始终显示
******。 - 向用户显示的 CLI 命令中:密码显示为
'******',绝不显示实际值。实际值仅在执行命令时内部使用。 - 错误消息/日志中:如果 API 错误响应包含敏感字段,显示前脱敏。
- 存储的变量或引用中:绝不在后续消息中重复明文值。
- 本地文件中:绝不将密码或密钥写入任何本地文件(脚本、配置、日志、临时文件等)。所有敏感值只能在 CLI 执行期间存在于内存中。
在实际 CLI 执行中,密码使用单引号包裹以防止 shell 扩展。
前置条件
执行任何操作前,必须完成以下检查:
1. 检查 aliyun CLI 安装
which aliyun
如果未安装,提示用户:
- macOS:
brew install aliyun-cli - 或从 https://github.com/aliyun/aliyun-cli/releases 下载
- 安装后,运行
aliyun configure设置认证
2. 检查认证配置
aliyun configure list
如果未配置,引导用户设置:
aliyun configure --mode AK
需要:AccessKey ID、AccessKey Secret、Region Id
重要:绝不在对话中显示用户的 AccessKey Secret。保护敏感信息。
3. 选择地域
让用户使用交互式选择而非文本输入选择地域。
支持的地域列表:
中国大陆:
| Region ID | 名称 |
|---|---|
| cn-beijing | 华北 2(北京) |
| cn-hangzhou | 华东 1(杭州) |
| cn-shanghai | 华东 2(上海) |
| cn-shenzhen | 华南 1(深圳) |
| cn-guangzhou | 华南 3(广州) |
| cn-qingdao | 华北 1(青岛) |
| cn-zhangjiakou | 华北 3(张家口) |
| cn-huhehaote | 华北 5(呼和浩特) |
| cn-wulanchabu | 华北 6(乌兰察布) |
| cn-heyuan | 华南 2(河源) |
| cn-chengdu | 西南 1(成都) |
| cn-nanjing | 华东 5(南京 - 本地地域) |
| cn-fuzhou | 华东 6(福州 - 本地地域) |
| cn-wuhan-lr | 华中 1(武汉 - 本地地域) |
中国香港及国际:
| Region ID | 名称 |
|---|---|
| cn-hongkong | 中国(香港) |
| ap-southeast-1 | 新加坡 |
| ap-southeast-3 | 马来西亚(吉隆坡) |
| ap-southeast-5 | 印度尼西亚(雅加达) |
| ap-southeast-6 | 菲律宾(马尼拉) |
| ap-southeast-7 | 泰国(曼谷) |
| ap-northeast-1 | 日本(东京) |
| ap-northeast-2 | 韩国(首尔) |
| eu-central-1 | 德国(法兰克福) |
| eu-west-1 | 英国(伦敦) |
| us-east-1 | 美国(弗吉尼亚) |
| us-west-1 | 美国(硅谷) |
| me-east-1 | 阿联酋(迪拜) |
| na-south-1 | 墨西哥 |
交互式分页:
- 首屏(常见):cn-beijing(华北 2 - 北京)、cn-hangzhou(华东 1 - 杭州)、cn-shanghai(华东 2 - 上海)、cn-shenzhen(华南 1 - 深圳)
- 选择 Other 后:cn-guangzhou、cn-qingdao、cn-chengdu、cn-hongkong
- 继续 Other:展示剩余地域或让用户直接输入 Region ID
此步骤可与步骤 1(任务类型)合并以减少交互轮次。
错误处理
- API 调用失败时,解析错误消息并提供可操作建议
- 如果实例创建成功但后续步骤失败,自动释放已创建实例以避免计费
- 常见错误:
InvalidAccessKeyId.NotFound- 无效 AccessKey,检查配置Forbidden.RAM- RAM 权限不足,需要 AliyunDTSFullAccess 策略InvalidParameter- 参数错误,检查输入UnSupportedTaskType- 不支持的链路组合,建议更改引擎或接入方式OperationDenied- 操作被拒绝,任务状态可能不允许此操作- 网络超时 - 检查网络连接
CLI 调用规范
- 所有 aliyun CLI 命令必须包含
--user-agent AlibabaCloud-Agent-Skills参数(本地配置命令如aliyun configure除外) - 所有 aliyun CLI API 调用必须设置超时:
--read-timeout 30 --connect-timeout 10 - 所有 aliyun CLI 命令响应都是 JSON;解析 JSON 提取关键信息展示
输入校验与注入防护
关键:在构造任何 CLI 命令之前,必须校验和净化所有用户提供的输入参数以防止命令注入。
按参数类型的校验规则:
| 参数 | 校验规则 |
|---|---|
| IP 地址 | 必须匹配 IPv4 模式(^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$),每个八位组 0-255 |
| 端口 | 仅整数,范围 1-65535 |
| 实例 ID | 仅字母数字、连字符和下划线(^[a-zA-Z0-9_-]+$) |
| 数据库名 | 仅字母数字、下划线、连字符(^[a-zA-Z0-9_-]+$) |
| 表名 | 仅字母数字、下划线、连字符、点(^[a-zA-Z0-9_.\-]+$) |
| 用户名 | 仅字母数字、下划线、连字符、点(^[a-zA-Z0-9_.\-]+$) |
| Region ID | 必须匹配已知 Region ID 列表或模式 ^[a-z]{2}-[a-z]+-?\d*$ |
| DtsJobName | 仅字母数字、连字符、下划线、点,最多 128 字符 |
Shell 注入防护:
- 所有用户提供的参数值传给 CLI 命令时必须用单引号包裹(
'...'),不仅是密码 - 引用前,拒绝任何包含单引号(
')的输入,或正确转义('\'') - 对于永远无效的参数(IP、端口、实例 ID、用户名、数据库名),拒绝任何包含 shell 元字符(`
; | & $( ) { } \n ``)的输入 - DbList JSON 传给
--DbList前必须校验为语法正确的 JSON - 如果校验失败,显示清晰的错误消息并请用户重新输入该值;绝不将未校验的输入传给 shell
注意事项
- 绝不在任何输出中显示密码、证书、密钥或其他敏感信息;在确认摘要中显示为
****** - 释放任务是不可逆操作;始终要求双重确认
- 创建任务会产生费用(按量付费);提醒用户
- 如果 ID 格式模糊,尝试通过 DescribeDtsJobs 模糊搜索匹配
- 默认使用配置文件中的地域,除非用户指定不同地域
- 所有信息收集必须使用交互式方法以避免工作流中断
- 将相关输入项合并到同一交互轮次以最小化轮次
阿里云skills
◯ 评论 0