aliyun-ecs-manage について
aliyun-ecs-manage は、Alibaba Cloud ECS リソースを管理するためのスキルです。Python SDK のスクリプトで複数リージョンのインベントリ、使用状況の照会、リモートコマンドを扱い、幅広い ECS API 操作も案内します。
主な機能
- 01複数リージョンのインスタンス一覧
- 02CPU・メモリ・ネットワーク使用状況の照会
- 03Cloud Assistant によるコマンド実行
- 04リージョンや状態別のインスタンス集計
- 05ディスク・セキュリティグループ・スナップショット管理
活用シーン
- 01複数リージョンの ECS インスタンスを棚卸し
- 02単一インスタンスのリソース使用状況を確認
- 03稼働中のインスタンスでリモートシェルコマンドを実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cinience/ alicloud-skills --skill aliyun-ecs-manageインストール後、Claude Code で/aliyun-ecs-manageを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/api_overview.mdcommand-assistant.mddescribe-instances.mddisks.mdendpoints.mdimages.mdinstances.mdkeypairs.mdmonitoring-events.mdnetwork-interfaces.mdsecurity-groups.mdsnapshots.mdsources.mdtags.mdscripts/list_instances_all_regions.pyquery_instance_usage.pyrun_remote_command.pysummary_instance_specs.pysummary_instances_by_instance_type.pysummary_instances_by_region.pysummary_instances_by_security_group.pysummary_instances_by_status.pysummary_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 条件で適用されます。必要なフィルターのみ設定してください。
ワークフロー
- リージョン、リソース識別子、および希望する操作を確認します。
references/api_overview.mdで API グループと正確なオペレーション名を確認します。- Python SDK(推奨)または OpenAPI Explorer で API を呼び出します。
- 詳細取得/リスト API で結果を検証します。
- 再利用可能なインベントリや要約が必要な場合は、
scripts/を使用し、出力をoutput/aliyun-ecs-manage/に保存します。
SDK の優先順位
- Python SDK(推奨)
- OpenAPI Explorer
- その他の 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
推奨されるデフォルトのメトリクス:
CPUUtilizationmemory_usedutilizationInternetInRate、InternetOutRateIntranetInRate、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 と整合させてください)
- 環境変数:
ALIBABACLOUD_ACCESS_KEY_ID/ALIBABACLOUD_ACCESS_KEY_SECRET/ALIBABACLOUD_REGION_IDリージョンのポリシー:ALIBABACLOUD_REGION_IDは任意のデフォルト値です。設定されていない場合は、タスクに最も適したリージョンを選択してください。不明な場合はユーザーに確認してください。 - 共有設定ファイル:
~/.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