关于 alicloud-compute-ecs
通过 Alibaba Cloud OpenAPI 管理 Elastic Compute Service(ECS)的技能,提供基于 Python SDK 的流程和脚本,用于资源清点、用量查询及远程命令。适合跨地域管理和检查 ECS 实例及相关资源。
主要功能
- 01通过 OpenAPI 管理 ECS 资源
- 02跨地域列出实例
- 03查询实例 CPU、内存和网络用量
- 04使用 Cloud 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详细介绍
类别:服务
弹性计算服务(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。
输出与证据
- 将列表/汇总输出保存在
output/alicloud-compute-ecs/下。 - 在每个证据文件中保留命令参数和地域范围。
使用阿里云 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/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 - 查询单个实例的资源使用情况(CPU/内存/网络):
scripts/query_instance_usage.py - 通过云助手运行远程命令(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:查询单个实例的资源使用情况
安装依赖项(添加 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:在单个 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等筛选条件) - 统计实例数量:调用
DescribeInstances并设置PageSize=1,然后读取TotalCount - 发现地域:调用
DescribeRegions,然后遍历所有地域进行资源清点
云助手(RunCommand)提示
- 实例必须处于
Running状态。 - 确保云助手 Agent 已安装并处于在线状态。
- Linux 使用 shell,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 并获取架构(请参阅参考资料)。
输出策略
如果需要保存响应或生成的文件,请将其写入:
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 - 云助手:
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