跳至主要内容

2026 年最全 21 道 Terraform 面试题与答案

了解 2026 年的 21 道 Terraform 面试题与答案,从基础 IaC 概念到高级 CI/CD 集成,并已根据 Terraform 1.0+ 的最佳实践更新。
Marie Fayard
Marie Fayard

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

我第一次使用 Terraform 时是持怀疑态度的。在代码编辑器里更新基础设施而不是点云控制台的按钮,这感觉非常违和,而且当时我也不明白这样做的好处。但因为是公司政策,我就照做了。直到有一天,我被要求搭建一个全新的开发环境。我清楚地记得去问团队里的高级开发,我是不是漏了什么,因为我只花了 10 分钟。他检查了我的工作,笑了笑,确认没错,就是这么简单。

难怪 Terraform 会在行业中被广泛采用。随着云计算的快速发展,全球团队都在转向基础设施即代码(IaC)来管理日益复杂的基础设施。Terraform 提供一致、可重复的基础设施管理方式,让它成为各行业公司的首选。

在 Terraform 面试中,考察的不只是您会多少命令,更是您如何有效使用 Terraform 融入现代 DevOps 流程并解决真实世界的问题。

沟通能力在这里至关重要。正如近期一档关于技术岗位的 DataFramed 播客所讨论的,真正的精通在于适应力:

您需要能够把任何类型的洞见既讲得让一个六岁小孩都能听懂,又能让我,甚至技术更深的人也满意。如果您真的精通一件事,您既能把它讲得非常浅显,也能讲得非常复杂,坦白说,只有那些技术水平非常非常高的人才能听明白。

Mo Chen, Data & Analytics Manager at NatWest Group

保持这种心态对备考至关重要。本文将带您走过一些最常见的 Terraform 面试题。我把它们分为基础、进阶和高级三个类别——无论您处于职业生涯的哪个阶段,都能在这里找到适合您的内容!

在开始之前:如果您完全是云计算新手,我建议先学习我们的云计算入门课程。课程拆解云计算基础,解释可扩展性和延迟等关键术语,并介绍来自 AWS 等提供商的云工具优势。Terraform 的核心就是与云基础设施打交道,因此请先确保您对这些概念有理论与实践上的了解!

要点速览

  • Terraform 是 HashiCorp 的开源 IaC 工具,使用 HCL 来配置云基础设施

  • 五个命令覆盖大多数日常工作:init、plan、apply、destroy 和 validate

  • 状态文件跟踪真实资源;将其远程存储(S3 + DynamoDB 或 Terraform Cloud)以便团队协作

  • terraform taint 在 Terraform 1.0 中被移除;使用 terraform apply -replace 强制重建资源

  • 高级面试问题涵盖模块、工作空间、状态锁、CI/CD 集成和机密管理

基础 Terraform 面试题

这些问题聚焦 Terraform 是什么以及它如何工作。如果您从未使用过 Terraform,或者面试官不确定您的水平、想从基础开始,您很可能会遇到这些问题。

1. 什么是 Terraform?它的主要用途是什么?

Terraform 是 HashiCorp 创建的开源基础设施即代码(IaC)工具。它使用一种名为 HCL(HashiCorp 配置语言)的声明式配置语言来定义和管理云端及本地基础设施。Terraform 能自动化基础设施的配置、更新和版本管理,从而减少配置漂移和手动错误。

2. Terraform 与 CloudFormation 或 Ansible 等其他 IaC 工具有何不同?

Terraform 对比 CloudFormation:Terraform 与云无关,意味着它可以跨多个提供商(AWS、Azure、GCP 等)管理基础设施,而 AWS CloudFormation 仅限于 AWS。Terraform 在语法灵活性和状态管理方面也更具优势。

Terraform 对比 Ansible:Ansible 主要是配置管理工具(管理软件、包和操作系统配置),而 Terraform 专注于以声明式方式配置和管理基础设施资源。

3. 关键的 Terraform 命令有哪些?它们的作用是什么?

  • terraform init —— 初始化 Terraform 项目并下载所需的提供商插件。

  • terraform plan —— 生成执行计划,展示 Terraform 将应用的变更。

  • terraform apply —— 应用计划的变更并创建资源。

  • terraform destroy —— 删除所有受管资源。

  • terraform validate —— 检查 Terraform 配置文件的语法错误。

  • terraform fmt —— 将 .tf 文件格式化为规范的 HCL 风格。每次提交前都应运行。

  • terraform output —— 显示状态文件中的输出值,便于将资源 ID 或 IP 地址传递给其他脚本。

4. 什么是 Terraform 状态文件?

Terraform 维护一个状态文件(terraform.tfstate)来跟踪其管理的真实基础设施。状态文件帮助 Terraform 理解资源的当前状态、检测漂移并高效地应用变更。它对协作至关重要,但由于包含敏感数据,应安全存储。

5. 什么是 Terraform 提供商(provider)?为什么它们很重要?

Terraform 的提供商是插件,使其能够与云平台、SaaS 服务和其他 API 交互。每个提供商(如 AWS、Azure、Kubernetes)都定义了 Terraform 可管理的资源。没有提供商,Terraform 将不知道如何创建或配置基础设施资源。

如果您想了解更多 Terraform 的工作原理,请查看这份初学者指南。我在文中更详细地介绍了 Terraform 的关键组件,并讨论了该工具的优缺点。还有一个小教程,带您在 AWS 上开始配置基础设施。

进阶 Terraform 面试题

本节将更深入探讨 Terraform 的工作流、配置实践,以及在真实项目中管理状态与资源的策略。要回答这些问题,您需要相当多的 Terraform 实战经验,尤其是在被要求举具体例子时。

6. 什么是 Terraform 模块?

Terraform 模块是可复用的组件,通过将相关资源分组来组织基础设施代码。它们提高可维护性,使团队能在项目间复用代码,并简化部署。

一个模块可以简单到是包含 .tf 文件和可选 variables.tf 文件的目录!

如需上手示例,我们的Terraform 搭配 Docker 教程演示了如何构建可复用模块来配置容器化基础设施。

7. Terraform 如何管理远程状态?

默认情况下,Terraform 将状态存储在本地,但为了协作,它支持远程后端(AWS 的 S3 + DynamoDB、Google Cloud 的 GCS,或 Terraform Cloud)。远程状态可实现:

  • 为多名团队成员提供共享访问。
  • 状态锁定,避免并发修改冲突。
  • 通过加密和受控访问获得更好的安全性。

8. 什么是 Terraform 工作空间?何时应使用?

Terraform 工作空间允许您在相同配置下维护独立的状态文件。在不重复代码的情况下管理多个环境(如开发、预发、生产)时非常有用。

工作空间适合简单的环境隔离,但在复杂的多账户场景中会变得难以管理。

Terraform workspaces

来源:DevOps Mojo

9. Terraform 如何导入现有基础设施?有哪些限制?

Terraform 可使用 terraform import CLI 命令将现有资源导入其状态,或者自 Terraform 1.5 起,直接在 HCL 中使用 import 块。CLI 命令会更新状态,但仍需您手动编写相应的 .tf 配置。从 Terraform 1.6+ 开始,运行 terraform plan -generate-config-out=generated.tf 可为您草拟该配置,减少手动对齐工作。

该导入功能存在一些限制:

  • 复杂架构需要手动进行配置对齐。
  • 部分资源类型不支持导入。
  • 如果导入的资源配置与实际基础设施不一致,存在漂移风险。

10. 什么是 Terraform provisioner?何时应使用?

Provisioner 会在资源创建后执行脚本或命令,常用于配置虚拟机或安装软件等任务。

Provisioner 分为两类:

  • 本地 provisioner:在执行 Terraform 的机器上运行。
  • 远程 provisioner:通过 SSH 或 WinRM 在目标资源上运行。

由于 provisioner 会引入依赖并削弱 Terraform 的声明式特性,应谨慎使用。可选方案是在配置层使用 Ansible 或 cloud-init 等配置管理工具。

Terraform plugins

来源: Opcito

11. 什么是 Terraform 中的漂移检测?如何应对?

漂移检测指实际基础设施状态与 Terraform 配置中定义的状态发生偏离。这通常发生在 Terraform 之外进行手动变更时,例如在云提供商控制台或其他自动化工具中进行了更新。

Terraform 可通过运行 terraform plan 来检测漂移,它会比较状态文件中的当前状态与真实基础设施。

如果发现漂移,您应当撤销手动变更以匹配 Terraform 配置,或更新配置以反映新的期望状态,然后运行 terraform apply 将基础设施与配置重新对齐。

12. 如何使用 Terraform 为多实例部署的应用实现滚动更新?

滚动更新可以让您逐步更新基础设施,以减少停机时间,并确保在更新期间始终有一部分应用实例可用。在滚动更新场景中,Terraform 会创建资源的新实例,等待其通过健康检查变为健康状态,然后逐步替换旧实例。

在实践中,您可以在 Terraform 中定义不可变基础设施,并在资源定义(如 EC2 实例、负载均衡器)中使用 count 或 for_each 来实现。

13. 您如何在 Terraform 中处理资源依赖?隐式与显式依赖的作用是什么?

在 Terraform 中,资源依赖通过其构建的依赖图机制自动处理。隐式依赖在一个资源在配置中引用另一个资源时产生(例如在 aws_instance 中引用 aws_security_group),Terraform 会自动推断依赖顺序。

显式依赖用于处理 Terraform 无法自动推断顺序的边界情况。通过使用 depends_on 参数创建,强制 Terraform 按特定顺序执行,即使资源之间没有直接引用关系。

Terraform graph command output

来源: HashiCorp

高级 Terraform 面试题

在高级阶段,面试官希望看到您使用 Terraform 管理大规模基础设施的能力。问题可能涉及多云部署、团队协作以及自动化挑战。这是展示您经验与技能的好时机,请大胆谈谈您做过的项目并给出实际范例!

14. 如何用 Terraform 管理复杂的多云部署?

管理多云环境需要在同一份配置中处理多个提供商。Terraform 允许您在同一个 main.tf 文件中配置来自不同云提供商(如 AWS、Azure、Google Cloud)的资源,通过分别指定提供商并使用各自的资源类型。

您可以使用提供商别名来管理同一提供商的多个实例(例如不同区域的 AWS),并通过模块整合通用配置,避免重复。同时要谨慎管理跨云依赖,因为不同云中的资源可能不存在直接关系。

15. Terraform 中的 taint 和 untaint 命令是什么?它们被什么取代了?

terraform taint 和 terraform untaint 在 Terraform 0.15.2 中被弃用,并在 1.0 中完全移除。它们用于在下次 apply 时强制重建资源。您可能仍会在旧代码库中看到它们,但在任何现代 Terraform 版本中都已不可用。

现代替代方式是 terraform apply -replace="resource.address"。例如要强制重建某个 EC2 实例:terraform apply -replace="aws_instance.web"。这在行内即可实现同样效果,无需单独修改状态。不再需要 untaint;只需在没有 -replace 标志的情况下运行 apply 即可。

16. 什么是 Terraform Cloud 与 Terraform Enterprise?它们有何主要区别?

Terraform Cloud 是 HashiCorp 提供的 SaaS 服务,具备协作功能,如远程状态管理、工作空间管理、版本控制集成和策略管控。适合中小团队。

Terraform Enterprise 是自托管版本,提供更高级的功能,如私有模块注册表、更细粒度的访问控制和更高级的安全特性,包括本地化部署。

简而言之,Terraform Cloud 由 HashiCorp 托管维护;Terraform Enterprise 由组织自托管,赋予其对基础设施的完全控制权。

Terraform Cloud vs Entreprise

来源:Google Cloud

17. 在大型团队中使用 Terraform 时,如何管理状态锁和并发问题?

Terraform 的状态锁定可阻止两位用户同时修改同一状态,从而避免状态文件损坏。

Terraform Cloud 和 Enterprise 使用内置后端自动处理状态锁定。

对于 S3 + DynamoDB 等远程后端,Terraform 使用 DynamoDB 进行状态锁定,防止并发问题。

18. 什么是零停机部署?Terraform 如何实现?

零停机部署指在不影响服务可用性的前提下应用基础设施变更。Terraform 可通过以下策略实现:

  • 蓝绿部署: 使用两套相同环境(蓝与绿),在它们之间切换流量以无停机地部署变更。
  • 滚动更新: 逐步将变更应用于一小部分实例,其他实例在更新期间保持可用。

这些是云架构中的常见策略,Terraform 提供的特性可助力实现。但要完全落地零停机,通常还需要负载均衡器等额外工具。

19. 您如何在 Terraform 中处理机密管理?最佳实践是什么?

Terraform 本身不管理机密,但可与外部机密管理工具集成。例如,您可以使用:

  • HashiCorp Vault:Terraform 内置支持从 Vault 在运行时检索机密(如 API 密钥或密码),确保它们不会被硬编码在配置文件中。
  • 环境变量:对敏感值使用环境变量进行传递。
  • 启用加密的远程后端:将状态文件存储在启用加密的远程后端,防止未经授权访问敏感数据。
  • 使用 sensitive 参数:将输出和变量标记为 sensitive,避免它们出现在 plan/apply 日志中。

20. 何时需要自定义 Terraform 提供商?如何实现?

当您需要管理 Terraform 尚不原生支持的资源或服务时,就需要自定义提供商。它们使用 Go 实现,需编写与未被现有提供商覆盖的 API 或服务交互的自定义函数,例如内部 API、小众云服务或专有技术。

Terraform 提供了 Terraform Plugin SDK 来帮助构建提供商,但您需要处理认证、CRUD(创建、读取、更新、删除)操作,以及目标 API 的特定配置。

21. 如何将 Terraform 集成进 CI/CD 流水线?

CI/CD 集成是 DevOps 岗位的高频高级面试话题。标准模式是在拉取请求上运行 terraform plan,让评审者先查看基础设施差异;合并到目标分支后再运行 terraform apply。

在 GitHub Actions 中,您可以使用 hashicorp/setup-terraform 动作,将云凭据存放在代码库机密里,并在工作流中分别定义 plan 与 apply 步骤。对生产环境,在 apply 前加一道人工审批关是常见做法。类似模式也适用于 GitLab CI 和 Jenkins。面试官想听到的关键点是:始终将 plan(只读、安全,可在每个 PR 上运行)与 apply(可能具破坏性)分离,且从不在没有先前 plan 输出的情况下直接运行 apply。

想了解 CI/CD 流水线的实战用法,我们的 Azure DevOps 教程涵盖了可直接迁移到 Terraform 工作流的流水线基础。

结语

希望这篇文章能为您拿下 Terraform 面试提供所需的知识与信心!

如果您需要更多练习,请查看 HashiCorp Terraform 教程,完成常见的资源配置场景。您还可以浏览我们的2026 年 14 款必备数据工程工具,了解 Terraform 在更广的数据工程工具链中的定位,或查看我们的数据工程面试题,为更广泛的招聘流程做好准备。

Terraform 常见问题

面试需要掌握多深的 Terraform 知识?

视岗位而定。初级岗位掌握提供商、状态管理和资源等基础概念即可;中级岗位需要了解模块、工作空间和远程状态;高级岗位则期望精通状态锁、CI/CD 集成以及复杂问题的调试。

我需要背熟 Terraform 命令参加面试吗?

掌握诸如 terraform init、plan、apply 等关键命令固然有用,但面试官更关注您如何应用 Terraform 概念。他们可能会让您描述如何为真实场景设计 Terraform 结构,而不是仅仅罗列命令。

拿到工作,Terraform 认证有多重要?

Terraform 认证(如 HashiCorp Certified: Terraform Associate)有助于证明您的知识储备,但对大多数岗位并非必需。相比单一认证,真实项目中的 Terraform 实战经验更具分量。不过,如果您是新手,考取认证也是一个不错的学习途径。

Terraform 比 Pulumi 更好吗?

Terraform 与 Pulumi 解决的是同一类问题,但路径不同。Terraform 使用 HCL,这是一种为此目的而生的声明式语言,易读但在逻辑方面受限。Pulumi 则允许使用 TypeScript、Python、Go 或 C# 编写基础设施代码,更灵活,但对不熟悉 IaC 的团队来说上手曲线更陡。

对于大多数刚开始采用 IaC 的组织,Terraform 是务实之选:社区更大、提供商支持更多,而且多数 DevOps 招聘在 JD 中会直指其名。如果您的团队已经使用 Pulumi 支持的语言并且需要 HCL 难以优雅表达的复杂条件逻辑,那么值得考虑 Pulumi。

Marie Fayard

作者

Marie Fayard

我是一名具有产品思维的技术负责人,专注于帮助早期初创公司从首个原型成长到实现产品与市场匹配,并持续向前发展。我对人们如何使用技术充满好奇,热爱与创始人及跨职能团队紧密合作,将大胆的想法变为现实。不在打造产品的时候,我会在世界的新角落寻找灵感,或在瑜伽馆放松减压。

主题