阿里云 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):

  1. 前置条件检查(CLI 已安装、认证已配置)
  2. 选择地域 + 任务类型(MIGRATION 或 SYNC)
  3. 配置源:引擎类型、接入方式、连接信息、可选 SSL
  4. 配置目标:引擎类型、接入方式、连接信息、可选 SSL
  5. 定义迁移对象:整库或指定表,可选名称映射
  6. 选择迁移类型:结构 / 全量数据 / 增量(默认:全部)
  7. 选择实例规格:micro / small / medium / large
  8. 审查摘要(密码显示为 ******)并确认
  9. 执行:CreateDtsInstance -> ConfigureDtsJob -> StartDtsJob
  10. 实例创建后任何步骤失败,自动释放实例

示例输入:“创建 MySQL 到 Kafka 同步任务”

示例输出

DTS 任务创建成功!
  实例 ID:<dts-instance-id>
  Job ID: <job-id>
  状态:   初始化中

查看状态:aliyun dts DescribeDtsJobDetail --DtsJobId <job-id> --RegionId cn-hangzhou

列出任务

步骤(完整详情见 references/list-tasks.md):

  1. 前置条件检查
  2. 按各 JobType(MIGRATION、SYNC、SUBSCRIBE)分别查询任务
  3. 以表格格式展示合并结果

示例输入:“列出我的 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):

  1. 前置条件检查
  2. 解析 ID:如果只给一个 ID,先通过 DescribeDtsJobs 查询
  3. 调用 DescribeDtsJobDetail
  4. 展示状态、进度、延迟(毫秒转换为可读格式)

示例输入:“检查 <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):

  1. 解析 ID,展示任务信息,确认,然后调用 SuspendDtsJob

启动/恢复(完整详情见 references/start-task.md):

  1. 解析 ID,然后调用 StartDtsJob

释放/删除(完整详情见 references/delete-task.md):

  1. 解析 ID
  2. 预检查:调用 DescribeDtsJobDetail 检查当前状态
  3. 如果任务活跃(Synchronizing/Migrating/InitializingDataLoad),警告用户并要求明确确认
  4. 调用 DeleteDtsJob 前需要双重确认

环境设置

步骤(完整详情见 references/setup.md):

  1. 检查 aliyun CLI 安装
  2. 检查认证配置
  3. 用 DescribeDtsJobs 调用测试连通性

边界情况

  • 用户只提供一个 ID:先尝试作为 DtsJobId;通过 DescribeDtsJobs 查询 DtsInstanceId。如果任务的 DtsInstanceID 字段为空,只传 DtsJobId。
  • API 参数大小写不一致DescribeDtsJobDetail 使用 --DtsInstanceID(大写 D),而 DeleteDtsJob/ConfigureDtsJob 使用 --DtsInstanceId(小写 d)。调用前始终用 aliyun dts &lt;API&gt; 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 元字符(` ; | &amp; $ ( ) { } \n ``)的输入
  • DbList JSON 传给 --DbList 前必须校验为语法正确的 JSON
  • 如果校验失败,显示清晰的错误消息并请用户重新输入该值;绝不将未校验的输入传给 shell

注意事项

  • 绝不在任何输出中显示密码、证书、密钥或其他敏感信息;在确认摘要中显示为 ******
  • 释放任务是不可逆操作;始终要求双重确认
  • 创建任务会产生费用(按量付费);提醒用户
  • 如果 ID 格式模糊,尝试通过 DescribeDtsJobs 模糊搜索匹配
  • 默认使用配置文件中的地域,除非用户指定不同地域
  • 所有信息收集必须使用交互式方法以避免工作流中断
  • 将相关输入项合并到同一交互轮次以最小化轮次

文档 6 / 6:alibabacloud-tablestore-ops