mcpField
A
alicloud-compute-ecs

alicloud-compute-ecs

github.com/cinience云与 DevOps396280 次安装11 周前更新
代码仓库

关于 alicloud-compute-ecs

通过 Alibaba Cloud OpenAPI 管理 Elastic Compute Service(ECS)的技能,提供基于 Python SDK 的流程和脚本,用于资源清点、用量查询及远程命令。适合跨地域管理和检查 ECS 实例及相关资源。

主要功能

  1. 01通过 OpenAPI 管理 ECS 资源
  2. 02跨地域列出实例
  3. 03查询实例 CPU、内存和网络用量
  4. 04使用 Cloud Assistant 运行远程命令
  5. 05按资源属性汇总实例

适用场景

  1. 01清点多个地域的 ECS 实例
  2. 02查看指定实例的资源用量
  3. 03在实例上运行并记录命令
  4. 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.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

详细介绍

类别:服务

弹性计算服务(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 关系;仅设置所需的筛选条件。

工作流

  1. 确认地域、资源标识符和所需操作。
  2. 在 references/api_overview.md 中查找 API 组和准确的操作名称。
  3. 使用 Python SDK(优先)或 OpenAPI Explorer 调用 API。
  4. 使用描述/列表 API 验证结果。
  5. 如果需要可重复执行的资源清单或汇总,请使用 scripts/,并将输出写入 output/alicloud-compute-ecs/ 下。

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
  • 查询单个实例的资源使用情况(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

建议使用的默认指标:

  • CPUUtilization
  • memory_usedutilization
  • InternetInRate、InternetOutRate
  • IntranetInRate、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 保持一致)

  1. 环境变量:ALICLOUD_ACCESS_KEY_ID / ALICLOUD_ACCESS_KEY_SECRET / ALICLOUD_REGION_ID 地域策略:ALICLOUD_REGION_ID 是可选的默认值。如果未设置,请为任务选择最合理的地域;如果不明确,请询问用户。
  2. 共享配置文件:~/.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

评论

支持 Markdown