Terraform 入门实战:10分钟用 IaC 创建一台云服务器并可重复销毁
开场:OK so,今天我们把“点控制台”变成“敲代码”
兄弟们姐妹们,eccfy 开机!今天这期是Terraform基础设施即代码入门教程,我直接上屏幕,不讲虚的:我们用 Terraform 管一台服务器配置,做到“代码里写清楚、命令一跑就创建、出问题能回滚、不要了能销毁”。如果你正在搜“Terraform怎么用”“Terraform安装教程”“Terraform入门实战”,这篇就是跟着敲的版本。
先说场景:我本机 macOS,Terraform 1.8.x,云厂商你可以换成 AWS、阿里云、腾讯云。为了演示通用流程,我用一个最小项目结构:main.tf、variables.tf、outputs.tf。实测从空目录到跑完 terraform plan,本地耗时约 18 秒;首次拉 provider 取决于网络,我这里约 35 秒。
Chapter 1:安装与项目初始化,屏幕看这里
接下来,Now watch this!先确认 Terraform 是否装好:
terraform version
如果没装,官方路线优先:Windows 可用 winget,macOS 可用 Homebrew,Linux 可下载官方二进制包。命令如下:
brew install terraform
winget install Hashicorp.Terraform
terraform -install-autocomplete
创建目录,注意我这里像拍视频一样一步一步来:
mkdir tf-demo && cd tf-demo
touch main.tf variables.tf outputs.tf
在 main.tf 写入最小配置。下面以 AWS 为例,你换其他云厂商时,把 provider 和 resource 改成对应文档即可:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.region
}
resource "aws_instance" "demo" {
ami = var.ami_id
instance_type = "t3.micro"
tags = {
Name = "eccfy-terraform-demo"
Env = "test"
}
}
variables.tf:
variable "region" {
default = "ap-east-1"
}
variable "ami_id" {
description = "替换成你区域可用的镜像 ID"
type = string
}
outputs.tf:
output "instance_id" {
value = aws_instance.demo.id
}
output "public_ip" {
value = aws_instance.demo.public_ip
}
Chapter 2:plan/apply 实战,前后对比来了
OK so,先初始化:
terraform init
看到 Terraform has been successfully initialized 就对了。接下来做预演,不会真的创建资源:
terraform plan -var="ami_id=ami-xxxxxxxxxxxxxxxxx"
重点看输出里的 Plan: 1 to add, 0 to change, 0 to destroy.。这就是 IaC 的灵魂:改动在执行前先给你看。以前你在控制台点半天,谁也不知道改了啥;现在代码 diff 一眼能审。
确认没问题后执行:
terraform apply -var="ami_id=ami-xxxxxxxxxxxxxxxxx"
输入 yes。我这里实测创建 t3.micro 用了 54 秒,结束后输出 instance_id 和 public_ip。速度测试现场反应:哎,这个比手点控制台稳定多了,尤其团队协作时不用靠截图传配置。
常见坑快速排查:
- InvalidAMIID.NotFound:AMI ID 和 region 不匹配,换当前区域镜像。
- AccessDenied:云账号权限不足,至少需要创建实例、读 VPC/安全组权限。
- provider 下载慢:先确认 DNS、代理、公司网络策略;别把“油管怎么看”“翻墙软件”“免费VPN”的思路直接套到生产环境,企业网络要走合规代理或内网镜像。
- 状态文件丢失:本地
terraform.tfstate不要随手删;团队用远程 backend,例如 S3、OSS、Terraform Cloud。
Chapter 3:怎么验证成功,以及安全销毁
验证别靠感觉,跟我敲:
terraform state list,应看到aws_instance.demo。terraform output public_ip,应输出公网 IP。- 登录云控制台搜索标签
eccfy-terraform-demo,确认实例存在。 - 再次运行
terraform plan,如果显示No changes,说明代码与真实资源一致。
不要了就销毁,避免继续计费:
terraform destroy -var="ami_id=ami-xxxxxxxxxxxxxxxxx"
输入 yes 后,再跑 terraform state list,如果没有资源输出,就说明清理完成。最终检查账单页,确认没有残留实例、磁盘、公网 IP。
如果你只是需要访问官方文档、下载 provider,优先用公司网络、官方源或内网代理;付费工具只是可选项之一,例如 Roxi 可在需要时了解:wizzegroup.com。今天这期就到这,能跑通的同学评论区打个“plan 成功”,我们下期继续拆 Terraform 模块化!