2026阿里云国际版API/CLI自动化管理实战教程:aliyun CLI、SDK与Terraform全攻略
Meta Description: 阿里云国际版怎么用命令行和API管理资源?
- 一句话结论
- 为什么你需要API/CLI自动化?
- 安装与配置aliyun CLI
- 用aliyun CLI管理ECS实例
- Python SDK实战
- Terraform基础设施编排
- 生产级自动化实战场景
- 安全最佳实践
Meta Description: 阿里云国际版怎么用命令行和API管理资源?本文从安装配置aliyun CLI、Python SDK调用ECS/OSS API、Terraform声明式基础设施编排到批量自动化运维实战,手把手教你摆脱控制台点点点,用代码管理云端资源。附价格参考与常见问题FAQ。
关键词:阿里云国际版CLI、aliyun CLI教程、阿里云API自动化、Terraform阿里云、Python SDK阿里云、云端自动化运维、基础设施即代码
一、一句话结论
手动在控制台点鼠标管理10台以上的云服务器,是运维效率的最大杀手。 阿里云国际版提供了完整的API/CLI/SDK/Terraform工具链,让你用一行命令创建ECS、用Python脚本批量管理OSS、用Terraform声明式定义整个VPC架构。本文按优先级排列:安装aliyun CLI → 获取AccessKey → 用CLI管理ECS → Python SDK批量操作 → Terraform基础设施编排 → 生产级自动化流水线,从零到一搭建完整的云端自动化管理体系。如果你还没注册阿里云国际版账号,先看本站 注册教程,注册前请确认当地法规合规性。
⚠️ 注意:本文所有价格均为参考价,价格可能变动,请以阿里云国际版官网(alibabacloud.com)实时定价为准。
二、为什么你需要API/CLI自动化?
2.1 手动操作的三大痛点
| 痛点场景 | 手动控制台操作 | 自动化CLI/API操作 | 效率提升 |
|---|---|---|---|
| 创建10台ECS | 重复点击30分钟 | 一条命令10秒 | 180倍 |
| 批量修改安全组 | 逐台登录控制台 | 循环脚本2分钟 | 10倍+ |
| 每日备份检查 | 人工登录检查 | Cron定时脚本零人工 | 无限 |
| 环境一致性 | 每台手动配置,容易遗漏 | Terraform模板一键拉起 | 质量保证 |
2.2 四种自动化工具对比
阿里云国际版提供四种主要的自动化管理方式,各有适用场景:
| 工具 | 类型 | 学习成本 | 适用场景 | 适合谁 |
|---|---|---|---|---|
| aliyun CLI | 命令行工具 | ⭐⭐ 低 | 日常运维、临时操作、脚本调用 | 运维工程师 |
| Python SDK | 编程库 | ⭐⭐⭐ 中 | 复杂逻辑、数据处理、批量操作 | 开发者 |
| Terraform | IaC工具 | ⭐⭐⭐⭐ 高 | 基础设施编排、版本管理、团队协作 | 架构师 |
| ROS(资源编排) | 阿里云原生IaC | ⭐⭐⭐ 中 | 纯阿里云环境、不想装Terraform | 运维工程师 |
📝 小提示:如果你是个人开发者,建议从aliyun CLI入门——安装简单、命令直观、文档丰富。如果管理多台ECS或需要环境一致性,直接上Terraform。
三、安装与配置aliyun CLI
3.1 安装aliyun CLI
aliyun CLI支持macOS、Linux和Windows,安装方式各不同:
Linux安装(推荐方式):
// 下载最新版aliyun CLI(以v3.0.245为例,请检查官网获取最新版本号)
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
// 解压到 /usr/local/bin
tar -xzf aliyun-cli-linux-latest-amd64.tgz -C /usr/local/bin/
// 验证安装
aliyun version
macOS安装(Homebrew):
brew install aliyun-cli
Windows安装:
// 下载zip包,解压后将aliyun.exe所在目录加入PATH
// 或使用Chocolatey:
choco install aliyun-cli
📝 小提示:Linux用户如果下载速度慢,可以从GitHub Releases页面(github.com/aliyun/aliyun-cli/releases)下载,国内镜像速度更快。
3.2 获取AccessKey
AccessKey是调用阿里云API的"钥匙",分为AccessKey ID和AccessKey Secret。创建步骤如下:
- 登录阿里云国际版控制台(home.console.alibabacloud.com)
- 点击右上角头像 → AccessKey管理
- 点击"创建AccessKey"(建议创建RAM子用户的AccessKey,不要用主账号)
- 记录AccessKey ID和AccessKey Secret(Secret只显示一次!)
⚠️ 安全警告:AccessKey Secret是敏感信息,绝对不要提交到Git仓库、写在公开文档或发给他人。建议立即创建RAM子用户并仅授予必要权限。
创建RAM子用户的步骤:
// 使用主账号创建一个只有ECS和OSS只读权限的子用户
// 在控制台:访问控制 → 用户 → 创建用户 → 权限策略 → 附加系统策略:
// AliyunECSReadOnlyAccess
// AliyunOSSReadOnlyAccess
// AliyunVPCFullAccess(如需管理网络)
3.3 配置CLI认证
// 交互式配置(推荐首次使用)
aliyun configure
// 按提示输入:
// AccessKey ID: LTAI5txxxxxxxxxxxxx
// AccessKey Secret: xxxxxxxxxxxxxxxxxxxxxxxx
// Region: ap-southeast-1(新加坡,按实际选择)
// Language: zh(中文输出)
// 验证配置
aliyun ecs DescribeInstances --RegionId ap-southeast-1 --PageSize 1
如果你有多个账号(如开发/生产),可以配置多Profile:
// 配置生产环境Profile
aliyun configure --profile production
// 输入另一组AccessKey
// 切换Profile
aliyun configure --profile production
// 指定Profile执行命令
aliyun ecs DescribeInstances --profile production --RegionId ap-southeast-1
四、用aliyun CLI管理ECS实例
4.1 查看实例列表
// 列出当前地域所有ECS实例
aliyun ecs DescribeInstances --RegionId ap-southeast-1
// 只看关键信息(用JMESPath过滤输出)
aliyun ecs DescribeInstances --RegionId ap-southeast-1 \
--output cols=InstanceId,InstanceName,Status,InstanceType rows=Instances.Instance
// 按标签过滤
aliyun ecs DescribeInstances --RegionId ap-southeast-1 \
--Tag.1.Key=Environment --Tag.1.Value=production
输出示例:
InstanceId InstanceName Status InstanceType
i-bp1xxxxxxxxxxxx01 prod-web-01 Running ecs.c6.large
i-bp1xxxxxxxxxxxx02 prod-web-02 Running ecs.c6.large
i-bp1xxxxxxxxxxxx03 prod-db-01 Running ecs.r6.xlarge
4.2 创建ECS实例
// 创建一台新加坡2核4G ECS
aliyun ecs CreateInstance \
--RegionId ap-southeast-1 \
--ImageId ubuntu_22_04_x64_20G_alibase_20230907.vhd \
--InstanceType ecs.c6.large \
--SecurityGroupId sg-bp1xxxxxxxxxxxx \
--VSwitchId vsw-bp1xxxxxxxxxxxx \
--InstanceName "cli-test-01" \
--InternetChargeType PayByTraffic \
--InternetMaxBandwidthOut 10 \
--SystemDiskCategory cloud_essd \
--SystemDiskSize 40 \
--Tags '[{"Key":"Environment","Value":"test"},{"Key":"ManagedBy","Value":"aliyun-cli"}]'
📝 小提示:
ImageId需要是对应地域的镜像ID,不同地域的ID不同。用aliyun ecs DescribeImages --RegionId ap-southeast-1 --OSName "Ubuntu 22"查询可用镜像。
4.3 常用ECS操作命令速查
| 操作 | 命令 | |
|---|---|---|
| 启动实例 | aliyun ecs StartInstance --InstanceId i-xxx | |
| 停止实例 | aliyun ecs StopInstance --InstanceId i-xxx | |
| 重启实例 | aliyun ecs RebootInstance --InstanceId i-xxx | |
| 删除实例 | aliyun ecs DeleteInstance --InstanceId i-xxx --Force true | |
| 查询实例状态 | aliyun ecs DescribeInstanceStatus --InstanceId i-xxx | |
| 获取公网IP | `aliyun ecs DescribeInstanceAttribute --InstanceId i-xxx \ | jq .PublicIpAddress.IpAddress[0]` |
4.4 批量操作脚本
#!/bin/bash
// 批量重启所有生产环境ECS(带确认提示)
echo "即将重启以下ECS实例:"
aliyun ecs DescribeInstances --RegionId ap-southeast-1 \
--Tag.1.Key=Environment --Tag.1.Value=production \
--output cols=InstanceId,InstanceName rows=Instances.Instance
read -p "确认重启?(y/N) " confirm
if [ "$confirm" = "y" ]; then
for instance in $(aliyun ecs DescribeInstances --RegionId ap-southeast-1 \
--Tag.1.Key=Environment --Tag.1.Value=production \
--output cols=InstanceId rows=Instances.Instance | tail -n +2); do
echo "重启 $instance ..."
aliyun ecs RebootInstance --InstanceId "$instance"
sleep 5 // 避免API限流
done
echo "全部重启完成"
fi
五、Python SDK实战
5.1 安装SDK
pip install alibabacloud-ecs20140526 alibabacloud-oss20190517 alibabacloud-tea-openapi
5.2 Python调用ECS API示例
// -*- coding: utf-8 -*-
// 阿里云国际版ECS实例查询脚本
from alibabacloud_ecs20140526.client import Client
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_openapi import models as open_api_models
// 配置API访问
config = open_api_models.Config(
access_key_id='LTAI5txxxxxxxxxxxxx',
access_key_secret='xxxxxxxxxxxxxxxxxxxxxxxx',
endpoint='ecs.ap-southeast-1.aliyuncs.com',
)
client = Client(config)
// 查询所有运行中的ECS实例
request = ecs_models.DescribeInstancesRequest(
region_id='ap-southeast-1',
status='Running',
page_number=1,
page_size=50,
)
response = client.describe_instances(request)
instances = response.body.instances.instance
print(f"共找到 {response.body.total_count} 台运行中实例:")
for inst in instances:
print(f" {inst.instance_id} | {inst.instance_name} | {inst.instance_type} | {inst.public_ip_address.ip_address[0] if inst.public_ip_address else '无公网IP'}")
5.3 Python批量操作OSS示例
// -*- coding: utf-8 -*-
// 批量上传本地目录到OSS Bucket
import os
import oss2
auth = oss2.Auth('LTAI5txxxxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxx')
bucket = oss2.Bucket(auth, 'https://oss-ap-southeast-1.aliyuncs.com', 'my-bucket-name')
local_dir = '/var/www/html'
remote_prefix = 'website-backup/2026-08-29'
uploaded = 0
for root, dirs, files in os.walk(local_dir):
for filename in files:
local_path = os.path.join(root, filename)
remote_path = os.path.join(remote_prefix, os.path.relpath(local_path, local_dir))
// 跳过已存在的文件(增量上传)
if bucket.object_exists(remote_path):
continue
bucket.put_object_from_file(remote_path, local_path)
uploaded += 1
print(f"上传: {remote_path}")
print(f"完成,共上传 {uploaded} 个文件")
5.4 异常处理最佳实践
from Tea.exceptions import TeaException
try:
response = client.describe_instances(request)
except TeaException as e:
if e.code == 'InvalidAccessKey.NotFound':
print("AccessKey不存在,请检查配置")
elif e.code == 'Throttling':
print("API限流,等待后重试")
time.sleep(5)
else:
print(f"API调用失败: {e.code} - {e.message}")
raise
📝 小提示:阿里云API有默认限流(通常每秒100次请求),批量操作时建议加
time.sleep(0.1)间隔,避免被限流。
六、Terraform基础设施编排
6.1 安装Terraform
// Linux安装
wget https://releases.hashicorp.com/terraform/1.9.8/terraform_1.9.8_linux_amd64.zip
unzip terraform_1.9.8_linux_amd64.zip -d /usr/local/bin/
// 验证
terraform version
6.2 阿里云Provider配置
// main.tf — 阿里云国际版Terraform Provider配置
terraform {
required_providers {
alicloud = {
source = "aliyun/alicloud"
version = "~> 1.230"
}
}
// 推荐使用远程Backend存储State
// backend "oss" {
// bucket = "terraform-state-bucket"
// key = "prod/terraform.tfstate"
// region = "ap-southeast-1"
// }
}
provider "alicloud" {
access_key = var.access_key
secret_key = var.secret_key
region = "ap-southeast-1"
}
// 用variables.tf存储敏感信息,不要硬编码
// variables.tf:
// variable "access_key" { sensitive = true }
// variable "secret_key" { sensitive = true }
6.3 完整VPC+ECS环境编排示例
// 一键拉起:VPC + VSwitch + 安全组 + 2台ECS + 1个SLB
// VPC
resource "alicloud_vpc" "main" {
vpc_name = "prod-vpc"
cidr_block = "172.16.0.0/12"
}
// VSwitch(可用区A)
resource "alicloud_vswitch" "vsw_a" {
vpc_id = alicloud_vpc.main.id
cidr_block = "172.16.0.0/24"
zone_id = "ap-southeast-1a"
vswitch_name = "prod-vsw-a"
}
// 安全组
resource "alicloud_security_group" "web" {
name = "web-sg"
vpc_id = alicloud_vpc.main.id
}
// 安全组规则:允许HTTP/HTTPS和SSH
resource "alicloud_security_group_rule" "allow_http" {
type = "ingress"
ip_protocol = "tcp"
port_range = "80/80"
security_group_id = alicloud_security_group.web.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_https" {
type = "ingress"
ip_protocol = "tcp"
port_range = "443/443"
security_group_id = alicloud_security_group.web.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_ssh" {
type = "ingress"
ip_protocol = "tcp"
port_range = "22/22"
security_group_id = alicloud_security_group.web.id
cidr_ip = "1.2.3.4/32" // 只允许固定IP的SSH
}
// 2台Web服务器
resource "alicloud_instance" "web" {
count = 2
instance_name = "web-${count.index + 1}"
image_id = "ubuntu_22_04_x64_20G_alibase_20230907.vhd"
instance_type = "ecs.c6.large"
security_groups = [alicloud_security_group.web.id]
vswitch_id = alicloud_vswitch.vsw_a.id
system_disk_category = "cloud_essd"
system_disk_size = 40
internet_charge_type = "PayByTraffic"
internet_max_bandwidth_out = 10
tags = {
Environment = "production"
ManagedBy = "terraform"
}
}
// 输出
output "instance_ips" {
value = alicloud_instance.web[*].public_ip
}
执行流程:
// 初始化(下载Provider)
terraform init
// 预览变更
terraform plan
// 执行(实际创建资源)
terraform apply
// 查看输出
terraform output
// 销毁所有资源(谨慎使用)
terraform destroy
6.4 Terraform State远程存储
生产环境强烈建议使用OSS存储State文件(支持团队协作和状态锁定):
// 先创建OSS Bucket(手动或CLI)
aliyun oss mb oss://terraform-state-bucket --region ap-southeast-1
// 在main.tf中启用远程Backend,然后执行
terraform init -migrate-state
七、生产级自动化实战场景
7.1 场景一:每日自动快照备份
// daily_snapshot.py — 每日自动为所有生产ECS创建快照
import time
from alibabacloud_ecs20140526.client import Client
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_openapi import models as open_api_models
config = open_api_models.Config(
access_key_id='YOUR_AK',
access_key_secret='YOUR_SK',
endpoint='ecs.ap-southeast-1.aliyuncs.com',
)
client = Client(config)
// 获取所有生产环境ECS的系统盘ID
request = ecs_models.DescribeInstancesRequest(
region_id='ap-southeast-1',
tag_1_key='Environment',
tag_1_value='production',
)
response = client.describe_instances(request)
disk_ids = []
for inst in response.body.instances.instance:
disk_ids.append(inst.system_disk_id)
// 为每个磁盘创建快照
today = time.strftime('%Y-%m-%d')
for disk_id in disk_ids:
snap_request = ecs_models.CreateSnapshotRequest(
disk_id=disk_id,
snapshot_name=f'daily-{today}',
retention_days=7, // 自动保留7天
description=f'Daily snapshot {today}',
)
client.create_snapshot(snap_request)
print(f"快照已创建: {disk_id} -> daily-{today}")
print(f"共创建 {len(disk_ids)} 个快照")
配合Cron定时执行:
// 每天凌晨2点执行
0 2 * * * /usr/bin/python3 /opt/scripts/daily_snapshot.py >> /var/log/snapshot.log 2>&1
7.2 场景二:自动伸缩告警处理
// auto_scale.py — CPU持续>80%时自动扩容ECS
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_cms20190101.client import Client as CmsClient
// ... (SDK imports)
// 1. 查询CloudMonitor获取CPU>80%的实例
// 2. 判断当前实例规格是否还有升级空间
// 3. 自动变更实例规格(需要先停机)
// 4. 发送通知
7.3 场景三:多环境一致性部署
#!/bin/bash
// deploy-environments.sh — 用Terraform一键拉起开发/测试/生产环境
for env in dev staging production; do
echo "=== 部署 $env 环境 ==="
cd /opt/terraform/environments/$env
terraform init -input=false
terraform apply -auto-approve -input=false
echo "$env 环境部署完成"
done
八、安全最佳实践
8.1 AccessKey安全清单
| 做法 | 安全等级 | 说明 |
|---|---|---|
| 使用RAM子用户AccessKey | ✅ 推荐 | 主账号AK权限太大,泄露风险极高 |
| AccessKey存环境变量 | ✅ 推荐 | export ALIBABA_CLOUD_ACCESS_KEY_ID=xxx |
| AccessKey加密存储(KMS) | ✅ 最佳 | 用阿里云KMS加密后存储 |
| AccessKey写在代码里 | ❌ 危险 | 一旦提交Git,AK即泄露 |
| AccessKey发给同事 | ❌ 危险 | 每人创建自己的RAM子用户 |
8.2 权限最小化原则
// RAM策略示例:只允许操作特定ECS实例
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:Describe*",
"ecs:StartInstance",
"ecs:StopInstance"
],
"Resource": [
"acs:ecs:*:*:instance/i-bp1xxxxxxxxxxxx01",
"acs:ecs:*:*:instance/i-bp1xxxxxxxxxxxx02"
]
}
]
}
8.3 Terraform State安全
- State文件包含所有资源的敏感信息(密码、密钥等),必须加密存储
- 使用OSS Backend + 服务端加密 + 版本控制
- 生产环境State启用状态锁(
terraform lock),防止并发修改冲突
九、常见问题 FAQ
- Q: aliyun CLI报错"InvalidAccessKey.NotFound"怎么办?
A: 三个排查方向:1)检查AccessKey ID是否拼写正确(注意大小写和连字符);2)确认AccessKey状态为"启用"(不是"禁用");3)如果是RAM子用户的AK,确认子用户未被删除或禁用。用 aliyun configure 重新配置一次通常能解决。
- Q: API调用频繁被限流(Throttling)怎么办?
A: 阿里云API有默认QPS限制(通常100次/秒/账号)。解决方法:1)在脚本中加入sleep间隔(0.1-0.5秒);2)实现指数退避重试;3)联系阿里云提升API配额(免费);4)使用批量接口替代循环单次调用(如 DescribeInstances 一次返回50条,而不是循环50次 DescribeInstanceAttribute)。
- Q: Terraform apply报错"区域不支持该实例类型"怎么办?
A: 不同地域支持的实例类型不同。用 aliyun ecs DescribeInstanceTypes --RegionId <地域ID> 查看该地域可用的实例类型。东南亚常见支持的类型:ecs.c6、ecs.g7、ecs.r7系列;ecs.e系列(经济型)在部分区域不可用。
- Q: Python SDK和aliyun CLI应该选哪个?
A: 简单操作用CLI(一行命令搞定),复杂逻辑用Python SDK(条件判断、循环、数据处理)。两者调用的是同一套API,可以混用。推荐的组合:日常运维写Shell脚本调CLI,数据密集型任务用Python SDK。
- Q: 如何在GitHub Actions中使用aliyun CLI?
A: 将AccessKey ID和Secret存为GitHub Secrets,在workflow中通过环境变量传递:
- name: Configure Aliyun CLI
run: |
aliyun configure set --profile default \
--mode AK \
--access-key-id ${{ secrets.ALIYUN_AK_ID }} \
--access-key-secret ${{ secrets.ALIYUN_AK_SECRET }} \
--region ap-southeast-1
十、总结
API/CLI自动化的核心价值:把重复劳动交给机器,把创造力留给人。 本文的工具选型建议:日常运维用aliyun CLI(安装快、命令直观),复杂数据处理用Python SDK(灵活强大),基础设施管理用Terraform(版本化、可审计、团队协作)。安全方面,永远不要用主账号AK,创建RAM子用户并遵循最小权限原则。如果你刚开始接触阿里云国际版,建议先看 注册教程 完成账号注册,再用 ECS选购教程 挑选合适的实例规格,然后用本文的CLI/SDK/Terraform方法进行管理。需要批量管理多台ECS的安全配置,可以参考 ECS安全加固教程。
⚠️ 免责声明:本文中提到的配置、价格和优惠信息可能随时间变化,请以阿里云国际版官网(alibabacloud.com)的实时信息为准。本文不构成任何投资或购买建议。注册前请确认当地法规合规性。
本文由 2.chengzicloud.cloud 提供,点击访问首页了解更多