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. 02查询 CPU、内存和网络用量
  3. 03通过 Cloud Assistant 运行命令
  4. 04按地域、状态等汇总实例
  5. 05管理磁盘、安全组和快照

适用场景

  1. 01盘点多个地域的 ECS 实例
  2. 02查看单个实例的资源使用情况
  3. 03在运行中的实例执行远程 Shell 命令

安装

复制下面的命令,在终端中运行。

$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

详细介绍

Category: 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/ 下。
  • 在每个证据文件中保留命令参数和地域范围。

使用阿里云 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
  • 查询单个实例的资源使用情况(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/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:在单个 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,然后遍历所有地域以盘点资源

云助手(RunCommand)提示

  • 实例必须处于 Running 状态。
  • 确保已安装并在线运行云助手 Agent。
  • Linux 使用 shell,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
  • 云助手: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