Category: service
Elastic Compute Service (ECS)
Validation
CODEBLOCK0
Pass criteria: command exits 0 and output/aliyun-ecs-manage/validate.txt is generated.
Output And Evidence
- - Save list/summarize outputs under
output/aliyun-ecs-manage/. - Keep command arguments and region scope in each evidence file.
Use Alibaba Cloud OpenAPI (RPC) with official SDKs or OpenAPI Explorer to manage ECS resources.
Prefer the Python SDK for all examples and execution.
Prerequisites
- - Prepare AccessKey (RAM user/role with least privilege).
- Choose the correct region and endpoint (public/VPC).
- ECS OpenAPI is RPC style; prefer SDK or OpenAPI Explorer to avoid manual signing.
API behavior notes (from ECS docs)
- - Most list/describe APIs support pagination via
PageNumber + PageSize or NextToken + MaxResults. - INLINECODE6 returns an empty list if the RAM user/role lacks permissions; use
DryRun to validate permissions. - For
DescribeInstances, NextToken + MaxResults is the recommended paged query pattern; use the returned NextToken to fetch subsequent pages. - INLINECODE12 requires
RegionId in the request even if the client has a region set. - Filters are ANDed; set only the filters you need.
Workflow
1) Confirm region, resource identifiers, and desired action.
2) Find API group and exact operation name in references/api_overview.md.
3) Call API with Python SDK (preferred) or OpenAPI Explorer.
4) Verify results with describe/list APIs.
5) If you need repeatable inventory or summaries, use scripts/ and write outputs under output/aliyun-ecs-manage/.
SDK priority
1) Python SDK (preferred)
2) OpenAPI Explorer
3) Other SDKs (only if Python is not feasible)
Python SDK quickstart (list instances)
Virtual environment is recommended (avoid PEP 668 system install restrictions).
CODEBLOCK1
CODEBLOCK2
Python SDK scripts (recommended for inventory)
- - List all instances across regions (TSV/JSON): INLINECODE17
- Query resource usage (CPU/Memory/Network) for one instance: INLINECODE18
- Run remote commands via Cloud Assistant (RunCommand): INLINECODE19
- Summarize instance specs across regions: INLINECODE20
- Summarize instance counts by region (optional status breakdown): INLINECODE21
- Summarize instance counts by status: INLINECODE22
- Summarize instance counts by instance type: INLINECODE23
- Summarize instance counts by VPC: INLINECODE24
- Summarize instance counts by security group: INLINECODE25
Python SDK: query one instance resource usage
Install dependencies (add CMS SDK):
CODEBLOCK3
Example (last 1 hour, 5-minute period):
CODEBLOCK4
Recommended default metrics:
- - INLINECODE26
- INLINECODE27
- INLINECODE28 , INLINECODE29
- INLINECODE30 , INLINECODE31
Python SDK: run remote command on one ECS instance
Example (ps -ef):
CODEBLOCK5
Behavior:
- - Submit
RunCommand with RunShellScript. - Poll
DescribeInvocationResults until final status. - Decode base64 stdout and save normalized JSON evidence.
Python SDK: list instances for all regions
CODEBLOCK6
Python SDK: paginated instance listing
CODEBLOCK7
Python SDK: list instance types and pricing inputs
CODEBLOCK8
Common operation mapping
- - Instance lifecycle:
RunInstances, CreateInstance, StartInstance(s), StopInstance(s), RebootInstance(s), INLINECODE41 - Instance details:
DescribeInstances, DescribeInstanceStatus, INLINECODE44 - Spec changes:
ModifyInstanceSpec, ModifyPrepayInstanceSpec, INLINECODE47 - System disk changes:
ReplaceSystemDisk, INLINECODE49 - Data disks:
CreateDisk, AttachDisk, DetachDisk, ResizeDisk, INLINECODE54 - Snapshots:
CreateSnapshot, CopySnapshot, DescribeSnapshots, INLINECODE58 - Images:
CreateImage, CopyImage, DescribeImages, DeleteImage, INLINECODE63 - Security groups:
CreateSecurityGroup, AuthorizeSecurityGroup, RevokeSecurityGroup, INLINECODE67 - Key pairs:
CreateKeyPair, ImportKeyPair, DescribeKeyPairs, INLINECODE71 - ENI:
CreateNetworkInterface, AttachNetworkInterface, DetachNetworkInterface, INLINECODE75 - Tags:
TagResources, UntagResources, INLINECODE78 - Monitoring/events:
DescribeInstancesFullStatus, DescribeInstanceHistoryEvents, INLINECODE81
Query patterns
- - List instances:
DescribeInstances (supports filters such as VpcId, VSwitchId, ZoneId, SecurityGroupId, InstanceIds) - Count instances:
DescribeInstances with PageSize=1 and read INLINECODE90 - Region discovery:
DescribeRegions then loop all regions for inventory
Cloud Assistant (RunCommand) tips
- - Instances must be in
Running state. - Ensure the Cloud Assistant agent is installed and online.
- Use shell for Linux, PowerShell for Windows.
- Poll results via
DescribeInvocations and DescribeInvocationResults.
See references/command-assistant.md.
AccessKey priority (must follow, align with README)
1) Environment variables: ALICLOUD_ACCESS_KEY_ID / ALICLOUD_ACCESS_KEY_SECRET / ALICLOUD_REGION_ID
Region policy: ALICLOUD_REGION_ID is an optional default. If unset, decide the most reasonable region for the task; if unclear, ask the user.
2) Shared config file: ~/.alibabacloud/credentials (region still from env)
Auth setup (README-aligned)
Environment variables:
CODEBLOCK9
Also supported by the Alibaba Cloud SDKs:
CODEBLOCK10
Shared config file:
INLINECODE101
CODEBLOCK11
API discovery
- - Product code: INLINECODE102
- Default API version: INLINECODE103
- Use OpenAPI metadata endpoints to list APIs and get schemas (see references).
Output policy
If you need to save responses or generated artifacts, write them under:
INLINECODE104
Resource usage query evidence example:
INLINECODE105
Remote command evidence example:
INLINECODE106
References
- - API overview: INLINECODE107
- Endpoints: INLINECODE108
- Cloud Assistant: INLINECODE109
- DescribeInstances: INLINECODE110
- Instances: INLINECODE111
- Disks: INLINECODE112
- Snapshots: INLINECODE113
- Images: INLINECODE114
- Security groups: INLINECODE115
- Network interfaces: INLINECODE116
- Key pairs: INLINECODE117
- Tags: INLINECODE118
- Monitoring/events: INLINECODE119
- Sources: INLINECODE120
技能名称: aliyun-ecs-manage
详细描述:
类别: 服务
弹性计算服务 (ECS)
验证
bash
mkdir -p output/aliyun-ecs-manage
python -m pycompile skills/compute/ecs/aliyun-ecs-manage/scripts/listinstancesallregions.py
python -m pycompile skills/compute/ecs/aliyun-ecs-manage/scripts/queryinstance_usage.py
python -m pycompile skills/compute/ecs/aliyun-ecs-manage/scripts/runremote_command.py
echo pycompileok > 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) 使用describe/list API验证结果。
5) 如果需要可重复的清单或汇总,使用 scripts/ 并将输出写入 output/aliyun-ecs-manage/ 目录下。
SDK优先级
1) Python SDK(首选)
2) OpenAPI Explorer
3) 其他SDK(仅当Python不可行时)
Python SDK快速入门(列出实例)
建议使用虚拟环境(避免PEP 668系统安装限制)。
bash
python3 -m venv .venv
. .venv/bin/activate
python -m pip install alibabacloudecs20140526 alibabacloudteaopenapi alibabacloudcredentials
python
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloudecs20140526 import models as ecsmodels
from alibabacloudteaopenapi import models as openapimodels
def createclient(regionid: str) -> Ecs20140526Client:
config = openapimodels.Config(
# 根据AccessKey优先级使用环境变量或共享配置文件。
regionid=regionid,
endpoint=fecs.{region_id}.aliyuncs.com,
)
return Ecs20140526Client(config)
def listinstances(regionid: str):
client = createclient(regionid)
resp = client.describeinstances(ecsmodels.DescribeInstancesRequest(
regionid=regionid,
page_number=1,
page_size=50,
))
for inst in resp.body.instances.instance:
print(inst.instanceid, inst.instancename, inst.instance_type, inst.status)
if name == main:
list_instances(cn-hangzhou)
Python SDK脚本(推荐用于清单)
- - 列出所有区域的实例(TSV/JSON):scripts/listinstancesallregions.py
- 查询单个实例的资源使用情况(CPU/内存/网络):scripts/queryinstanceusage.py
- 通过云助手运行远程命令(RunCommand):scripts/runremotecommand.py
- 汇总各区域的实例规格:scripts/summaryinstancespecs.py
- 按区域汇总实例数量(可选状态细分):scripts/summaryinstancesbyregion.py
- 按状态汇总实例数量:scripts/summaryinstancesbystatus.py
- 按实例类型汇总实例数量:scripts/summaryinstancesbyinstancetype.py
- 按VPC汇总实例数量:scripts/summaryinstancesbyvpc.py
- 按安全组汇总实例数量:scripts/summaryinstancesbysecuritygroup.py
Python SDK:查询单个实例资源使用情况
安装依赖(添加CMS SDK):
bash
python -m pip install alibabacloudecs20140526 alibabacloudcms20190101 alibabacloudteaopenapi alibabacloud_credentials
示例(最近1小时,5分钟周期):
bash
python skills/compute/ecs/aliyun-ecs-manage/scripts/queryinstanceusage.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):
bash
python skills/compute/ecs/aliyun-ecs-manage/scripts/runremotecommand.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:列出所有区域的实例
python
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloudecs20140526 import models as ecsmodels
from alibabacloudteaopenapi import models as openapimodels
def createclient(regionid: str) -> Ecs20140526Client:
config = openapimodels.Config(
regionid=regionid,
endpoint=fecs.{region_id}.aliyuncs.com,
)
return Ecs20140526Client(config)
def list_regions() -> list[str]:
client = create_client(cn-hangzhou)
resp = client.describeregions(ecsmodels.DescribeRegionsRequest())
return [r.region_id for r in resp.body.regions.region]
def listinstancesall_regions():
for regionid in listregions():
client = createclient(regionid)
req = ecs_models.DescribeInstancesRequest(
regionid=regionid,
page_number=1,
page_size=100,
)
resp = client.describe_instances(req)
print(f== {regionid} ({resp.body.totalcount}) ==)
for inst in resp.body.instances.instance:
print(inst.instanceid, inst.instancename, inst.instance_type, inst.status)
if name == main:
listinstancesall_regions()
Python SDK:分页列出实例
python
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloudecs20140526 import models as ecsmodels
from alibabacloudteaopenapi import models as openapimodels
def createclient(regionid: str) -> Ecs20140526Client:
config = openapimodels.Config(
regionid=regionid,
endpoint=fecs.{region_id}.aliyuncs.com,
)
return Ecs20140526Client(config)
def listinstancespaged(region_id: str):
client = createclient(regionid)
page_number = 1
page_size = 100
while True:
resp = client.describe_