用途
Terraform 是由 HashiCorp 创建的开源基础设施即代码(IaC)工具,使用名为 HCL(HashiCorp Configuration Language)的声明式配置语言来定义和配置基础设施。它管理的外部资源包括公有云基础设施、私有云基础设施、网络设备以及软件即服务(SaaS)。
资料列出的主要优势包括:
- 声明式配置:定义基础设施应该是什么样,而不是如何创建它
- 云无关(Cloud-Agnostic):可与多个云服务商和服务配合使用
- 版本控制:基础设施代码可以被版本化和审查
- 先计划后应用:在应用变更前预览变更
- 资源图:自动管理资源之间的依赖关系
- 状态管理:跟踪基础设施的当前状态
主要能力
核心概念
- 资源(Resources):Terraform 中最基本的元素,代表虚拟机、网络、数据库或 DNS 记录等基础设施对象。
- Provider:允许 Terraform 与云平台、SaaS 服务商及其他 API 交互的插件,通过 provider 块进行配置(示例中演示了 AWS provider 的 region 与 default_tags)。
- 状态(State):Terraform 在状态文件中存储基础设施信息,用于将现实资源映射到配置并跟踪元数据。
- HCL:既可读也便于机器处理,适合用于基础设施配置。
资源
资源块描述一个或多个基础设施对象,语法为 resource "resource_type" "resource_name" { ... }。资料给出的示例涵盖 AWS EC2 实例、VPC 与公有/私有子网、S3 存储桶(含版本控制与服务器端加密配置)、安全组(ingress/egress 规则),以及 user_data 启动脚本写法。
资源生命周期(lifecycle)选项包括:
- create_before_destroy:在销毁旧资源前先创建新资源
- prevent_destroy:防止资源被意外销毁
- ignore_changes:忽略指定属性的变更
- replace_triggered_by:在特定资源变化时强制替换
数据源
数据源允许 Terraform 使用 Terraform 之外定义的信息,或由另一个独立 Terraform 配置定义的信息,语法为 data "resource_type" "name" { ... }。资料示例包括查询最新的 AWS AMI、可用区、默认 VPC、Route53 区域、IAM 策略文档(aws_iam_policy_document),以及通过 data "terraform_remote_state" 读取远程状态并在资源中引用其 outputs。
变量与输出
- 输入变量支持类型:string、number、bool、list(string)、map(string) 以及 object 等复杂类型;变量支持 default、description 与 validation 校验块(示例为对 instance_type 取值做 contains 校验)。
- 变量的设置方式包括命令行 -var、变量文件 -var-file、以及 TF_VAR_ 前缀的环境变量;terraform.tfvars 文件示例已给出。
- 输出值(output)用于向其他配置提供信息或向用户展示,支持 description 与 sensitive 标记;支持 terraform output、terraform output <名称>、terraform output -json、terraform output -raw 等读取方式。
- 本地值(locals)为表达式命名以便在模块内复用,示例中与 merge 配合构造 common_tags。
模块
模块是多个一起使用的资源的容器,用于创建可复用组件。资料给出模块目录结构(main.tf、variables.tf、outputs.tf、README.md),并以 VPC 模块为例展示资源、变量、输出定义。模块调用方式包括:本地路径 source、Terraform Registry(示例为 terraform-aws-modules/s3-bucket/aws 并指定 version),以及模块的 count 与 for_each 用法;同时演示了引用模块输出(如 module.vpc.private_subnet_ids[0])。
进阶与工作流
- 工作流命令:terraform init、terraform init -upgrade、terraform init -backend-config、terraform plan、terraform plan -out=tfplan、terraform plan -var、terraform apply、terraform apply -auto-approve、terraform apply tfplan、terraform destroy、terraform destroy -auto-approve。
- 目录中列出的其他主题还包括依赖、Provisioner、最佳实践、状态管理、工作区(Workspaces)、Provider 配置以及 CI/CD 集成。
使用方式
按资料示例,典型流程为:编写 HCL 配置(资源、变量、输出、模块),执行 terraform init 初始化工作目录与 Provider,执行 terraform plan 预览变更(可保存计划文件),执行 terraform apply 应用变更(可指定计划文件或 -auto-approve),需要清理时执行 terraform destroy。变量可通过命令行、tfvars 文件或环境变量传入;输出可通过 terraform output 系列命令读取并在脚本中使用。
适用场景
适合需要以声明式代码定义、版本化、审查并配置云基础设施的场景,尤其是跨多个云服务商或服务的一致性管理需求;也适合通过模块化封装可复用基础设施组件,以及将基础设施变更纳入 CI/CD 流程。资料中的示例以 AWS 为主。
限制
资料未提供该技能的收费、价格、支持平台范围、性能指标或具体使用步骤之外的实施细节,这些信息暂未提供。