alicloud-compute-ecs について
Alibaba Cloud OpenAPI を通じて Elastic Compute Service(ECS)を操作するスキルです。Python SDK の手順とスクリプトで、インベントリ作成、使用量の照会、リモートコマンド実行を行い、複数リージョンの ECS リソース管理に役立ちます。
主な機能
- 01OpenAPI による ECS リソース管理
- 02複数リージョンのインスタンス一覧
- 03CPU・メモリ・ネットワーク使用量の照会
- 04Cloud Assistant によるリモートコマンド実行
- 05属性別のインスタンス集計
活用シーン
- 01複数リージョンの ECS インスタンスの棚卸し
- 02特定インスタンスの使用量確認
- 03インスタンス上でのコマンド実行と記録
- 04リージョン別またはステータス別の集計
MCP 対応
入力には MCP 連携や MCP インターフェースについての記載がありません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cinience/ alicloud-skills --skill alicloud-compute-ecsインストール後、Claude Code で/alicloud-compute-ecsを入力して読み込まれたか確認します。
同梱ファイル
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/alicloud-compute-ecs
python -m py_compile skills/compute/ecs/alicloud-compute-ecs/scripts/list_instances_all_regions.py
python -m py_compile skills/compute/ecs/alicloud-compute-ecs/scripts/query_instance_usage.py
python -m py_compile skills/compute/ecs/alicloud-compute-ecs/scripts/run_remote_command.py
echo "py_compile_ok" > output/alicloud-compute-ecs/validate.txt
合格基準:コマンドが終了コード 0 で終了し、output/alicloud-compute-ecs/validate.txt が生成されること。
出力とエビデンス
- list/summarize の出力は
output/alicloud-compute-ecs/に保存します。 - 各エビデンスファイルにコマンドの引数とリージョンの範囲を記録します。
ECS リソースの管理には、Alibaba Cloud OpenAPI(RPC)と公式 SDK、または OpenAPI Explorer を使用します。 すべての例と実行には、Python SDK の使用を推奨します。
前提条件
- AccessKey を用意します(最小限の権限を持つ RAM ユーザー/ロール)。
- 適切なリージョンとエンドポイント(パブリック/VPC)を選択します。
- ECS OpenAPI は RPC スタイルです。手動での署名を避けるため、SDK または OpenAPI Explorer の使用を推奨します。
API の動作に関する注意事項(ECS ドキュメントより)
- ほとんどの list/describe 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 を呼び出します。
- describe/list API で結果を確認します。
- 繰り返し利用できるインベントリーや概要が必要な場合は、
scripts/を使用し、出力をoutput/alicloud-compute-ecs/に保存します。
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/alicloud-compute-ecs/scripts/query_instance_usage.py \
--instance-id i-xxxxxxxxxxxxxxxxx \
--region-id cn-shanghai \
--hours 1 \
--period 300 \
--summary-only \
--output output/alicloud-compute-ecs/ecs-usage-i-xxxxxxxxxxxxxxxxx-1h.json
推奨されるデフォルトのメトリクス:
CPUUtilizationmemory_usedutilizationInternetInRate、InternetOutRateIntranetInRate、IntranetOutRate
Python SDK:1 つの ECS インスタンスでリモートコマンドを実行
例(ps -ef):
python skills/compute/ecs/alicloud-compute-ecs/scripts/run_remote_command.py \
--instance-id i-xxxxxxxxxxxxxxxxx \
--region-id cn-shanghai \
--command 'ps -ef' \
--output output/alicloud-compute-ecs/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 と整合させてください)
- 環境変数:
ALICLOUD_ACCESS_KEY_ID/ALICLOUD_ACCESS_KEY_SECRET/ALICLOUD_REGION_IDリージョンのポリシー:ALICLOUD_REGION_IDは省略可能なデフォルト値です。設定されていない場合は、タスクに最も適したリージョンを選択してください。不明な場合はユーザーに確認してください。 - 共有設定ファイル:
~/.alibabacloud/credentials(リージョンは引き続き環境変数から取得します)
認証の設定(README に準拠)
環境変数:
export ALICLOUD_ACCESS_KEY_ID="your-ak"
export ALICLOUD_ACCESS_KEY_SECRET="your-sk"
export ALICLOUD_REGION_ID="cn-hangzhou"
Alibaba Cloud SDK でも次の設定がサポートされています:
export ALIBABA_CLOUD_ACCESS_KEY_ID="your-ak"
export ALIBABA_CLOUD_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 の一覧表示とスキーマの取得を行います(references を参照)。
出力ポリシー
レスポンスや生成されたアーティファクトを保存する必要がある場合は、次の場所に保存してください:
output/alicloud-compute-ecs/
リソース使用状況のクエリ証拠の例:
output/alicloud-compute-ecs/ecs-usage-<instance-id>-<window>.json
リモートコマンドの証拠の例:
output/alicloud-compute-ecs/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