mcpField
A
alibabacloud-workbench-cli

alibabacloud-workbench-cli

github.com/aliyunクラウド・DevOps281734 回インストール1 日前に更新
リポジトリ

alibabacloud-workbench-cli について

`workbench` CLI で Alibaba Cloud ECS を操作するエージェント向けのスキルです。特にパブリックIPのないインスタンスを対象とし、リモートコマンド、ファイル転送、ポートフォワーディング、プロファイルとセッションの管理、トラブルシューティングを扱います。破壊的コマンドやファイル上書きへの安全策も含みます。

主な機能

  1. 01独立したリモートコマンドを実行
  2. 02最大1GBのファイルをアップロード・ダウンロード
  3. 03セッションとデーモンのライフサイクルを管理
  4. 04ECSインスタンスを一覧・絞り込み
  5. 05認証プロファイルを設定・切り替え
  6. 06ポートフォワーディング

活用シーン

  1. 01ECSインスタンスで診断コマンドを実行
  2. 02アプリケーションファイルやログを転送
  3. 03リージョンやリソース条件でインスタンスを検索
  4. 04運用中のリモートセッションを管理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-workbench-cli

インストール後、Claude Code で/alibabacloud-workbench-cliを入力して読み込まれたか確認します。

同梱ファイルreferences/ram-policies.md

詳細

Workbench CLI エキスパート

Alibaba Cloud ECS インスタンス(特にパブリック IP アドレスがないインスタンス)を、workbench コマンドラインツールで操作できるように支援します。エージェントのワークフロー向けの主な機能は、ミリ秒単位のリモートコマンド実行(exec)、最大 1GB のファイル転送(upload/download)、ポートフォワーディングです。このスキルでは、インストール → 認証情報の設定 → 実行/転送/フォワーディング → セッション管理 → エラーのトラブルシューティングを扱います。

手順

1. Workbench CLI をインストールする

事前確認:

workbench version     # Should print version, commit, build date

Linux/macOS:

curl -fsSL https://workbench-cli.oss-cn-hangzhou.aliyuncs.com/install.sh | bash

Windows(PowerShell):

irm https://workbench-cli.oss-cn-hangzhou.aliyuncs.com/install.ps1 | iex

アップグレード:

workbench upgrade                        # Upgrade to latest
workbench upgrade --version 0.2.0        # Upgrade to specific version
2. 認証情報を設定する

認証情報は、アクセス権限 0600 で ~/.workbench/config.json に保存されます。エージェントは、対話型の workbench config コマンドを使用せず、このファイルを直接書き込んでください。

# Create config directory
mkdir -p ~/.workbench

# Write config file (example: AK mode)
cat > ~/.workbench/config.json << 'EOF'
{
  "current": "default",
  "profiles": {
    "default": {
      "mode": "AK",
      "access_key_id": "<AccessKeyID>",
      "access_key_secret": "<AccessKeySecret>"
    }
  }
}
EOF

# Set secure permissions
chmod 600 ~/.workbench/config.json

モード別の設定ファイルスキーマ:

AK モード:

{
  "current": "default",
  "profiles": {
    "default": {
      "mode": "AK",
      "access_key_id": "LTAI...",
      "access_key_secret": "..."
    }
  }
}

RamRoleArn モード(STS トークンを自動更新):

{
  "current": "default",
  "profiles": {
    "default": {
      "mode": "RamRoleArn",
      "access_key_id": "LTAI...",
      "access_key_secret": "...",
      "ram_role_arn": "acs:ram::123456789:role/WorkbenchRole",
      "role_session_name": "workbench-session"
    }
  }
}

CredentialsURI モード(HTTP エンドポイントが認証情報を返します):

{
  "current": "default",
  "profiles": {
    "default": {
      "mode": "CredentialsURI",
      "credentials_uri": "http://localhost:8080/credentials"
    }
  }
}
モード使用する場面
AK(デフォルト)開発、長期間有効な認証情報
StsToken一時的なセキュリティ認証情報(AccessKey + STS Token)
RamRoleArn本番環境、アカウント間アクセス、STS ロール引き受けによる最小権限(トークンを自動更新)
CredentialsCmdゼロトラスト/Vault 連携 — 外部コマンドが認証情報の JSON を出力
CredentialsURIメタデータサービス/サイドカー — HTTP エンドポイントが認証情報の JSON を返します

プロファイル管理(非対話型):

workbench config list                     # List all profiles (* marks active)
workbench config switch --profile prod    # Switch active profile
workbench config get                      # Show current profile details (JSON)
workbench config get --profile prod       # Show specific profile details
workbench config delete --profile old     # Delete a profile (cannot delete active)
3. コマンドリファレンス
workbench
├── exec             # Execute remote command (non-interactive, millisecond-level)
├── upload           # Upload local file to instance (up to 1GB, via OSS relay)
├── download         # Download file from instance (up to 1GB, via OSS relay)
├── list             # List ECS instances
├── session          # Session management (list / close)
├── daemon           # Daemon lifecycle (start / status / stop)
├── config           # Credential configuration & profile management
│   ├── set          # Set a single config field
│   ├── list         # List all profiles
│   ├── switch       # Switch active profile
│   ├── get          # Show profile details
│   └── delete       # Delete a profile
├── upgrade          # Self-update
└── version          # Print version info

グローバルフラグ:

フラグ用途デフォルト
--output / -o出力形式:`textjson`
--region / -rAlibaba Cloud のリージョン(例:cn-hangzhou)インスタンス ID のプレフィックスから自動推定
--profile / -P特定のプロファイルを使用(アクティブなプロファイルより優先)現在のアクティブなプロファイル
4. インスタンスを一覧表示する
workbench list ecs --region cn-hangzhou
workbench list ecs --region cn-hangzhou --status Running
workbench list ecs --region cn-hangzhou --tag env=prod --tag team=infra
workbench list ecs --region cn-hangzhou --instance-type ecs.g7.large
workbench list ecs --region cn-hangzhou --instance-name my-instance
workbench list ecs --region cn-hangzhou --image-id ubuntu_22_04_x64_20G_alibase_20230907.vhd
workbench list ecs --region cn-hangzhou --output json

list ecs では --region が必須です。フィルター:--status(Running|Stopped|Starting|Stopping)、--tag(key=value または key、複数回指定可能、AND 条件)、--instance-type(例:ecs.g7.large)、--instance-name(ワイルドカード * に対応)、--image-id、--vpc-id、--zone-id、--vswitch-id、--private-ip(カンマ区切り)、--limit(1~100、デフォルト 50)、--next-token(ページネーション)。

JSON 出力スキーマ:

[{
  "instance_id": "i-bp1xxxxx",
  "instance_name": "web-prod-01",
  "instance_type": "ecs.g7.large",
  "region_id": "cn-hangzhou",
  "status": "Running",
  "private_ip": "172.16.0.10",
  "public_ip": "",
  "os_type": "linux",
  "image_id": "ubuntu_22_04_x64_20G_alibase_20230907.vhd",
  "tags": {"env": "prod"}
}]
5. リモートコマンドを実行する

組み込みの安全対策:CLI は非対話型の実行ツールであり、永続的なシェルは提供しません。呼び出しごとに分離され、ステートレスに実行されるため、残存したシェルセッションによる意図しない連鎖的な損害を防げます。

エージェントの事前確認要件:破壊的なコマンド(例:rm -rf、shutdown、reboot、mkfs、dd、サービスの停止/再起動、またはデータを削除したりシステムを停止したりするコマンド)を実行する前に、エージェントは実行する操作、対象インスタンス、潜在的な影響を説明し、必ずユーザーに確認してください。ユーザーの明示的な承認なしに、破壊的なコマンドを実行してはいけません。

workbench exec --instance-id i-bp1xxxxx --command "df -h"
workbench exec --instance-id i-bp1xxxxx --command "sleep 30" --timeout 10
workbench exec --instance-id i-bp1xxxxx --command "df -h" --output json
フラグ必須説明デフォルト
--instance-id / -iはいECS インスタンス ID—
--command / -cはい実行するコマンド—
--timeoutいいえタイムアウト秒数30

重要:exec を呼び出すたびに、独立したシェルコンテキストで実行されます。状態(cd、export)は呼び出し間で保持されません。同じコンテキストを必要とするコマンドを連結するには、1 回の呼び出し内で && または ; を使用してください。

JSON 出力スキーマ:

{
  "output": "Filesystem ...\n",
  "stderr": "",
  "exit_code": 0
}
6. ファイル転送

組み込みの安全機能:upload コマンドには、上書き保護機能が組み込まれています。リモートの保存先にファイルがすでに存在する場合、CLI は上書き前に確認を求めます。

Remote file "/root/id.txt" already exists (728 B, modified Jul 27 10:42). Overwrite? [y/N]

デフォルトの回答は No です。ユーザーが明示的に確認しない場合、アップロードは中止されます。これにより、既存のリモートファイルを誤って上書きすることを防ぎます。

エージェントの事前確認要件:対話的な確認ができない自動化/エージェントのワークフローで upload を使用する場合、エージェントはまず、リモートインスタンス上に対象ファイルが存在するかどうかを確認し(例:workbench exec --command "ls -la <path>")、ファイルが上書きされる場合はユーザーに知らせる必要があります。

workbench upload ./app.jar /opt/app/app.jar --instance-id i-bp1xxxxx
workbench download /var/log/app.log ./ --instance-id i-bp1xxxxx
workbench download /var/log/app.log /tmp/local-copy.log --instance-id i-bp1xxxxx

転送は中継として OSS を経由します。ユーザーからは見えず、OSS の設定も不要です。download の第 2 引数(local-path)は省略可能で、省略した場合は現在のディレクトリがデフォルトになります。

7. セッション管理
workbench session list
workbench session list --output json
workbench session close <session-id>
workbench session close --all

セッションのライフサイクル:OPEN → RECONNECTING → BROKEN → CLOSED。アイドル状態が 30 分続くと、自動的に CLOSED になります。同一インスタンスに対する複数の操作は、1 つのセッションを共有します(透過的な多重化)。

8. デーモン管理
workbench daemon start      # Manual start (usually not needed)
workbench daemon status
workbench daemon stop       # Closes all sessions
  • 自動起動:CLI の初回呼び出し時に起動します。
  • 自動終了:最後のセッションが閉じられてから 60 秒後に終了します。
  • シングルトン:OS ユーザーごとに 1 つだけ起動します(PID ファイルロック)。
  • IPC:Unix ソケット上の JSON-RPC(~/.workbench/run/daemon.sock)。
9. リージョンの推定

CLI はインスタンス ID の 3 文字のプレフィックスからリージョンを自動的に推定します(290 以上のリージョンに対応)。推定できない場合は、--region が必須です。list コマンドでは、常に --region が必須です。

終了コード

コード定数発生条件
0ExitSuccess実行成功
1ExitGeneral分類されていないランタイムエラー(インスタンスが見つからない場合、API エラーなどを含む)
2ExitArgumentフラグの値が不足、不正な形式、または無効
3ExitSessionNotFoundセッション ID が無効、または期限切れ
4ExitAuth認証または認可に失敗
5ExitNetworkネットワークタイムアウト、WebSocket 例外
6ExitDaemonUnreachローカルデーモンが実行されていない、またはソケットが無効
7ExitSessionBusy別の TTY がセッションに接続中
N(exec のみ)exec はリモートコマンドの終了コードをそのまま引き継ぎます

エラー時の JSON 出力(--output json 指定時):

{
  "code": 1,
  "message": "InvalidParameter.InstanceId: the specified instance does not exist"
}

RAM 権限

必要な最小限の RAM ポリシー:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs-workbench:LoginECSInstance",
        "ecs-workbench:ChatMessages"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ecs:DescribeInstances",
        "ecs:DescribeCloudAssistantStatus",
        "ecs:StartTerminalSession"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "ram:CreateServiceLinkedRole",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ram:ServiceName": "workbench.ecs.aliyuncs.com"
        }
      }
    }
  ]
}

特定のインスタンスに制限するには、各ステートメントの "Resource": "*" を対応する形式に置き換えます。

  • ecs-workbench:LoginECSInstance:acs:ecs:<region>:<account-id>:ecs/<instance-id>
  • ecs アクション:acs:ecs:<region>:<account-id>:instance/<instance-id>

トラブルシューティング

エラーメッセージのパターン終了コード最初に行うこと
InvalidAccessKeyId/認証エラー4~/.workbench/config.json の AK/SK を確認してください。workbench config を再実行してください。
profile not found1workbench config list でプロファイル名を確認してください。
<region> で見つからない/インスタンスが見つからない1インスタンス ID とリージョンを確認してください。workbench list --region <region> を使用して確認してください。
ネットワークタイムアウト/WebSocket エラー5*.aliyuncs.com へのネットワーク接続を確認してください。セキュリティグループのルールを確認してください。
セッション使用中/アタッチエラー7別のターミナルが接続中です。先に閉じるか、workbench session close <id> を使用してください。
cannot start daemon/ソケットエラー6workbench daemon status を実行してください。停止している場合は、どのコマンドを実行しても自動的に再起動します。
権限が拒否されました(RAM)4## RAM Permissions の RAM ポリシーをユーザーまたはロールに適用してください。
insecure permissions2chmod 600 ~/.workbench/config.json を実行してください。
STS トークンの期限切れ4RamRoleArn モードを使用している場合、CLI が自動的に更新します。静的 STS を使用している場合は、トークンを更新してください。

コメント