把服务器当代码写:IaC 让部署变得又稳又香

举报
Echo_Wish 发表于 2025/11/25 21:21:18 2025/11/25
【摘要】 把服务器当代码写: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,把基础设施变成代码,
从此部署不再乱、变更不再慌、运维不再累。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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