2026阿里云国际版API/CLI自动化管理实战教程:aliyun CLI、SDK与Terraform全攻略

📅 · 阿里云国际版实战教程 - ChengziCloud

一句话结论

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编程库⭐⭐⭐ 中复杂逻辑、数据处理、批量操作开发者
TerraformIaC工具⭐⭐⭐⭐ 高基础设施编排、版本管理、团队协作架构师
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。创建步骤如下:

  1. 登录阿里云国际版控制台(home.console.alibabacloud.com)
  2. 点击右上角头像 → AccessKey管理
  3. 点击"创建AccessKey"(建议创建RAM子用户的AccessKey,不要用主账号)
  4. 记录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 提供,点击访问首页了解更多