从手动到自动:用 Terraform 五分钟在华为云拉起一台安全 ECS
为什么写这篇文章
如果你在华为云控制台上手动建过 ECS,大概经历过这样的循环:选规格、选镜像、配网络、配安全组、点确认……下次要建一台一样的,又从头点一遍。环境一多,谁也记不清哪台开了哪个端口。
Terraform 解决的就是这件事——把基础设施写成代码,terraform apply 一下,资源就按你写的样子创建出来;再跑一次,它告诉你什么都没变(这就是幂等性)。代码进 Git,谁改了什么、什么时候改的,一清二楚。
五分钟配置
下面这段配置做了一件事:在华为云上创建一个 VPC、一个子网、一个仅放通 22 端口的安全组,然后起一台 s6.large.2 的 ECS。
# provider.tf — 告诉 Terraform 我们要用华为云
terraform {
required_providers {
huaweicloud = {
source = "huaweicloud/huaweicloud"
version = "~> 1.60"
}
}
}
provider "huaweicloud" {
region = "cn-north-4"
# 推荐用环境变量传 AK/SK,不要写进文件
}
# main.tf — 基础设施本体
resource "huaweicloud_vpc_v1" "main" {
name = "vpc-terraform-demo"
cidr = "192.168.0.0/16"
}
resource "huaweicloud_vpc_subnet_v1" "main" {
name = "subnet-demo"
cidr = "192.168.0.0/24"
gateway_ip = "192.168.0.1"
vpc_id = huaweicloud_vpc_v1.main.id
}
resource "huaweicloud_networking_secgroup_v2" "main" {
name = "secgroup-demo"
description = "Only allow SSH"
}
resource "huaweicloud_networking_secgroup_rule_v2" "ssh" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 22
port_range_max = 22
remote_ip_prefix = "0.0.0.0/0"
security_group_id = huaweicloud_networking_secgroup_v2.main.id
}
resource "huaweicloud_compute_instance_v2" "web" {
name = "ecs-demo"
image_id = "your-image-id" # 替换为你的镜像 ID
flavor_id = "s6.large.2"
security_group_ids = [huaweicloud_networking_secgroup_v2.main.id]
network {
uuid = huaweicloud_vpc_subnet_v1.main.id
}
}
逐段解读
| 代码块 | 对应华为云资源 | 为什么这么写 |
|---|---|---|
provider |
— | 指定区域,AK/SK 走环境变量不入库 |
vpc_v1 |
虚拟私有云 | 192.168.0.0/16 给足地址空间 |
vpc_subnet_v1 |
子网 | 引用 vpc.id,Terraform 自动处理依赖顺序 |
secgroup + rule |
安全组 + 规则 | 只开 22,不开全部端口——这是底线 |
compute_instance_v2 |
弹性云服务器 | 挂到上面的子网和安全组,引用即依赖 |
注意 huaweicloud_vpc_subnet_v1.main.id 这种写法——Terraform 看到引用就知道"子网依赖 VPC,得先建 VPC",你不用手动排顺序,这是声明式的好处。
跑起来
export HW_ACCESS_KEY="你的AK"
export HW_SECRET_KEY="你的SK"
terraform init # 下载 provider 插件
terraform plan # 预览:会创建 5 个资源
terraform apply # 输入 yes 确认
想销毁?terraform destroy,干净利落。
一个提醒
安全组里 remote_ip_prefix = "0.0.0.0/0" 意味着 22 端口对全网开放。演示没问题,生产环境请改成你的办公出口 IP 或跳板机网段。安全组不是越宽越方便,是越窄越安全。
小结
从手动到自动,门槛其实就是一个 resource 块。写一次,跑无数次,改了代码 plan 一下就能看到差异——这比在控制台上回忆"上次点了啥"靠谱得多。下次我们可以聊聊怎么把这段配置模块化,让多个环境复用同一套写法。
这篇就到这里。如果你有想深入了解的方向——比如 ECS 加 EIP、挂云硬盘、或者用模块管理多环境——告诉我,下一篇接着写。
- 点赞
- 收藏
- 关注作者
评论(0)