从手动到自动:用 Terraform 五分钟在华为云拉起一台安全 ECS

举报
yd_286050264 发表于 2026/11/08 01:40:53 2026/11/08
【摘要】 还在控制台点点点?本文带你用 Terraform 声明式地创建 VPC、子网、安全组和 ECS 实例,一次编写、反复复用,让基础设施像代码一样被版本管理。适合"懂云但刚接触 IaC"的同学,附完整可运行配置与逐段解读。

为什么写这篇文章

如果你在华为云控制台上手动建过 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、挂云硬盘、或者用模块管理多环境——告诉我,下一篇接着写。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。