Category: service
Elastic Compute Service (ECS)
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.
DescribeInstances 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.
DescribeInstances requires RegionId in the request even if the client has a region set.
- Filters are ANDed; set only the filters you need.
Workflow
- Confirm region, resource identifiers, and desired action.
- Find API group and exact operation name in
references/api_overview.md.
- Call API with Python SDK (preferred) or OpenAPI Explorer.
- Verify results with describe/list APIs.
- If you need repeatable inventory or summaries, use
scripts/ and write outputs under output/alicloud-compute-ecs/.
SDK priority
- Python SDK (preferred)
- OpenAPI Explorer
- Other SDKs (only if Python is not feasible)
Python SDK quickstart (list instances)
推荐使用虚拟环境(避免 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 scripts (recommended for inventory)
- List all instances across regions (TSV/JSON):
scripts/list_instances_all_regions.py
- Summarize instance specs across regions:
scripts/summary_instance_specs.py
- Summarize instance counts by region (optional status breakdown):
scripts/summary_instances_by_region.py
- Summarize instance counts by status:
scripts/summary_instances_by_status.py
- Summarize instance counts by instance type:
scripts/summary_instances_by_instance_type.py
- Summarize instance counts by VPC:
scripts/summary_instances_by_vpc.py
- Summarize instance counts by security group:
scripts/summary_instances_by_security_group.py
Python SDK: list instances for all regions
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: paginated instance listing
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: list instance types and pricing inputs
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")
Common operation mapping
- Instance lifecycle:
RunInstances, CreateInstance, StartInstance(s), StopInstance(s), RebootInstance(s), DeleteInstance(s)
- Instance details:
DescribeInstances, DescribeInstanceStatus, DescribeInstanceAttribute
- Spec changes:
ModifyInstanceSpec, ModifyPrepayInstanceSpec, DescribeResourcesModification
- System disk changes:
ReplaceSystemDisk, ResetDisk
- Data disks:
CreateDisk, AttachDisk, DetachDisk, ResizeDisk, DescribeDisks
- Snapshots:
CreateSnapshot, CopySnapshot, DescribeSnapshots, DeleteSnapshot
- Images:
CreateImage, CopyImage, DescribeImages, DeleteImage, ModifyImageAttribute
- Security groups:
CreateSecurityGroup, AuthorizeSecurityGroup, RevokeSecurityGroup, DescribeSecurityGroupAttribute
- Key pairs:
CreateKeyPair, ImportKeyPair, DescribeKeyPairs, DeleteKeyPairs
- ENI:
CreateNetworkInterface, AttachNetworkInterface, DetachNetworkInterface, DescribeNetworkInterfaces
- Tags:
TagResources, UntagResources, ListTagResources
- Monitoring/events:
DescribeInstancesFullStatus, DescribeInstanceHistoryEvents, DescribeInstanceMonitorData
Query patterns
- List instances:
DescribeInstances (supports filters such as VpcId, VSwitchId, ZoneId, SecurityGroupId, InstanceIds)
- Count instances:
DescribeInstances with PageSize=1 and read TotalCount
- 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)
- 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.
- Shared config file:
~/.alibabacloud/credentials (region still from env)
Auth setup (README-aligned)
Environment variables:
export ALICLOUD_ACCESS_KEY_ID="your-ak"
export ALICLOUD_ACCESS_KEY_SECRET="your-sk"
export ALICLOUD_REGION_ID="cn-hangzhou"
Also supported by the Alibaba Cloud SDKs:
export ALIBABA_CLOUD_ACCESS_KEY_ID="your-ak"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your-sk"
Shared config file:
~/.alibabacloud/credentials
[default]
type = access_key
access_key_id = your-ak
access_key_secret = your-sk
API discovery
- Product code:
Ecs
- Default API version:
2014-05-26
- 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:
output/alicloud-compute-ecs/
References
- API overview:
references/api_overview.md
- Endpoints:
references/endpoints.md
- Cloud Assistant:
references/command-assistant.md
- DescribeInstances:
references/describe-instances.md
- Instances:
references/instances.md
- Disks:
references/disks.md
- Snapshots:
references/snapshots.md
- Images:
references/images.md
- Security groups:
references/security-groups.md
- Network interfaces:
references/network-interfaces.md
- Key pairs:
references/keypairs.md
- Tags:
references/tags.md
- Monitoring/events:
references/monitoring-events.md
- Sources:
references/sources.md
1---2name: alicloud-compute-ecs3description: Manage Alibaba Cloud Elastic Compute Service (ECS) via OpenAPI/SDK. Use for listing or creating instances, starting/stopping/rebooting, managing disks/snapshots/images/security groups/key pairs/ENIs, querying status, and troubleshooting workflows for this product.4---5
6Category: service
7
8# Elastic Compute Service (ECS)
9
10Use Alibaba Cloud OpenAPI (RPC) with official SDKs or OpenAPI Explorer to manage ECS resources.
11Prefer the Python SDK for all examples and execution.
12
13## Prerequisites
14
15- Prepare AccessKey (RAM user/role with least privilege).
16- Choose the correct region and endpoint (public/VPC).
17- ECS OpenAPI is RPC style; prefer SDK or OpenAPI Explorer to avoid manual signing.
18
19## API behavior notes (from ECS docs)
20
21- Most list/describe APIs support pagination via `PageNumber` + `PageSize` or `NextToken` + `MaxResults`.
22- `DescribeInstances` returns an empty list if the RAM user/role lacks permissions; use `DryRun` to validate permissions.
23- For `DescribeInstances`, `NextToken` + `MaxResults` is the recommended paged query pattern; use the returned `NextToken` to fetch subsequent pages.
24- `DescribeInstances` requires `RegionId` in the request even if the client has a region set.
25- Filters are ANDed; set only the filters you need.
26
27## Workflow
28
291) Confirm region, resource identifiers, and desired action.
302) Find API group and exact operation name in `references/api_overview.md`.
313) Call API with Python SDK (preferred) or OpenAPI Explorer.
324) Verify results with describe/list APIs.
335) If you need repeatable inventory or summaries, use `scripts/` and write outputs under `output/alicloud-compute-ecs/`.
34
35## SDK priority
36
371) Python SDK (preferred)
382) OpenAPI Explorer
393) Other SDKs (only if Python is not feasible)
40
41### Python SDK quickstart (list instances)
42
43推荐使用虚拟环境(避免 PEP 668 的系统安装限制)。
44
45```bash
46python3 -m venv .venv
47. .venv/bin/activate
48python -m pip install alibabacloud_ecs20140526 alibabacloud_tea_openapi alibabacloud_credentials
49```
50
51```python
52from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
53from alibabacloud_ecs20140526 import models as ecs_models
54from alibabacloud_tea_openapi import models as open_api_models
55
56
57def create_client(region_id: str) -> Ecs20140526Client:
58 config = open_api_models.Config(
59 # Use env vars or shared config files per AccessKey priority.
60 region_id=region_id,
61 endpoint=f"ecs.{region_id}.aliyuncs.com",
62 )
63 return Ecs20140526Client(config)
64
65
66def list_instances(region_id: str):
67 client = create_client(region_id)
68 resp = client.describe_instances(ecs_models.DescribeInstancesRequest(
69 region_id=region_id,
70 page_number=1,
71 page_size=50,
72 ))
73 for inst in resp.body.instances.instance:
74 print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status)
75
76
77if __name__ == "__main__":
78 list_instances("cn-hangzhou")
79```
80
81### Python SDK scripts (recommended for inventory)
82
83- List all instances across regions (TSV/JSON): `scripts/list_instances_all_regions.py`
84- Summarize instance specs across regions: `scripts/summary_instance_specs.py`
85- Summarize instance counts by region (optional status breakdown): `scripts/summary_instances_by_region.py`
86- Summarize instance counts by status: `scripts/summary_instances_by_status.py`
87- Summarize instance counts by instance type: `scripts/summary_instances_by_instance_type.py`
88- Summarize instance counts by VPC: `scripts/summary_instances_by_vpc.py`
89- Summarize instance counts by security group: `scripts/summary_instances_by_security_group.py`
90
91### Python SDK: list instances for all regions
92
93```python
94from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
95from alibabacloud_ecs20140526 import models as ecs_models
96from alibabacloud_tea_openapi import models as open_api_models
97
98
99def create_client(region_id: str) -> Ecs20140526Client:
100 config = open_api_models.Config(
101 region_id=region_id,
102 endpoint=f"ecs.{region_id}.aliyuncs.com",
103 )
104 return Ecs20140526Client(config)
105
106
107def list_regions() -> list[str]:
108 client = create_client("cn-hangzhou")
109 resp = client.describe_regions(ecs_models.DescribeRegionsRequest())
110 return [r.region_id for r in resp.body.regions.region]
111
112
113def list_instances_all_regions():
114 for region_id in list_regions():
115 client = create_client(region_id)
116 req = ecs_models.DescribeInstancesRequest(
117 region_id=region_id,
118 page_number=1,
119 page_size=100,
120 )
121 resp = client.describe_instances(req)
122 print(f"== {region_id} ({resp.body.total_count}) ==")
123 for inst in resp.body.instances.instance:
124 print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status)
125
126
127if __name__ == "__main__":
128 list_instances_all_regions()
129```
130
131### Python SDK: paginated instance listing
132
133```python
134from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
135from alibabacloud_ecs20140526 import models as ecs_models
136from alibabacloud_tea_openapi import models as open_api_models
137
138
139def create_client(region_id: str) -> Ecs20140526Client:
140 config = open_api_models.Config(
141 region_id=region_id,
142 endpoint=f"ecs.{region_id}.aliyuncs.com",
143 )
144 return Ecs20140526Client(config)
145
146
147def list_instances_paged(region_id: str):
148 client = create_client(region_id)
149 page_number = 1
150 page_size = 100
151 while True:
152 resp = client.describe_instances(ecs_models.DescribeInstancesRequest(
153 region_id=region_id,
154 page_number=page_number,
155 page_size=page_size,
156 ))
157 for inst in resp.body.instances.instance:
158 print(inst.instance_id, inst.instance_name, inst.instance_type, inst.status)
159 total = resp.body.total_count
160 if page_number * page_size >= total:
161 break
162 page_number += 1
163
164
165if __name__ == "__main__":
166 list_instances_paged("cn-hangzhou")
167```
168
169### Python SDK: list instance types and pricing inputs
170
171```python
172from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
173from alibabacloud_ecs20140526 import models as ecs_models
174from alibabacloud_tea_openapi import models as open_api_models
175
176
177def create_client(region_id: str) -> Ecs20140526Client:
178 config = open_api_models.Config(
179 region_id=region_id,
180 endpoint=f"ecs.{region_id}.aliyuncs.com",
181 )
182 return Ecs20140526Client(config)
183
184
185def list_types(region_id: str, zone_id: str | None = None, instance_type_family: str | None = None):
186 client = create_client(region_id)
187 req = ecs_models.DescribeInstanceTypesRequest(
188 zone_id=zone_id,
189 instance_type_family=instance_type_family,
190 )
191 resp = client.describe_instance_types(req)
192 for t in resp.body.instance_types.instance_type:
193 print(t.instance_type_id, t.cpu_core_count, t.memory_size)
194
195
196if __name__ == "__main__":
197 list_types("cn-hangzhou", "cn-hangzhou-k")
198```
199
200## Common operation mapping
201
202- Instance lifecycle: `RunInstances`, `CreateInstance`, `StartInstance(s)`, `StopInstance(s)`, `RebootInstance(s)`, `DeleteInstance(s)`
203- Instance details: `DescribeInstances`, `DescribeInstanceStatus`, `DescribeInstanceAttribute`
204- Spec changes: `ModifyInstanceSpec`, `ModifyPrepayInstanceSpec`, `DescribeResourcesModification`
205- System disk changes: `ReplaceSystemDisk`, `ResetDisk`
206- Data disks: `CreateDisk`, `AttachDisk`, `DetachDisk`, `ResizeDisk`, `DescribeDisks`
207- Snapshots: `CreateSnapshot`, `CopySnapshot`, `DescribeSnapshots`, `DeleteSnapshot`
208- Images: `CreateImage`, `CopyImage`, `DescribeImages`, `DeleteImage`, `ModifyImageAttribute`
209- Security groups: `CreateSecurityGroup`, `AuthorizeSecurityGroup`, `RevokeSecurityGroup`, `DescribeSecurityGroupAttribute`
210- Key pairs: `CreateKeyPair`, `ImportKeyPair`, `DescribeKeyPairs`, `DeleteKeyPairs`
211- ENI: `CreateNetworkInterface`, `AttachNetworkInterface`, `DetachNetworkInterface`, `DescribeNetworkInterfaces`
212- Tags: `TagResources`, `UntagResources`, `ListTagResources`
213- Monitoring/events: `DescribeInstancesFullStatus`, `DescribeInstanceHistoryEvents`, `DescribeInstanceMonitorData`
214
215## Query patterns
216
217- List instances: `DescribeInstances` (supports filters such as `VpcId`, `VSwitchId`, `ZoneId`, `SecurityGroupId`, `InstanceIds`)
218- Count instances: `DescribeInstances` with `PageSize=1` and read `TotalCount`
219- Region discovery: `DescribeRegions` then loop all regions for inventory
220
221## Cloud Assistant (RunCommand) tips
222
223- Instances must be in `Running` state.
224- Ensure the Cloud Assistant agent is installed and online.
225- Use shell for Linux, PowerShell for Windows.
226- Poll results via `DescribeInvocations` and `DescribeInvocationResults`.
227
228See `references/command-assistant.md`.
229
230## AccessKey priority (must follow, align with README)
231
2321) Environment variables: `ALICLOUD_ACCESS_KEY_ID` / `ALICLOUD_ACCESS_KEY_SECRET` / `ALICLOUD_REGION_ID`
233Region policy: `ALICLOUD_REGION_ID` is an optional default. If unset, decide the most reasonable region for the task; if unclear, ask the user.
2342) Shared config file: `~/.alibabacloud/credentials` (region still from env)
235
236### Auth setup (README-aligned)
237
238Environment variables:
239
240```bash
241export ALICLOUD_ACCESS_KEY_ID="your-ak"
242export ALICLOUD_ACCESS_KEY_SECRET="your-sk"
243export ALICLOUD_REGION_ID="cn-hangzhou"
244```
245
246Also supported by the Alibaba Cloud SDKs:
247
248```bash
249export ALIBABA_CLOUD_ACCESS_KEY_ID="your-ak"
250export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your-sk"
251```
252
253Shared config file:
254
255`~/.alibabacloud/credentials`
256
257```ini
258[default]
259type = access_key
260access_key_id = your-ak
261access_key_secret = your-sk
262```
263
264
265## API discovery
266
267- Product code: `Ecs`
268- Default API version: `2014-05-26`
269- Use OpenAPI metadata endpoints to list APIs and get schemas (see references).
270
271## Output policy
272
273If you need to save responses or generated artifacts, write them under:
274`output/alicloud-compute-ecs/`
275
276## References
277
278- API overview: `references/api_overview.md`
279- Endpoints: `references/endpoints.md`
280- Cloud Assistant: `references/command-assistant.md`
281- DescribeInstances: `references/describe-instances.md`
282- Instances: `references/instances.md`
283- Disks: `references/disks.md`
284- Snapshots: `references/snapshots.md`
285- Images: `references/images.md`
286- Security groups: `references/security-groups.md`
287- Network interfaces: `references/network-interfaces.md`
288- Key pairs: `references/keypairs.md`
289- Tags: `references/tags.md`
290- Monitoring/events: `references/monitoring-events.md`
291- Sources: `references/sources.md`