Terraform 面试中会遇到哪些问题?

作者 Aaron Cao · 更新于

Terraform 面试中会遇到哪些问题?
问题通常分为四类:核心工作流(init、plan、apply、destroy)、状态(远程后端、锁定、敏感值)、代码结构(模块、变量、工作区、提供程序),以及漂移、apply 执行到一半失败或导入手动创建的资源等场景。面试官会评估每项选择背后的推理。

问题通常分为四类:核心工作流(init、plan、apply、destroy)、状态(远程后端、锁定、敏感值)、代码结构(模块、变量、工作区、提供程序),以及漂移、apply 执行到一半失败或导入手动创建的资源等场景。面试官会评估每项选择背后的推理。

面试官首先会考查哪些 Terraform 基础知识?

大多数 Terraform 面试会从工作流开始,然后迅速深入其底层机制。你应当能够不看笔记讲清整个生命周期:terraform init 下载提供程序并配置后端;terraform plan 将期望配置与状态文件及实际资源进行比较,然后列出将要执行的操作;terraform apply 执行该计划;terraform destroy 删除由配置管理的内容。第一个追问几乎总是为什么 plan 和 apply 要分成两个步骤。答案是为了审核和安全:在发生任何变更之前,可以检查、批准并保存计划。

  • 提供程序。用于与 AWS、Azure、Google Cloud 或 Kubernetes 等 API 通信的插件。追问:为什么要固定提供程序版本?
  • 资源和数据源。资源是 Terraform 创建并管理的对象;数据源读取并非由它管理的现有对象。
  • 变量、局部值和输出。分别对应输入、计算值和导出值。追问:如何避免秘密出现在计划输出中?
  • 依赖关系图。Terraform 根据资源之间的引用安排操作顺序;depends_on 用于声明依赖关系图无法识别的依赖。

回答时要说明每条命令会读取和写入什么。如果候选人指出 plan 是只读的,而 apply 会同时修改基础设施和状态,就已经表明其理解了这一模型。

应该准备哪些状态和模块问题?

你知道状态很重要,也猜到面试官会试探你理解的边界。这很合理,因此本节会介绍触及这一边界的问题,以及完整答案应包含的内容。

  • 状态存在哪里,为什么不存放在本地?对象存储桶、Terraform Cloud 或数据库等远程后端能够提供共享的单一事实来源。追问通常是锁定:两个人同时执行 apply 会破坏状态,因此支持锁定的后端会拒绝第二次运行。
  • 状态文件中有什么?其中包含资源属性,包括你可能认为敏感的值。应说明状态必须被视为秘密材料,进行静态加密并实施访问控制。
  • 模块。模块是一组可复用的资源,拥有自己的输入和输出。面试官会询问如何管理模块版本、如何避免模块包揽一切,以及根模块如何组合子模块。
  • 工作区与独立配置。工作区使一份配置可以对应多个状态文件。陷阱答案是把它当作完整的环境管理方案;生产环境通常应拥有独立的配置、后端和凭据,而不能只依赖切换工作区。
  • 在不销毁资源的情况下重构。重命名资源会使 Terraform 尝试销毁并重新创建它。你需要了解 moved 块和 terraform state mv 的存在及各自用途。

回答这些问题时可以遵循一项好原则:指出该实践所防止的故障。锁定可防止并发导致状态损坏;远程状态可避免不同笔记本上的状态出现分歧;固定版本可防止日常 apply 期间发生意外升级。

场景题通常会怎样提问?

高级面试会从定义转向具体情境。一个典型例子是:某位应聘金融科技公司基础设施岗位的平台工程师被告知,有人在云控制台中手动修改了安全组;下一次 plan 显示了无人预料的差异,团队因此不敢执行 apply。优秀的回答会将这种情况称为漂移,解释 plan 在刷新实际状态时已经发现了它,判断应保留还是撤销手动变更,然后更新配置以匹配实际情况,或执行 apply 以恢复声明的状态。面试官关注的是你的决策,而不是某条命令。

其他常见场景包括:apply 执行到一半失败,以及之后状态会是什么样;如何使用 terraform import 将 Terraform 出现前创建的资源纳入管理;多名工程师组成的团队应如何组织代码库、后端和 CI,使计划在拉取请求中运行,而 apply 只运行一次;变量中的秘密应改从哪里获取;提供程序升级导致资源行为发生变化。无论哪种情况,都要说明约束、选择机制,并指出其代价。

如果事先大声练习过,这些问题会更容易答好。模拟面试模式会提供带追问的场景题,其他职位和工具题库则汇总在按职位和主题分类的面试问题中。

AI 面试助手能在 Terraform 面试中提供帮助吗?

对于对话环节,可以,但需要明确说明限制。SubcueAI 的原生 macOS 和 Windows 桌面应用会采集系统音频和你的麦克风声音,并在本地浮层中显示简短建议。因此,当面试官询问状态锁定可以防范什么时,相关机制会呈现在你眼前,供你边看边解释。浏览器扩展的侧边栏可在 Chrome 或 Edge 的浏览器标签页通话中提供同样功能,但只采集会议标签页的音频。不会有机器人加入通话,也不会向会议页面注入任何内容;设置步骤见教程页面。

它不适用的情况包括:受监考的测评、录屏、公司管理的笔记本电脑,或在他人观察下编写 HCL 的现场练习。SubcueAI 创始人 Aaron Cao 将其设计目标描述为提示你回想已经掌握的知识,而不是代替你作答。因此,这款助手会依据你的简历和你自己的表达方式提供帮助。关于使用边界的如实说明汇总在可检测性专题中。

常见问题

terraform plan 和 terraform apply 有什么区别?

plan 会读取配置、状态文件和实际资源,然后列出 Terraform 将执行的操作,但不会进行任何更改。apply 会执行这些操作并更新状态。将两者分开,可以在基础设施发生变更之前审核和批准计划。

为什么带锁定功能的远程状态很重要?

远程状态为每位工程师和每条流水线提供相同的单一事实来源,锁定则可阻止两个 apply 同时运行并破坏状态。笔记本电脑上的本地状态会出现分歧,而且无法锁定。

Terraform 工作区适合用于隔离环境吗?

它们使一份配置可以对应多个状态文件,适合处理较小的差异。生产环境通常应拥有独立的配置、后端和凭据,因为仅切换工作区无法隔离访问权限或故障影响范围。

如何处理 Terraform 中的漂移?

运行 plan 查看声明状态与实际状态之间的差异,判断是否应保留手动变更,然后更新配置以匹配实际情况,或执行 apply 以恢复声明的状态。手动编辑状态应是最后的手段。

SubcueAI 能在受监考的 Terraform 测评中提供帮助吗?

不能。受监考和录制的测评不在适用范围内。它专为对话环节设计,在你说话时提示你回想自己的知识;模拟面试模式则适合提前排练。

相关问题

← 更多关于 按岗位与主题分类的面试问题