基础设施即代码(Infrastructure as Code,简称 IaC) 是一种通过 代码化的方式来管理和配置 IT 基础设施(如服务器、网络、存储、Kubernetes 集群等)的实践。IaC 使得基础设施可以像软件一样被版本控制、复用、测试、自动部署和持续交付。
一、IaC 的核心理念
传统基础设施配置通常是 手动操作(如点击 AWS 控制台、SSH 登录配置),而 IaC 则是:
-
✅ 基础设施是代码:用声明式或命令式语言描述基础设施;
-
✅ 自动化部署:脚本或工具自动创建、变更和销毁资源;
-
✅ 可重复性:环境可以被完全重现,避免“配置漂移”;
-
✅ 版本控制:配置文件可存入 Git,支持审查、回滚等;
-
✅ 持续集成 / 持续交付(CI/CD):基础设施变更可进入自动化流程。
二、IaC 的两种主要模式
模式 | 描述 | 示例工具 |
---|---|---|
声明式 | 描述你想要的最终状态,由工具决定如何实现 | Terraform, Kubernetes YAML, Pulumi(部分) |
命令式 | 明确写出执行步骤和顺序 | Ansible, Shell 脚本, Chef, Puppet(部分) |
三、常用的 IaC 工具
工具 | 特点 |
---|---|
Terraform | 使用 HCL(HashiCorp 配置语言),跨云支持广泛,是最受欢迎的声明式 IaC 工具之一 |
Ansible | 基于 Python、命令式,适合配置管理和应用部署,无需 Agent |
Pulumi | 支持使用 TypeScript、Go、Python 写基础设施代码(即真正“编程”定义基础设施) |
CloudFormation | AWS 官方声明式 IaC 工具,适用于 AWS 用户 |
Kubernetes YAML | Pod、Service、Ingress 等资源定义也是 IaC 的一种形式 |
Helm | Kubernetes 上的包管理工具,支持参数化模板部署 |
四、IaC 的典型应用场景
-
☁️ 在 AWS/GCP/Azure 中创建 VPC、EC2、S3、RDS 等云资源;
-
🐳 用 YAML 管理 Kubernetes 集群中的 Pod、Service、Ingress;
-
🛠 自动配置服务器软件,如安装 Nginx、配置防火墙、部署代码;
-
🚀 在 CI/CD 管道中自动构建并部署完整的测试或生产环境;
-
🔁 一键重建某个版本的完整环境(防止“在我这能跑”问题);
五、IaC 与 DevOps / 云原生 的关系
术语 | 作用 |
---|---|
DevOps | 方法论,强调自动化与协作 |
CI/CD | DevOps 实践之一,自动化构建/部署 |
IaC | DevOps 的关键技术,管理基础设施 |
云原生 | 依赖容器、微服务、IaC 等技术的现代应用架构 |
它们共同构建了现代软件交付体系。
六、IaC 示例(Terraform)
provider "aws" {
region = "us-west-1"
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
执行命令:
terraform init
terraform apply