使用 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 {
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