alibabacloud-dts-task-manager について
Alibaba Cloud CLIでAlibaba Cloud 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(Data Transmission Service)のタスクを管理します。データ移行/同期タスクの作成、タスクのステータスや遅延の確認、タスクの停止/開始/解放を行います。すべての操作は、対話形式で案内されます。
パラメーターの解析
ユーザー入力に基づいて操作モードを判断し、詳細なワークフローについては対応するリファレンスファイルを読み込みます。
| ユーザーの意図 | キーワード | アクション | リファレンスファイル |
|---|---|---|---|
| 移行タスクの作成 | 空欄 / "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 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)個別にタスクをクエリします
- 統合した結果を表形式で表示します
入力例:「自分の DTS タスクを一覧表示」 出力例:
| 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 が 1 つだけ指定されている場合は、まず DescribeDtsJobs で検索します
- DescribeDtsJobDetail を呼び出します
- ステータス、進捗、遅延を表示します(ms を読みやすい形式に変換)
入力例:「 のステータスを確認」 出力例:
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 を呼び出す前に、2 回の確認が必要です
環境のセットアップ
手順(詳細は references/setup.md を参照):
- aliyun CLI がインストールされているか確認します
- 認証設定を確認します
- DescribeDtsJobs の呼び出しで接続をテストします
エッジケース
- ユーザーが ID を 1 つだけ指定した場合:まず 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 実行に備えて、内部で保存します。ユーザーがパスワードを平文で入力した場合でも、返信にその値を含めてはいけません。
- ユーザー入力の要約時:ユーザーが 1 つのメッセージでパスワードを含む複数の項目(例:「username: dts, password: abc123」)を指定した場合、受領確認ではパスワードをマスクする必要があります。「Username: dts, Password: ******」のようにします。ユーザーのメッセージに含まれるパスワード部分を再現してはいけません。
- 確認用の要約:パスワード項目は必ず
******と表示します。 - ユーザーに表示する CLI コマンド:実際の値ではなく、パスワードを
'******'と表示します。実際の値は、コマンドの実行時に内部でのみ使用します。 - エラーメッセージ/ログ:API エラー応答に機密情報が含まれる場合は、表示前に伏せてください。
- 保存した変数や参照:以降のメッセージで平文の値を繰り返してはいけません。
- ローカルファイル:スクリプト、設定、ログ、一時ファイルなど、ローカルファイルにパスワードやシークレットを書き込んではいけません。すべての機密情報は、CLI 実行中にメモリ上にのみ保持する必要があります。
シェルによる展開を防ぐため、実際の CLI 実行時にはパスワードをシングルクォートで囲みます。
前提条件
操作を実行する前に、以下の確認を行う必要があります。
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 | UAE(ドバイ) |
| na-south-1 | メキシコ |
インタラクティブなページ分け:
- 最初の画面(一般的なリージョン):cn-beijing(中国北部 2 - 北京)、cn-hangzhou(中国東部 1 - 杭州)、cn-shanghai(中国東部 2 - 上海)、cn-shenzhen(中国南部 1 - 深圳)
- 「その他」を選択した後:cn-guangzhou、cn-qingdao、cn-chengdu、cn-hongkong
- 続けて「その他」を選択:残りのリージョンを表示するか、ユーザーが Region ID を直接入力できるようにします
やり取りの回数を減らすため、この手順をステップ 1(タスクの種類)と組み合わせることができます。
エラー処理
- API 呼び出しに失敗した場合は、エラーメッセージを解析し、実行可能な解決策を提示します
- インスタンスの作成後に後続の手順が失敗した場合は、料金が発生しないよう、作成したインスタンスを自動的に解放します
- よくあるエラー:
InvalidAccessKeyId.NotFound- AccessKey が無効です。設定を確認してくださいForbidden.RAM- RAM 権限が不足しています。AliyunDTSFullAccess ポリシーが必要ですInvalidParameter- パラメーターエラーです。入力を確認してくださいUnSupportedTaskType- 対応していないリンクの組み合わせです。エンジンまたはアクセス方法の変更を提案してくださいOperationDenied- 操作が拒否されました。タスクのステータスによって、この操作が許可されていない可能性があります- ネットワークタイムアウト - ネットワーク接続を確認してください
CLI 呼び出しの基準
- aliyun CLI コマンドには、ローカル設定コマンド(
aliyun configureなど)を除き、必ず--user-agent AlibabaCloud-Agent-Skillsパラメーターを指定します - 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 文字 |
シェルインジェクションの防止:
- CLI コマンドに渡すユーザー指定のパラメーター値は、パスワードだけでなく、すべてシングルクォート(
'...')で囲む必要があります - クォートする前に、シングルクォート(
')を含む入力を拒否するか、適切にエスケープしてください('\'') - 入力が常に無効となるパラメーター(IP、ポート、インスタンス ID、ユーザー名、データベース名)では、シェルのメタ文字(
; | & $ ` ( ) { } \n)を含む入力を拒否してください --DbListに渡す前に、DbList JSON が構文的に正しい JSON であることを検証してください- 検証に失敗した場合は、明確なエラーメッセージを表示してユーザーに値の再入力を求めてください。検証されていない入力をシェルに渡してはいけません
注意事項
- 出力にはパスワード、証明書、キー、その他の機密情報を決して表示しないでください。確認サマリーでは
******と表示してください - タスクのリリースは取り消せない操作です。必ず二重確認を求めてください
- タスクの作成には料金が発生します(従量課金)。ユーザーにその旨を伝えてください
- ID 形式が曖昧な場合は、DescribeDtsJobs を使ってあいまい検索を試みてください
- ユーザーが別のリージョンを指定しない限り、デフォルトで設定ファイルのリージョンを使用してください
- ワークフローが中断されないよう、情報収集にはすべて対話形式を使用してください
- 対話の回数を最小限に抑えるため、関連する入力項目は同じ対話ラウンドにまとめてください