如何使用 Terraform 自动化管理阿里云 ECS 资源创建

文章导读
使用 Terraform 管理阿里云 ECS 适合需要重复部署、版本控制基础设施的场景,通过代码定义资源状态比手动控制台操作更可控。
📋 目录
  1. 1. 配置认证信息
  2. 2. 编写完整配置文件
  3. 3. 执行部署
  4. 4. 验证结果
  5. 5. 常见报错与排查
  6. 参考来源
A A

使用 Terraform 管理阿里云 ECS 适合需要重复部署、版本控制基础设施的场景,通过代码定义资源状态比手动控制台操作更可控。

先说结论:通过代码固化资源配置能减少人为失误,但必须通过环境变量管理认证凭证,严禁硬编码。

  • 适合:多环境重复部署和基础设施版本管控场景
  • 先准备:阿里云 AccessKey 并确保最小权限原则,配置为环境变量
  • 验收:对比 Terraform 状态文件与控制台资源一致性,检查状态锁定

1. 配置认证信息

为避免凭证泄露,不要将 AccessKey 写在代码中。建议在终端通过环境变量配置:

export ALICLOUD_ACCESS_KEY="your_access_key"
export ALICLOUD_SECRET_KEY="your_secret_key"
export ALICLOUD_REGION="cn-hangzhou"

Windows PowerShell 用户使用 $env:ALICLOUD_ACCESS_KEY="your_access_key" 设置。

2. 编写完整配置文件

创建一个 main.tf 文件,包含 Provider 配置及必要的网络资源依赖。以下示例会自动创建交换机和安全组,确保 ECS 可成功启动。

如何使用 Terraform 自动化管理阿里云 ECS 资源创建
terraform {
  required_providers {
    alicloud = {
      source  = "aliyun/alicloud"
      version = "~> 1.200.0"
    }
  }
}

provider "alicloud" {
  # 认证信息从环境变量读取,无需在此填写
}

# 查询最新 Ubuntu 镜像,避免区域 ID 不一致问题
data "alicloud_images" "ubuntu" {
  name_regex  = "^ubuntu_20_04_x64_20G_alibase_.*"
  most_recent = true
  owners      = "system"
}

# 创建交换机
resource "alicloud_vswitch" "default" {
  vpc_id            = "vpc-bp1..." # 需替换为现有 VPC ID 或先创建 VPC
  zone_id           = "cn-hangzhou-g"
  cidr_block        = "192.168.0.0/24"
  vswitch_name      = "tf-vswitch"
}

# 创建安全组
resource "alicloud_security_group" "default" {
  name        = "tf-sg"
  description = "Terraform managed security group"
  vpc_id      = "vpc-bp1..." # 需与交换机 VPC 一致
}

# 创建 ECS 实例
resource "alicloud_instance" "example" {
  instance_name        = "tf-ecs-example"
  image_id             = data.alicloud_images.ubuntu.images.0.id
  instance_type        = "ecs.c6.large"
  security_groups      = [alicloud_security_group.default.id]
  vswitch_id           = alicloud_vswitch.default.id
  internet_charge_type = "PayByTraffic"
  internet_max_bandwidth_out = 1
}

注意:示例中 vpc_id 需替换为实际存在的 VPC ID,或使用 alicloud_vpc 资源先行创建。镜像 ID 通过 data source 动态查询,避免区域失效。

3. 执行部署

在配置文件目录下执行以下命令:

terraform init
terraform plan
terraform apply

输入 yes 确认变更计划。

4. 验证结果

执行 terraform state list 查看已纳管资源,使用 terraform show 查看详细信息。同时登录阿里云控制台核对实例状态是否为“运行中”。

5. 常见报错与排查

  • InvalidAccessKey.Id: 检查环境变量是否生效,确认 Key 未过期。
  • State Lock Error: 多人协作或异常退出导致锁死。确认无人使用后,执行 terraform force-unlock <LOCK_ID> 解锁。
  • ImageNotFound: 硬编码的镜像 ID 在当前区域不存在。建议使用 data "alicloud_images" 动态查询。
  • DependencyViolation: 删除资源时失败。检查是否有未定义的外部依赖,或需先删除依赖该资源的子项。

参考来源

  • Alibaba Cloud Terraform Provider, Terraform Registry, https://registry.terraform.io/providers/aliyun/alicloud/latest/docs
  • 阿里云 Terraform 文档中心,阿里云帮助中心,https://www.alibabacloud.com/help/terraform