把服务器当代码写:IaC 让部署变得又稳又香
把服务器当代码写:IaC 让部署变得又稳又香
—— Echo_Wish 的运维碎碎念
有句话我以前特别不理解:“运维工作,90% 的问题都来自人手动点出来的。”
直到后来我维护的某生产环境因为同事多敲了一个空格,导致整个服务挂了半小时,我终于悟了:
人是最不可靠的,但代码是可控的。
于是 IaC(Infrastructure as Code,基础设施即代码)登上了舞台,并告诉运维圈一句惊心动魄的话:
服务器不是用来点的,是用来“写”的。
今天我们聊聊 IaC 到底是怎么让部署更优雅的,
为什么业内都在推它,
怎么用 Terraform / Ansible 写出“不会加班的自动化”,
以及我自己多年踩坑留下的心得。
放心,咱还是老规矩——通俗易懂,不拽概念,还带你看看真代码。
🟩 一、IaC 到底改变了什么?
以前的运维部署是什么样?
- 登录服务器
- yum 安装
- 配 nginx
- 配防火墙
- 改配置文件
- 重启
- 忘了备份
- 故障发生
- 回滚困难
- 人崩溃
每个步骤都要手动执行,一旦错一个空格,就能让你怀疑人生。
而 IaC 说的是:
所有基础设施(机器、网络、负载均衡、策略、安全组、配置……)都用代码表达。
你写好脚本 → 提交 → 自动部署 → 过程可回滚 → 版本可管理。
这有几个直接变化:
🔹 可复制:你在 A 环境能跑,在 B 环境也能跑
🔹 可回滚:版本化管理,回滚像 git checkout
🔹 可审计:变更不靠“记忆”,靠代码
🔹 可扩展:一次编排,多个环境自动同步
🔹 可预测:代码写得什么,最终结果就是什么
这才是真正的“自动化不是少敲命令,而是压根不用敲命令”。
🟩 二、IaC 两大派系:声明式 vs 命令式
简单讲:
① 声明式(代表:Terraform)
你只需要告诉系统“我要什么”,不管它怎么实现。
类似说:我要一个 4C8G 的 ECS,一台 RDS,一个 Redis 集群,快给我整。
DevOps 工具自己会想办法搞定。
② 命令式(代表:Ansible)
告诉系统“怎么做”。
类似:先 yum install,再拷贝文件,然后启动服务。
两者不冲突,甚至常一起用:
Terraform 创建机器,Ansible 负责机器里的配置。
🟩 三、Terraform 一把梭:几行代码创建一台服务器
下面这段代码,是 Terraform 创建一台阿里云 ECS 的经典案例(简化版本)。
你只需要写出你“想要什么”,Terraform 就会自动调用云 API 去创建。
provider "alicloud" {
region = "cn-hangzhou"
}
resource "alicloud_instance" "web" {
instance_type = "ecs.c6.large"
image_id = "centos_7_latest"
instance_name = "web-server"
system_disk_size = 50
}
然后你只需要执行三步:
terraform init
terraform plan
terraform apply
Boom!
服务器就给你“凭空创造”出来了。
如果你删掉或修改部分配置,再 apply 会自动更新资源。
更牛的是:
Terraform 会告诉你会变更什么,让你的心里永远有底。
🟩 四、Ansible:把服务器配置变成“菜谱”
如果 Terraform 负责“买菜 + 生火”,
那 Ansible 就负责“炒菜 + 上桌”。
下面用一个最经典的 playbook 来演示,如何自动安装 nginx 并启动:
---
- hosts: web
become: yes
tasks:
- name: 安装 nginx
yum:
name: nginx
state: present
- name: 启动 nginx
service:
name: nginx
state: started
enabled: yes
你运行:
ansible-playbook install_nginx.yml
nginx 就自动安装好了,而且可重复执行,
完全不用担心安装多次会有冲突——Ansible 本身就是幂等的。
这就是 IaC 的核心:
不用靠经验判断,不用靠命令记忆,全部靠“脚本保证一致性”。
🟩 五、来张图:你就一眼看懂 IaC
以下是一张非常易懂的 IaC 工作流示意图(ASCII 手绘风):
┌────────────┐
│ 代码仓库 │
└──────┬─────┘
│git push
┌──────▼─────┐
│ CI/CD流水线│
└──────┬─────┘
│调用
┌────────▼─────────┐
│ IaC 工具 │
│ Terraform / Ansible│
└────────┬─────────┘
│API 调用
┌──────────▼──────────┐
│ 云平台 / 服务器 │
└─────────────────────┘
一句话总结:
修改代码 → 推送 → 自动部署 → 可审计可回滚
整个过程又优雅又稳。
🟩 六、我的切身感受:IaC 帮我少加了太多班
几年前我接手某 30+ 环境的服务部署,每次升级要:
- 改配置
- 改防火墙
- 改负载均衡
- 改机器
- 改脚本
- 一条漏掉就会出事故
那时候我真觉得自己不是在运维,是在“赌命”。
后来我们全面引入 IaC,把所有环境的配置写成 Terraform + Ansible。
结果就三个字:爽翻了。
- 20 分钟的变更 → 2 分钟自动化
- 错误率几乎为零
- 回滚只需要 git revert
- 所有人用同一套脚本,不会“各干各的”
更重要的是:
IaC 让“经验”落地成“资产”,不再锁在某个工程师脑子里。
你离职,也不会有人被你坑。
你休假,也不会有人叫你 3 点起来处理线上 bug。
你只需要写代码,就能把基础设施运维得漂漂亮亮。
🟩 七、总结:IaC 不是趋势,而是运维的“必修课”
为什么我说 IaC 是运维的未来?
因为它符合三大趋势:
① 云原生时代,一切都要 API 化
② 复杂系统需要“可重复、可预测”
③ 运维不再是敲命令,而是“写逻辑”
一句话:
IaC,把基础设施变成代码,
从此部署不再乱、变更不再慌、运维不再累。
- 点赞
- 收藏
- 关注作者
评论(0)