SuperAPI AI 工具集

terraform-infrastructure-as-code

部署与运维

查看项目

更新于 10-15 12:32

技能介绍

用途

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 为主。

限制

资料未提供该技能的收费、价格、支持平台范围、性能指标或具体使用步骤之外的实施细节,这些信息暂未提供。