本文档提供了我们 DevOps exercises 仓库中关于使用 Terraform 进行基础设施即代码 (IaC) 的全面指南。它涵盖了基础概念、工作流程、配置文件语言特性、状态管理、模块以及使用 Terraform 可靠有效地管理基础设施的最佳实践。
有关 AWS 特定基础设施自动化,请参阅 AWS 基础设施自动化。
基础设施即代码 (IaC) 是一种通过机器可读的定义文件来管理和配置基础设施的实践,而不是通过物理硬件配置或交互式配置工具。Terraform 是 HashiCorp 的开源 IaC 工具,它允许您在人类可读的配置文件中定义资源,您可以对这些文件进行版本控制、重用和共享。
来源:topics/terraform/README.md94-103
来源:topics/terraform/README.md230-234 topics/terraform/README.md800-816
Terraform 使用提供商与云平台、服务和 API 进行交互。资源是 Terraform 中最重要的元素,代表虚拟网络、计算实例或 DNS 记录等基础设施对象。
示例资源定义
在此示例中
aws_instance 是资源类型example 是资源名称(供 Terraform 内部引用)来源:topics/terraform/README.md62-65 topics/terraform/README.md127-140
Terraform 需要在使用 terraform init 对提供商进行初始化。
来源:topics/terraform/README.md267-306
Terraform 会自动处理资源之间的依赖关系。例如,EC2 实例可能依赖于 VPC 和安全组。您还可以使用 depends_on 元参数显式定义依赖关系。
可以使用 <PROVIDER_TYPE>.<NAME>.<ATTRIBUTE> 语法引用其他资源的属性。
来源:topics/terraform/README.md192-211
状态是 Terraform 中的一个关键概念。它将您的配置文件中定义的资源映射到真实世界的资源并跟踪元数据。默认情况下,状态文件存储在本地,名为 terraform.tfstate,但可以将其配置为使用远程后端以实现团队协作。
来源:topics/terraform/README.md800-823
对于团队环境,建议使用远程后端
来源:topics/terraform/README.md883-913
| 命令 | 描述 |
|---|---|
terraform state list | 列出状态中的资源 |
terraform state show <resource> | 显示特定资源的详细信息 |
terraform state mv <source> <dest> | 在状态中移动资源 |
terraform state rm <resource> | 从状态中移除资源 |
terraform import <resource> <id> | 导入现有资源 |
来源:topics/terraform/README.md974-999
输入变量充当 Terraform 模块的参数。
来源:topics/terraform/README.md362-403
输出变量提取资源的返回值。
来源:topics/terraform/README.md442-465
Locals 类似于变量,但不能从外部传入。
来源:topics/terraform/README.md467-495
数据源允许 Terraform 获取和使用 Terraform 外部定义的信息,或由另一个 Terraform 配置定义的信息。
来源:topics/terraform/README.md606-660
Terraform 支持多种循环类型
countfor_each来源:topics/terraform/README.md1069-1245
来源:topics/terraform/README.md1283-1337
模块是多个资源组合在一起的容器。它们允许您创建可重用的组件并组织 Terraform 代码。
来源:topics/terraform/README.md1403-1419
来源:topics/terraform/README.md1472-1497
模块可以从各种来源加载
来源:topics/terraform/README.md1439-1449
让我们看看如何使用 Terraform 管理 AWS S3 存储桶。
由于 AWS 中的 S3 存储桶名称是不可变的,重命名存储桶需要创建一个新存储桶并迁移内容。这是流程
来源:topics/terraform/exercises/s3_bucket_rename/exercise.md1-22 topics/terraform/exercises/s3_bucket_rename/solution.md1-65
来源:topics/terraform/README.md851-869
来源: topics/terraform/README.md1705-1781
生产环境推荐项目结构
terraform_project/
├── environments/
│ ├── dev/
│ ├── staging/
│ └── prod/
├── modules/
│ ├── vpc/
│ ├── compute/
│ └── database/
└── scripts/
Terraform 项目中的常见文件
main.tf - 主要资源定义variables.tf - 输入变量声明outputs.tf - 输出定义providers.tf - 提供程序配置versions.tf - Terraform 和提供程序版本约束来源: topics/terraform/README.md1787-1831
对于团队环境,请考虑实施此工作流
terraform validate 和 terraform planterraform apply此方法确保所有基础设施更改在应用前都经过审查,并提供审计跟踪。
来源:topics/terraform/README.md94-103
Terraform 提供了一种强大的方式来管理跨多个云提供商的代码基础设施。通过使用 Terraform,您可以对基础设施进行版本控制,与团队成员协作,并确保环境的一致性。本指南介绍了有效使用 Terraform 的基本概念和最佳实践,使您能够在组织中开始实施基础设施即代码。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(eac6c6)