关于 alibabacloud-dts-task-manager
此 Skill 通过 Alibaba Cloud CLI 管理 Alibaba Cloud DTS 数据迁移和同步任务,适合需要创建、监控或控制 DTS 任务的用户。它以交互式流程收集配置,并涵盖任务创建、状态查询、暂停、恢复和释放。
主要功能
- 01创建迁移或同步任务
- 02查看任务列表、状态和延迟
- 03暂停、启动或恢复任务
- 04检查后确认并释放任务
- 05创建失败时自动释放实例
适用场景
- 01创建数据库迁移任务
- 02检查同步任务状态与延迟
- 03暂停或恢复正在运行的任务
- 04确认后释放不再需要的任务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-dts-task-manager安装后在 Claude Code 中输入/alibabacloud-dts-task-manager确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/create-task.mddelete-task.mdlist-tasks.mdram-policies.mdsetup.mdstart-task.mdsuspend-task.mdtask-status.md详细介绍
Alibaba Cloud DTS 任务管理器
概述
管理 Alibaba Cloud 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
- 定义迁移对象:整个数据库或指定表,可选名称映射
- 选择迁移类型:架构/全量数据/增量数据(默认:全部)
- 选择实例规格:微型/小型/中型/大型
- 检查摘要(密码显示为
******)并确认 - 执行:CreateDtsInstance -> ConfigureDtsJob -> StartDtsJob
- 如果实例创建后任何步骤失败,则自动释放该实例
示例输入:"Create a MySQL to Kafka sync task" 示例输出:
DTS task created successfully!
Instance ID: <dts-instance-id>
Job ID: <job-id>
Status: Initializing
To check status: aliyun dts DescribeDtsJobDetail --DtsJobId <job-id> --RegionId cn-hangzhou
列出任务
步骤(完整详情见 references/list-tasks.md):
- 检查先决条件
- 分别按每种 JobType(MIGRATION、SYNC、SUBSCRIBE)查询任务
- 以表格形式显示汇总结果
示例输入:"List my DTS tasks" 示例输出:
| Task ID | Name | Type | Status | Source | Destination | Delay |
|----------------|------------------------------|-----------|----------------|--------------|--------------|--------|
| <job-id-1> | migration-mysql-mysql-0401 | MIGRATION | Migrating | RDS MySQL | RDS MySQL | - |
| <job-id-2> | sync-mysql-kafka-0401 | SYNC | Synchronizing | RDS MySQL | Kafka | 128ms |
查看任务状态
步骤(完整详情见 references/task-status.md):
- 检查先决条件
- 解析 ID:如果只提供了一个 ID,先通过 DescribeDtsJobs 查询
- 调用 DescribeDtsJobDetail
- 显示状态、进度和延迟(将毫秒转换为易读格式)
示例输入:"Check status of " 示例输出:
Task: <job-id> (migration-mysql-mysql-0401)
Type: MIGRATION
Status: Migrating
Progress:
Schema migration: Finished
Full data migration: Finished (1,234,567 rows)
Incremental: Running, delay 236ms
Source: RDS MySQL <source-instance-id> (cn-hangzhou)
Destination: 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 端点在 ConfigureDtsJob 中需要
--SourceEndpointDatabaseName。
交互规则
重要:所有信息收集都必须使用交互式选项,以避免自由文本问题中断工作流。
选择类信息:提供固定选项
适用于有固定选项的场景:任务类型、引擎类型、访问方式、实例选择、迁移类型、规格选择等。
自由输入信息:提供常用默认值 + 自定义输入
适用于需要用户自由输入的场景:IP 地址、端口、用户名、密码、数据库名称、表名称等。 将常用默认值作为选项提供;用户可以选择这些选项或输入自定义值。 尽可能将相关输入项合并到最少的交互轮次中。
敏感信息:绝不以明文显示
严重提示:密码、AccessKey Secret、证书和私钥在对话中的任何位置都绝不能以明文出现——此要求适用于所有阶段:
- 收集时:当用户在消息中提供密码或密钥时(例如,“password: MyPass123”),必须立即将其视为敏感信息。回复中不得引用、复述、总结或提及明文值。只需确认已收到,例如:“已收到源数据库密码。”随后将其存储在内部,以供之后执行 CLI 命令。即使用户以明文输入密码,回复中也绝不能出现该密码。
- 总结用户输入时:如果用户在一条消息中提供多个字段,其中包含密码(例如,“username: dts, password: abc123”),确认时必须对密码打码:“Username: dts, Password: ******”。绝不能复现用户消息中的密码部分。
- 确认摘要中:密码字段始终显示为
******。 - 向用户展示的 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
让用户通过交互式选项选择 Region,而不是输入文本。
支持的 Region 列表:
中国大陆:
| 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(南京 - 本地 Region) |
| cn-fuzhou | 中国华东 6(福州 - 本地 Region) |
| cn-wuhan-lr | 中国华中 1(武汉 - 本地 Region) |
中国香港及国际地区:
| 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 - 深圳)
- 选择“其他”后:cn-guangzhou、cn-qingdao、cn-chengdu、cn-hongkong
- 继续选择“其他”:显示剩余 Region,或允许用户直接输入 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_.\-]+$) |
| 区域 ID | 必须与已知区域 ID 列表匹配,或符合格式 ^[a-z]{2}-[a-z]+-?\d*$ |
| DtsJobName | 只能包含字母数字字符、连字符、下划线和点,最长 128 个字符 |
Shell 注入防护:
- 传递给 CLI 命令时,必须将所有用户提供的参数值用单引号(
'...')括起来,而不仅仅是密码 - 添加引号前,拒绝任何包含单引号(
')的输入,或对其进行正确转义('\'') - 对于不允许包含 Shell 元字符的参数(IP、端口、实例 ID、用户名、数据库名称),拒绝任何包含 Shell 元字符(
; | & $ ` ( ) { } \n)的输入 - 将 DbList JSON 传递给
--DbList之前,必须验证其是否为语法正确的 JSON - 如果验证失败,显示清晰的错误消息并要求用户重新输入;绝不将未经验证的输入传递给 Shell
备注
- 绝不在任何输出中显示密码、证书、密钥或其他敏感信息;在确认摘要中显示为
****** - 释放任务是不可逆操作;务必要求二次确认
- 创建任务会产生按量付费费用;请提醒用户
- 如果 ID 格式不明确,请通过 DescribeDtsJobs 尝试模糊搜索匹配
- 默认使用配置文件中的区域,除非用户指定其他区域
- 所有信息收集都必须使用交互方式,以避免工作流中断
- 将相关输入项合并到同一轮交互中,以尽量减少交互轮数