28 个实时 Terraform 面试问题和答案

目录

本文列出了 28 个关于 Terraform 的实时面试问题及答案,并深入探讨了面试中常见的重要命令及其作用。

随着云计算技术的飞速发展,DevOps 领域迎来了前所未有的机遇。未来,云技术将成为面试的常客,而云计算和基础设施即代码(IaC)的基础知识,以及 IaC 工具的运用,将是 DevOps 职位不可或缺的技能。

什么是 Terraform?

Terraform 是目前云工程师们广泛使用的 IaC 工具之一。它允许用户通过易于理解的配置文件来定义云端和本地资源,并以编程的方式进行配置。Terraform 的独特之处在于,它不受限于特定的云服务提供商,这意味着您可以在多个云平台上同时运行您的应用程序。

以下列出一些 Terraform 支持的技术:

对于希望在 DevOps 工程师、云架构师、开发人员或管理员等职业道路上取得进步的从业者来说,应对 Terraform 的面试问题至关重要。为此,我们整理了一份热门 Terraform 面试问题清单,希望能帮助您加深对 Terraform 的理解。

Terraform 常见面试问题及答案

#1. 你对 Terraform 的理解是什么?

Terraform 是一个开源的 IaC 工具,由 HashiCorp 开发。它主要用于在多个云平台上创建、更新、删除和管理基础设施的版本。

#2. 为什么选择 Terraform 用于 DevOps?

使用 Terraform 配置基础设施可以有效地避免人为错误,从而提高云和本地基础设施的质量、一致性和效率。Terraform 使用 HCL 语言,这是一种与 JSON 非常相似的语言,学习和使用都非常便捷。与 AWS CloudFormation 等云服务提供商提供的其他 IaC 工具不同,Terraform 可以同时与多个云平台协作,从而避免了学习多种 IaC 工具的必要,并扩大了协作范围。

#3. Terraform 的工作原理是什么?

Terraform 通过名为 Terraform Provider 的插件与云平台上的 API 进行交互,并配置我们的资源。作为最终用户,Terraform 的工作流程包括三个主要步骤:

编写: 将基础设施编写为代码。

计划: 在应用配置之前,预览 Terraform 将要进行的更改。

应用: 配置基础设施并应用更改。

#4. Terraform Cloud 是什么?

Terraform Cloud 是一个专门为 Terraform 工作流程优化的远程环境。它提供了工作区和状态锁定等功能,方便大型团队进行协作。

#5. 你如何理解 Terraform 中的状态?

作为 IaC 工具,Terraform 需要了解其所管理的基础设施和配置的当前状态。Terraform 将此信息存储在一个名为状态文件的文件中。

#6. Terraform 状态的优势是什么?

Terraform 状态允许 Terraform 将现实世界的资源映射到您的配置,跟踪元数据,并在计划复杂基础设施的更改时提高性能。它是 Terraform 的关键组成部分。

#7. 你如何理解 Terraform 后端?

Terraform 后端是存储 Terraform 状态快照的平台。默认情况下,Terraform 使用名为 local 的后端将状态存储为本地磁盘上的文件。其他所有受支持的后端都属于某种远程存储服务。

#8. Terraform 中的 Provider 是什么?

Terraform 中的 Provider 是一种插件,它允许 Terraform 与云服务提供商、SaaS 提供商和其他 API 进行交互。例如,如果计划使用 Terraform 在 AWS 上配置基础设施,则需要在配置文件中声明一个 AWS Provider。

#9. 谁维护 Terraform Provider?

Provider 的发布和维护与 Terraform 本身是分开的。作为 Terraform 用户,任何人都可以开发自己的 Provider。Hashicorp 官方维护了一些标准的 Provider。

#10. 什么是 Sentinel?

Sentinel 是一种策略即代码工具,用于强制执行 Terraform 部署的资源的标准配置。企业可以使用它来实现合规性和治理目标。

#11. 你如何理解 Terraform 中的模块?

Terraform 模块是多个资源的集合,这些资源共同用于配置和供应资源。例如,您可以为组织创建一个“VPC 模块”,用于配置标准的 VPC 和子网、Internet 网关等其他资源。模块可以通过公共模块注册表公开共享,也可以通过私有模块注册表私下共享。

#12. 在 Terraform 中使用模块的好处是什么?

Terraform 模块允许我们在资源集之上创建逻辑抽象。通过使用模块,我们可以维护和重用资源的标准配置。它们可以进行版本控制,并与您的团队成员共享,以便以标准方式配置资源。

#13. 什么是私有模块注册表?

私有模块注册表是 Terraform Cloud 的一项功能,它允许我们在组织内部共享 Terraform 模块。

Terraform 高级面试问题及答案

#14. 我们如何将数据从一个模块导出到另一个模块?

我们可以在模块配置文件中定义输出块,从而从模块中导出数据。然后,可以将该数据作为参数传递给目标模块。

#13. 如何在 Terraform 中定义依赖关系?

Terraform 具有内置的依赖管理机制。Terraform 中存在两种资源之间的依赖关系:隐式依赖和显式依赖。

顾名思义,隐式依赖关系由 Terraform 自动检测。这种情况通常发生在“资源 B”使用“资源 A”的输出时。Terraform 会自动识别到“资源 B”必须在“资源 A”创建之后才能创建。

当两个资源之间存在内部相互依赖关系,但没有共享任何输出时,则需要指定显式依赖关系。这可以通过在配置块中使用 `depends_on` 参数来完成。

#14. Terraform 中的 Provisioner 是什么?

Provisioner 是 Terraform 资源,用于在资源创建或销毁过程中执行脚本。Terraform 中有两种类型的 Provisioner:

  • local-exec: 在运行 Terraform 的机器上调用脚本。
  • remote-exec: 在远程资源创建后调用其上的脚本。

Provisioner 通常仅作为 Terraform 中的最后手段使用。

#15. Terraform 中的 external 数据块是什么?

local-exec Provisioner 类似,external 数据块也可以用于在运行 Terraform 的机器上执行脚本。Provisioner 和 external 数据块的区别在于,external 数据块中的脚本可以返回 JSON 格式的数据,而 Provisioner 不能返回任何输出。需要注意的是,external 数据块也属于最后手段,如果存在更好的替代方案,则不应使用。

#16. 如何在 Terraform Cloud 中,两个用户使用同一工作目录创建两组不同的基础设施?

通过使用不同的工作区。这些用户可以在两个独立的工作区中启动 Terraform 运行。每个工作区都有自己的状态文件,因此只要资源不重叠,两个用户都可以使用相同的代码成功地配置两组不同的基础设施。

#17. 当多个工程师开始使用同一状态文件部署基础设施时会发生什么?

Terraform 具有一个非常重要的特性,称为“状态锁定”。此功能可以确保在运行期间不会对状态文件进行任何更改,并防止状态文件损坏。需要特别注意的是,并非所有的 Terraform 后端都支持状态锁定功能。如果需要此功能,您应该选择合适的后端。

#18. Terraform 中的 null 资源是什么?

Terraform 的 null 资源是一种行为与标准 Terraform 资源块类似,但不创建任何实际资源的配置。这似乎是一个奇怪且无用的资源,但在各种情况下,它都可以用来解决 Terraform 中的一些限制。

#19. 如何在 Terraform 中使用具有不同配置的同一个 Provider?

通过在 Provider 块中使用 `alias` 参数。

#20. 如果你有一个不包含任何资源的 Terraform 配置文件,当你运行 `terraform apply` 命令时会发生什么?

Terraform 将会销毁所有资源。启动一个空的 `terraform apply` 运行,与启动一个 `terraform destroy` 运行的结果完全相同。

#21. 如果资源在 Terraform 中成功创建,但在配置期间失败会发生什么?

尽管这种情况很少发生,但是当发生这种情况时,该资源会被标记为“已污染”,并且可以通过重新启动 Terraform 运行来重新创建该资源。

#22. TF_LOG 变量的哪个值提供了最详细的日志记录?

TRACE 是最详细的,也是 TF_LOG 变量的默认值。

#23. 如何将现有资源导入到 Terraform 管理?

可以使用 `terraform import` 命令来实现。

#24. 可以使用哪个命令来预览 Terraform 的执行计划?

可以使用 `terraform plan` 命令来生成 Terraform 将对基础设施进行的更改的执行计划。

#25. 可以使用哪个命令来协调 Terraform 状态与实际的现实世界基础设施?

可以使用 `terraform apply -refresh-only` 命令来协调 Terraform 状态与实际的现实世界基础设施。它是已被弃用的 `terraform refresh` 命令的新替代方案。

#26. 在使用 Terraform Cloud 时,可以使用哪个命令来在工作区之间切换?

可以使用 `terraform workspace select <workspace-name>` 命令来选择不同的工作区。

#27. 哪个命令用于对 Terraform 配置文件执行语法验证?

可以使用 `terraform validate` 命令来验证配置文件的语法是否有效且内部一致。

#28. 哪个命令用于在 Terraform Cloud 中创建新工作区?

可以使用 `terraform workspace new <workspace-name>` 命令来创建新的工作区。

其他一些在技术面试中重要的 Terraform 命令:

  • terraform init: 初始化远程后端;下载配置文件中定义的 Provider 和远程模块。
  • terraform init -upgrade: 用于升级现有已下载的 Provider。
  • terraform plan: 生成基础设施创建或更新的执行计划。
  • terraform apply: 在请求用户确认后创建或更新基础设施。
  • terraform apply –auto-approve: 创建或更新基础设施;跳过用户批准步骤。
  • terraform destroy: 在请求用户确认后删除基础设施。
  • terraform destroy –auto-approve: 删除基础设施;跳过用户批准步骤。
  • terraform fmt: 扫描当前目录以查找配置文件,并根据 HCP 规范样式和格式对其进行格式化。
  • terraform fmt –recursive: 扫描当前目录以及配置文件的子目录,并根据 HCP 规范样式和格式对其进行格式化。
  • terraform show: 从状态或计划文件中提供人类可读的输出。

希望以上信息能够帮助您在 Terraform 求职面试中取得成功。