58 lines
2.1 KiB
Markdown
58 lines
2.1 KiB
Markdown
---
|
||
title: "Infrastructure as Code"
|
||
type: concept
|
||
tags: [DevOps, Cloud, Automation]
|
||
sources: [engineering-devops-automator]
|
||
last_updated: 2026-05-01
|
||
---
|
||
|
||
# Infrastructure as Code
|
||
|
||
## 定义
|
||
基础设施即代码(Infrastructure as Code,IaC)是一种通过代码定义和管理云基础设施的方法,替代传统手动配置,实现基础设施的可重复性、可版本控制和可测试性。
|
||
|
||
## 核心原则
|
||
1. **声明式配置**:描述期望的最终状态,而非执行的具体步骤
|
||
2. **幂等性**:多次执行产生相同结果
|
||
3. **版本控制**:所有配置存储在 Git 等版本控制系统
|
||
4. **可重复性**:同一代码在不同环境生成相同基础设施
|
||
5. **自动化测试**:基础设施变更经过测试验证
|
||
|
||
## 核心工具
|
||
- **Terraform**:声明式、多云支持(AWS/GCP/Azure)
|
||
- **AWS CloudFormation**:AWS 原生声明式服务
|
||
- **AWS CDK**:使用编程语言(TypeScript/Python)定义云资源
|
||
- **Ansible**:配置管理 + 基础设施编排
|
||
- **Pulumi**:使用通用编程语言定义基础设施
|
||
|
||
## 在 DevOps Automator 中的应用
|
||
- 使用 Terraform 定义 AWS Auto-scaling groups、ALB、CloudWatch alarms
|
||
- 通过 `terraform plan` 预览变更,通过 `terraform apply` 自动部署
|
||
- 支持多环境管理(dev/staging/prod)
|
||
|
||
## 相关概念
|
||
- [[CI/CD Pipeline]]:IaC 变更通过 CI/CD 流水线自动化部署
|
||
- [[Terraform]]:DevOps Automator 默认使用的 IaC 工具
|
||
- [[GitOps]]:基于 Git 的 IaC 运维模式
|
||
|
||
## 最佳实践
|
||
- 状态文件存储在远程后端(S3 + DynamoDB)
|
||
- 使用 workspaces 或目录分离多环境
|
||
- 模块化设计,复用公共组件
|
||
- 敏感信息使用 Vault 或 AWS Secrets Manager
|
||
|
||
## 与传统运维的对比
|
||
| 维度 | 传统运维 | IaC |
|
||
|------|----------|-----|
|
||
| 速度 | 手动配置耗时 | 分钟级自动部署 |
|
||
| 一致性 | 人为差异 | 完全一致 |
|
||
| 版本控制 | 无 | 完整历史记录 |
|
||
| 回滚 | 困难 | 一键回滚 |
|
||
| 审计 | 日志分散 | 集中可追溯 |
|
||
|
||
## Aliases
|
||
- IaC
|
||
- Infrastructure as Code
|
||
- 基础设施即代码
|
||
- Configuration as Code
|