mcpField
A
aliyun-ecs-manage

aliyun-ecs-manage

github.com/cinienceクラウド・DevOps39674 回インストール11 週間前に更新
リポジトリ

aliyun-ecs-manage について

aliyun-ecs-manage は、Alibaba Cloud ECS リソースを管理するためのスキルです。Python SDK のスクリプトで複数リージョンのインベントリ、使用状況の照会、リモートコマンドを扱い、幅広い ECS API 操作も案内します。

主な機能

  1. 01複数リージョンのインスタンス一覧
  2. 02CPU・メモリ・ネットワーク使用状況の照会
  3. 03Cloud Assistant によるコマンド実行
  4. 04リージョンや状態別のインスタンス集計
  5. 05ディスク・セキュリティグループ・スナップショット管理

活用シーン

  1. 01複数リージョンの ECS インスタンスを棚卸し
  2. 02単一インスタンスのリソース使用状況を確認
  3. 03稼働中のインスタンスでリモートシェルコマンドを実行

インストール

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

$npx skills add https://github.com/cinience/alicloud-skills --skill aliyun-ecs-manage

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
api_overview.md
command-assistant.md
describe-instances.md
disks.md
endpoints.md
images.md
instances.md
keypairs.md
monitoring-events.md
network-interfaces.md
security-groups.md
snapshots.md
sources.md
tags.md
scripts/
list_instances_all_regions.py
query_instance_usage.py
run_remote_command.py
summary_instance_specs.py
summary_instances_by_instance_type.py
summary_instances_by_region.py
summary_instances_by_security_group.py
summary_instances_by_status.py
summary_instances_by_vpc.py

詳細

カテゴリ:サービス

Elastic Compute Service(ECS)

検証

mkdir -p output/aliyun-ecs-manage
python -m py_compile skills/compute/ecs/aliyun-ecs-manage/scripts/list_instances_all_regions.py
python -m py_compile skills/compute/ecs/aliyun-ecs-manage/scripts/query_instance_usage.py
python -m py_compile skills/compute/ecs/aliyun-ecs-manage/scripts/run_remote_command.py
echo "py_compile_ok" > output/aliyun-ecs-manage/validate.txt

合格基準:コマンドが終了コード 0 で終了し、output/aliyun-ecs-manage/validate.txt が生成されること。

出力と証拠

  • リストおよび要約の出力は output/aliyun-ecs-manage/ に保存します。
  • 各証拠ファイルにコマンド引数とリージョンの範囲を記録します。

Alibaba Cloud OpenAPI(RPC)と公式 SDK または OpenAPI Explorer を使用して、ECS リソースを管理します。 すべての例と実行では、Python SDK を優先してください。

前提条件

  • AccessKey を用意します(最小権限の RAM ユーザー/ロール)。
  • 正しいリージョンとエンドポイント(パブリック/VPC)を選択します。
  • ECS OpenAPI は RPC 形式です。手動で署名するのを避けるため、SDK または OpenAPI Explorer を優先してください。

API の動作に関する注意事項(ECS ドキュメントより)

  • ほとんどのリスト/詳細取得 API は、PageNumber と PageSize、または NextToken と MaxResults によるページネーションに対応しています。
  • RAM ユーザー/ロールに権限がない場合、DescribeInstances は空のリストを返します。権限を検証するには DryRun を使用してください。
  • DescribeInstances では、NextToken と MaxResults を使用するページ分割クエリが推奨されます。返された NextToken を使用して後続のページを取得してください。
  • クライアントにリージョンが設定されている場合でも、DescribeInstances のリクエストには RegionId が必要です。
  • フィルターは AND 条件で適用されます。必要なフィルターのみ設定してください。

ワークフロー

  1. リージョン、リソース識別子、および希望する操作を確認します。
  2. references/api_overview.md で API グループと正確なオペレーション名を確認します。
  3. Python SDK(推奨)または OpenAPI Explorer で API を呼び出します。
  4. 詳細取得/リスト API で結果を検証します。
  5. 再利用可能なインベントリや要約が必要な場合は、scripts/ を使用し、出力を output/aliyun-ecs-manage/ に保存します。

SDK の優先順位

  1. Python SDK(推奨)
  2. OpenAPI Explorer
  3. その他の SDK(Python が実行できない場合のみ)
Python SDK クイックスタート(インスタンスのリスト表示)

仮想環境の使用を推奨します(PEP 668 によるシステムへのインストール制限を回避できます)。

python3 -m venv .venv
. .venv/bin/activate
python -m pip install alibabacloud_ecs20140526 alibabacloud_tea_openapi alibabacloud_credentials
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_openapi import models as open_api_models


def create_client(region_id: str) -> Ecs20140526Client:
    config = open_api_models.Config(
        # Use env vars or shared config files per AccessKey priority.
        region_id=region_id,
        endpoint=f"ecs.{region_id}.aliyuncs.com",
    )
    return Ecs20140526Client(config)


def list_instances(region_id: str):
    client = create_client(region_id)
    resp = client.describe_instances(ecs_models.DescribeInstancesRequest(
        region_id=region_id,
        page_number=1,
        page_size=50,
    ))
    for inst in resp.body.instances.instance:
        print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status)


if __name__ == "__main__":
    list_instances("cn-hangzhou")
Python SDK スクリプト(インベントリに推奨)
  • すべてのリージョンのインスタンスをリスト表示(TSV/JSON):scripts/list_instances_all_regions.py
  • 1 つのインスタンスのリソース使用状況(CPU/メモリ/ネットワーク)をクエリ:scripts/query_instance_usage.py
  • Cloud Assistant(RunCommand)経由でリモートコマンドを実行:scripts/run_remote_command.py
  • すべてのリージョンのインスタンス仕様を要約:scripts/summary_instance_specs.py
  • リージョン別のインスタンス数を要約(ステータスの内訳は任意):scripts/summary_instances_by_region.py
  • ステータス別のインスタンス数を要約:scripts/summary_instances_by_status.py
  • インスタンスタイプ別のインスタンス数を要約:scripts/summary_instances_by_instance_type.py
  • VPC 別のインスタンス数を要約:scripts/summary_instances_by_vpc.py
  • セキュリティグループ別のインスタンス数を要約:scripts/summary_instances_by_security_group.py
Python SDK:1 つのインスタンスのリソース使用状況をクエリ

依存関係をインストールします(CMS SDK を追加):

python -m pip install alibabacloud_ecs20140526 alibabacloud_cms20190101 alibabacloud_tea_openapi alibabacloud_credentials

例(直近 1 時間、5 分間隔):

python skills/compute/ecs/aliyun-ecs-manage/scripts/query_instance_usage.py \
  --instance-id i-xxxxxxxxxxxxxxxxx \
  --region-id cn-shanghai \
  --hours 1 \
  --period 300 \
  --summary-only \
  --output output/aliyun-ecs-manage/ecs-usage-i-xxxxxxxxxxxxxxxxx-1h.json

推奨されるデフォルトのメトリクス:

  • CPUUtilization
  • memory_usedutilization
  • InternetInRate、InternetOutRate
  • IntranetInRate、IntranetOutRate
Python SDK:1 つの ECS インスタンスでリモートコマンドを実行

例(ps -ef):

python skills/compute/ecs/aliyun-ecs-manage/scripts/run_remote_command.py \
  --instance-id i-xxxxxxxxxxxxxxxxx \
  --region-id cn-shanghai \
  --command 'ps -ef' \
  --output output/aliyun-ecs-manage/runcommand-i-xxxxxxxxxxxxxxxxx-ps-ef.json

動作:

  • RunShellScript を指定して RunCommand を送信します。
  • 最終ステータスになるまで DescribeInvocationResults をポーリングします。
  • base64 の標準出力をデコードし、正規化した JSON の証拠を保存します。
Python SDK:すべてのリージョンのインスタンスをリスト表示
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_openapi import models as open_api_models


def create_client(region_id: str) -> Ecs20140526Client:
    config = open_api_models.Config(
        region_id=region_id,
        endpoint=f"ecs.{region_id}.aliyuncs.com",
    )
    return Ecs20140526Client(config)


def list_regions() -> list[str]:
    client = create_client("cn-hangzhou")
    resp = client.describe_regions(ecs_models.DescribeRegionsRequest())
    return [r.region_id for r in resp.body.regions.region]


def list_instances_all_regions():
    for region_id in list_regions():
        client = create_client(region_id)
        req = ecs_models.DescribeInstancesRequest(
            region_id=region_id,
            page_number=1,
            page_size=100,
        )
        resp = client.describe_instances(req)
        print(f"== {region_id} ({resp.body.total_count}) ==")
        for inst in resp.body.instances.instance:
            print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status)


if __name__ == "__main__":
    list_instances_all_regions()
Python SDK:ページネーションによるインスタンスのリスト表示
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_openapi import models as open_api_models


def create_client(region_id: str) -> Ecs20140526Client:
    config = open_api_models.Config(
        region_id=region_id,
        endpoint=f"ecs.{region_id}.aliyuncs.com",
    )
    return Ecs20140526Client(config)


def list_instances_paged(region_id: str):
    client = create_client(region_id)
    page_number = 1
    page_size = 100
    while True:
        resp = client.describe_instances(ecs_models.DescribeInstancesRequest(
            region_id=region_id,
            page_number=page_number,
            page_size=page_size,
        ))
        for inst in resp.body.instances.instance:
            print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status)
        total = resp.body.total_count
        if page_number * page_size >= total:
            break
        page_number += 1


if __name__ == "__main__":
    list_instances_paged("cn-hangzhou")
Python SDK:インスタンスタイプと料金計算用データをリスト表示
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_openapi import models as open_api_models


def create_client(region_id: str) -> Ecs20140526Client:
    config = open_api_models.Config(
        region_id=region_id,
        endpoint=f"ecs.{region_id}.aliyuncs.com",
    )
    return Ecs20140526Client(config)


def list_types(region_id: str, zone_id: str | None = None, instance_type_family: str | None = None):
    client = create_client(region_id)
    req = ecs_models.DescribeInstanceTypesRequest(
        zone_id=zone_id,
        instance_type_family=instance_type_family,
    )
    resp = client.describe_instance_types(req)
    for t in resp.body.instance_types.instance_type:
        print(t.instance_type_id, t.cpu_core_count, t.memory_size)


if __name__ == "__main__":
    list_types("cn-hangzhou", "cn-hangzhou-k")

一般的な操作の対応関係

  • インスタンスのライフサイクル:RunInstances、CreateInstance、StartInstance(s)、StopInstance(s)、RebootInstance(s)、DeleteInstance(s)
  • インスタンスの詳細:DescribeInstances、DescribeInstanceStatus、DescribeInstanceAttribute
  • 仕様の変更:ModifyInstanceSpec、ModifyPrepayInstanceSpec、DescribeResourcesModification
  • システムディスクの変更:ReplaceSystemDisk、ResetDisk
  • データディスク:CreateDisk、AttachDisk、DetachDisk、ResizeDisk、DescribeDisks
  • スナップショット:CreateSnapshot、CopySnapshot、DescribeSnapshots、DeleteSnapshot
  • イメージ:CreateImage、CopyImage、DescribeImages、DeleteImage、ModifyImageAttribute
  • セキュリティグループ:CreateSecurityGroup、AuthorizeSecurityGroup、RevokeSecurityGroup、DescribeSecurityGroupAttribute
  • キーペア:CreateKeyPair、ImportKeyPair、DescribeKeyPairs、DeleteKeyPairs
  • ENI:CreateNetworkInterface、AttachNetworkInterface、DetachNetworkInterface、DescribeNetworkInterfaces
  • タグ:TagResources、UntagResources、ListTagResources
  • モニタリング/イベント:DescribeInstancesFullStatus、DescribeInstanceHistoryEvents、DescribeInstanceMonitorData

クエリパターン

  • インスタンスの一覧表示:DescribeInstances(VpcId、VSwitchId、ZoneId、SecurityGroupId、InstanceIds などのフィルターに対応)
  • インスタンス数の取得:PageSize=1 を指定して DescribeInstances を実行し、TotalCount を読み取ります
  • リージョンの検出:DescribeRegions を実行し、その後、すべてのリージョンを順に処理してインベントリを取得します

Cloud Assistant(RunCommand)のヒント

  • インスタンスは Running 状態である必要があります。
  • Cloud Assistant エージェントがインストール済みで、オンラインであることを確認してください。
  • Linux ではシェル、Windows では PowerShell を使用します。
  • DescribeInvocations と DescribeInvocationResults を使って結果をポーリングします。

references/command-assistant.md を参照してください。

AccessKey の優先順位(必ず従い、README と整合させてください)

  1. 環境変数:ALIBABACLOUD_ACCESS_KEY_ID / ALIBABACLOUD_ACCESS_KEY_SECRET / ALIBABACLOUD_REGION_ID リージョンのポリシー:ALIBABACLOUD_REGION_ID は任意のデフォルト値です。設定されていない場合は、タスクに最も適したリージョンを選択してください。不明な場合はユーザーに確認してください。
  2. 共有設定ファイル:~/.alibabacloud/credentials(リージョンは引き続き環境変数から取得)
認証設定(README に準拠)

環境変数:

export ALIBABACLOUD_ACCESS_KEY_ID="your-ak"
export ALIBABACLOUD_ACCESS_KEY_SECRET="your-sk"
export ALIBABACLOUD_REGION_ID="cn-hangzhou"

Alibaba Cloud SDK でも次の方法がサポートされています:

export ALIBABACLOUD_ACCESS_KEY_ID="your-ak"
export ALIBABACLOUD_ACCESS_KEY_SECRET="your-sk"

共有設定ファイル:

~/.alibabacloud/credentials

[default]
type = access_key
access_key_id = your-ak
access_key_secret = your-sk

API の検出

  • プロダクトコード:Ecs
  • デフォルトの API バージョン:2014-05-26
  • OpenAPI メタデータエンドポイントを使用して API を一覧表示し、スキーマを取得してください(参考資料を参照)。

出力ポリシー

レスポンスまたは生成された成果物を保存する必要がある場合は、次の場所に保存してください: output/aliyun-ecs-manage/

リソース使用量のクエリ証跡の例: output/aliyun-ecs-manage/ecs-usage-<instance-id>-<window>.json

リモートコマンドの証跡の例: output/aliyun-ecs-manage/runcommand-<instance-id>-<name>.json

参考資料

  • API の概要:references/api_overview.md
  • エンドポイント:references/endpoints.md
  • Cloud Assistant:references/command-assistant.md
  • DescribeInstances:references/describe-instances.md
  • インスタンス:references/instances.md
  • ディスク:references/disks.md
  • スナップショット:references/snapshots.md
  • イメージ:references/images.md
  • セキュリティグループ:references/security-groups.md
  • ネットワークインターフェイス:references/network-interfaces.md
  • キーペア:references/keypairs.md
  • タグ:references/tags.md
  • モニタリング/イベント:references/monitoring-events.md
  • ソース:references/sources.md

コメント