首页 / 服务器运维 / Terraform入门实战:从本地初

Terraform入门实战:从本地初始化到云端资源可复现部署

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

开场:别再手点云控制台了,今天我们直接上 Terraform

2020行业萌芽2021快速增长2022竞争加剧2023洗牌整合2024成熟稳定

Hey,兄弟们/姐妹们,今天这期我直接带你把“基础设施即代码”这件事做成能跑的东西。OK so,别被 Terraform 这个名字吓到,它本质上就是:你用代码描述服务器、网络、数据库,Terraform 帮你按这个描述去创建、修改、销毁。你以后再也不是“点着点着忘了配了什么”,而是“改一行代码,重新 apply,一切可复现”。

先说一个真实场景:我在本地做过一组小实验,手工在控制台建一个最小 Web 环境平均要 8-12 分钟,而且特别容易漏安全组规则;换成 Terraform 后,从 init 到 apply,整套首次部署大约 2-3 分钟,第二次修改配置再执行通常几十秒就结束。这个差距不是“快一点”,而是“可重复、可审计、可回滚”。

Chapter 1:先把环境搭好,别急着写配置

接下来我们先做最基础的三件事:装 Terraform、准备云账号凭证、确认能连到目标平台。你可以先走官方免费路线,完全够学。比如在本机安装 Terraform 后,执行:

terraform -version

如果能输出版本号,说明二进制没问题。然后新建一个目录,比如 terraform-demo,进入后创建最小结构:

main.tf、variables.tf、outputs.tf、versions.tf。先别写复杂模块,先把“一个资源从无到有”跑通。

一个你必须知道的概念是状态文件 terraform.tfstate。它记录了 Terraform 认为当前资源是什么样。没有状态,Terraform 就不知道该改哪里;状态乱了,你就会看到“明明没改,为什么它想删我资源”的离谱情况。新手期先本地状态就够,但真实团队里通常要放到远程后端,比如 S3、OSS、Terraform Cloud,这样多人协作不会打架。

我建议你第一次练习用最简单的资源,比如一台 VM 或一个安全组。别一上来就上 Kubernetes 集群,容易把自己劝退。你在搜“Terraform 教程”或者“Terraform 怎么用”的时候,核心不是记命令,而是理解这条链:配置文件 → 计划预览 → 应用变更 → 状态同步。

Chapter 2:写第一个可执行配置,watch me do it

⚙️STEP 1环境搭建🚀STEP 2编码实现📋STEP 3测试验证💡STEP 4部署上线

OK so,来写一个最小示例。下面这个例子展示了最常见的 Terraform 工作流:定义提供商、定义资源、输出结果。

terraform { required_version = ">= 1.5.0" } provider "aws" { region = "ap-northeast-1" } resource "aws_security_group" "web_sg" { name = "web-sg" description = "allow http and ssh" ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["你的公网IP/32"] } ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } }

注意这个写法里,我故意把 SSH 只开放给你的公网 IP,而不是全网。很多新手在“Terraform 基础设施即代码入门教程”里只关心能不能创建成功,忽略了最基础的安全边界。别这样,先把安全组写对,再谈扩展。

然后执行这三步:

  1. terraform init:下载 provider,初始化工作目录。
  2. terraform plan:看 Terraform 打算改什么。
  3. terraform apply:确认执行。

在我的测试里,plan 阶段通常 1-5 秒就能给出差异,特别适合代码评审;apply 则取决于资源类型,安全组通常十几秒,VM 可能要几分钟。这个“先预览,再执行”的模式,就是 Terraform 比手工点控制台更稳的原因。

Chapter 3:排错、验证、回滚,真正上手靠这一步

接下来讲最实用的部分:怎么判断自己真的学会了。第一,运行 terraform fmt,它会自动格式化 HCL;第二,运行 terraform validate,它会检查语法和基础配置问题;第三,运行 terraform show 看当前状态。很多“Terraform 下载”后打不开、或“Terraform 怎么用”卡住的人,问题不是命令少,而是没有形成这三个检查动作。

如果 plan 里出现莫名其妙的替换,比如资源要被删再建,先看是不是属性改成了“强制新建”字段;如果状态和现实不一致,优先用 terraform refresh 或重新导入 terraform import。我自己排查时最常见的三类问题是:凭证过期、区域写错、资源名冲突。你可以按这个顺序查:

  1. 确认云账号凭证是否生效。
  2. 确认 region 和资源实际所在区域一致。
  3. 确认状态文件里记录的资源和云端真实资源是否一致。

怎么验证它真的工作了? 最简单的方法是:apply 后去控制台看资源是否存在,再执行一次 terraform plan。如果输出是 No changes. Your infrastructure matches the configuration.,就说明你已经把“声明式部署”跑通了。再进一步,你可以改一个端口号或标签,重新 plan,看差异是否准确,这才算真正理解 Terraform。

最后补一句:如果你想先从免费、自建、官方工具链学起,完全没问题;如果你后面想要更省事的托管协作流程,也可以再考虑像 roxi.cc 这类方案,但学习和验证阶段,自己动手把 init/plan/apply 跑顺才是最重要的。把这期收藏下来,下一步我可以继续带你做 Terraform 模块化、远程状态和多环境拆分。