$npx -y skills add cinience/alicloud-skills --skill aliyun-ecs-manageUse when managing Alibaba Cloud Elastic Compute Service (ECS) via OpenAPI/SDK, including listing or creating instances, starting/stopping/rebooting, managing disks/snapshots/images/security groups/key pairs/ENIs, querying status, and troubleshooting workflows for this product.
| 1 | Category: service |
| 2 | |
| 3 | # Elastic Compute Service (ECS) |
| 4 | |
| 5 | ## Validation |
| 6 | |
| 7 | ```bash |
| 8 | mkdir -p output/aliyun-ecs-manage |
| 9 | python -m py_compile skills/compute/ecs/aliyun-ecs-manage/scripts/list_instances_all_regions.py |
| 10 | python -m py_compile skills/compute/ecs/aliyun-ecs-manage/scripts/query_instance_usage.py |
| 11 | python -m py_compile skills/compute/ecs/aliyun-ecs-manage/scripts/run_remote_command.py |
| 12 | echo "py_compile_ok" > output/aliyun-ecs-manage/validate.txt |
| 13 | ``` |
| 14 | |
| 15 | Pass criteria: command exits 0 and `output/aliyun-ecs-manage/validate.txt` is generated. |
| 16 | |
| 17 | ## Output And Evidence |
| 18 | |
| 19 | - Save list/summarize outputs under `output/aliyun-ecs-manage/`. |
| 20 | - Keep command arguments and region scope in each evidence file. |
| 21 | |
| 22 | Use Alibaba Cloud OpenAPI (RPC) with official SDKs or OpenAPI Explorer to manage ECS resources. |
| 23 | Prefer the Python SDK for all examples and execution. |
| 24 | |
| 25 | ## Prerequisites |
| 26 | |
| 27 | - Prepare AccessKey (RAM user/role with least privilege). |
| 28 | - Choose the correct region and endpoint (public/VPC). |
| 29 | - ECS OpenAPI is RPC style; prefer SDK or OpenAPI Explorer to avoid manual signing. |
| 30 | |
| 31 | ## API behavior notes (from ECS docs) |
| 32 | |
| 33 | - Most list/describe APIs support pagination via `PageNumber` + `PageSize` or `NextToken` + `MaxResults`. |
| 34 | - `DescribeInstances` returns an empty list if the RAM user/role lacks permissions; use `DryRun` to validate permissions. |
| 35 | - For `DescribeInstances`, `NextToken` + `MaxResults` is the recommended paged query pattern; use the returned `NextToken` to fetch subsequent pages. |
| 36 | - `DescribeInstances` requires `RegionId` in the request even if the client has a region set. |
| 37 | - Filters are ANDed; set only the filters you need. |
| 38 | |
| 39 | ## Workflow |
| 40 | |
| 41 | 1) Confirm region, resource identifiers, and desired action. |
| 42 | 2) Find API group and exact operation name in `references/api_overview.md`. |
| 43 | 3) Call API with Python SDK (preferred) or OpenAPI Explorer. |
| 44 | 4) Verify results with describe/list APIs. |
| 45 | 5) If you need repeatable inventory or summaries, use `scripts/` and write outputs under `output/aliyun-ecs-manage/`. |
| 46 | |
| 47 | ## SDK priority |
| 48 | |
| 49 | 1) Python SDK (preferred) |
| 50 | 2) OpenAPI Explorer |
| 51 | 3) Other SDKs (only if Python is not feasible) |
| 52 | |
| 53 | ### Python SDK quickstart (list instances) |
| 54 | |
| 55 | Virtual environment is recommended (avoid PEP 668 system install restrictions). |
| 56 | |
| 57 | ```bash |
| 58 | python3 -m venv .venv |
| 59 | . .venv/bin/activate |
| 60 | python -m pip install alibabacloud_ecs20140526 alibabacloud_tea_openapi alibabacloud_credentials |
| 61 | ``` |
| 62 | |
| 63 | ```python |
| 64 | from alibabacloud_ecs20140526.client import Client as Ecs20140526Client |
| 65 | from alibabacloud_ecs20140526 import models as ecs_models |
| 66 | from alibabacloud_tea_openapi import models as open_api_models |
| 67 | |
| 68 | |
| 69 | def create_client(region_id: str) -> Ecs20140526Client: |
| 70 | config = open_api_models.Config( |
| 71 | # Use env vars or shared config files per AccessKey priority. |
| 72 | region_id=region_id, |
| 73 | endpoint=f"ecs.{region_id}.aliyuncs.com", |
| 74 | ) |
| 75 | return Ecs20140526Client(config) |
| 76 | |
| 77 | |
| 78 | def list_instances(region_id: str): |
| 79 | client = create_client(region_id) |
| 80 | resp = client.describe_instances(ecs_models.DescribeInstancesRequest( |
| 81 | region_id=region_id, |
| 82 | page_number=1, |
| 83 | page_size=50, |
| 84 | )) |
| 85 | for inst in resp.body.instances.instance: |
| 86 | print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status) |
| 87 | |
| 88 | |
| 89 | if __name__ == "__main__": |
| 90 | list_instances("cn-hangzhou") |
| 91 | ``` |
| 92 | |
| 93 | ### Python SDK scripts (recommended for inventory) |
| 94 | |
| 95 | - List all instances across regions (TSV/JSON): `scripts/list_instances_all_regions.py` |
| 96 | - Query resource usage (CPU/Memory/Network) for one instance: `scripts/query_instance_usage.py` |
| 97 | - Run remote commands via Cloud Assistant (RunCommand): `scripts/run_remote_command.py` |
| 98 | - Summarize instance specs across regions: `scripts/summary_instance_specs.py` |
| 99 | - Summarize instance counts by region (optional status breakdown): `scripts/summary_instances_by_region.py` |
| 100 | - Summarize instance counts by status: `scripts/summary_instances_by_status.py` |
| 101 | - Summarize instance counts by instance type: `scripts/summary_instances_by_instance_type.py` |
| 102 | - Summarize instance counts by VPC: `scripts/summary_instances_by_vpc.py` |
| 103 | - Summarize instance counts by security group: `scripts/summary_instances_by_security_group.py` |
| 104 | |
| 105 | ### Python SDK: query one instance resource usage |
| 106 | |
| 107 | Install dependencies (add CMS SDK): |
| 108 | |
| 109 | ```bash |
| 110 | python -m pip install alibabacloud_ecs20140526 alibabacloud_cms20190101 alibabacloud_tea_openapi alibabacloud_credentials |
| 111 | ``` |
| 112 | |
| 113 | Example (last 1 hour, 5-minute period): |
| 114 | |
| 115 | ```bash |
| 116 | python skills/compute/ecs/aliyun-ecs-manage/scripts/query_instance_usage.py \ |
| 117 | --instance-id i-xxxxxxxxxxxxxxxxx \ |
| 118 | --region-id cn-shanghai \ |
| 119 | --hours 1 \ |
| 120 | --period 300 \ |
| 121 | --summary-only \ |
| 122 | --output output/aliyun-ecs-man |