28个实时Terraform面试问题和答案
这里有28个实时Terraform面试问题和答案,列出了经常在面试中被问到的重要命令并解释了它们。
云技术的使用增加了DevOps领域的很多机会。在未来,云技术将成为面试问题中常见的话题,了解云和IAC工具的基本知识将成为DevOps角色的必备条件。
Terraform是什么?
Terraform是每个云工程师使用的最流行的IAC工具之一。它允许我们使用人类可读的配置文件定义云和本地资源,并以此自动创建这些资源。 Terraform最显著的特点是,与大多数其他IAC工具不同,它不限于单个云提供商。您可以使用Terraform在多个云平台上同时运行应用程序。
如果您想知道Terraform支持哪些技术,这里有一个小列表:
- 亚马逊网络服务(AWS)
- 谷歌云平台(GCP)
- Microsoft Azure
- IBM云
- VMware vSphere
- Serverspace
- DigitalOcean
- Oracle云基础架构
- Yandex. ClouD
- OpenStack.
为了在您的career as DevOps Engineers中前进,云架构师、开发人员或管理员,您将不得不面对Terraform面试问题。我们编制了一个顶级Terraform面试问题的列表,这应该有助于您提高对Terraform的了解。
常见Terraform面试问题和答案
#1. 您如何理解Terraform?
Terraform是由HashiCorp创建的开源IAC工具。它用于在多个云平台上创建、更新、删除和版本化基础架构。
#2. 选择Terraform进行DevOps的原因是什么?
使用Terraform提供基础架构可以消除人为错误,从而提高云和本地基础架构的质量、一致性和效率。 Terraform使用HCL语言,该语言与JSON非常相似,易于学习和使用。与亚马逊网络服务(AWS)提供的其他IAC工具(如Cloudformation)不同,我们可以同时在多个云平台上使用Terraform。这避免了需要学习多个IAC工具的需求,并改善了协作范围。
#3. Terraform如何工作?
Terraform使用称为Terraform提供者的插件与云平台的API进行交互并创建我们的资源。作为最终用户,terraform工作流程有三个步骤。
编写:将基础架构编写为代码。
计划:在应用之前预览Terraform将进行的更改。
应用:提供基础架构并应用更改。
#4. Terraform云是什么?
Terraform云是一个经过优化的远程环境,用于Terraform工作流程。它提供了工作区和状态锁定等功能,允许大型团队中的人员进行协作。
#5. 您如何理解Terraform中的状态?
作为IAC工具,Terraform应该了解其管理下的配置和基础架构的当前状态。 Terraform将此信息存储在称为状态文件的文件中。
#6. Terraform状态的好处是什么?
Terraform状态允许Terraform将真实世界的资源映射到您的配置,跟踪元数据,并在规划复杂基础架构的更改时提高性能。它是Terraform的关键组成部分。
#7. Terraform后端是什么?
Terraform后端是存储Terraform状态快照的平台。默认情况下,Terraform使用称为本地(local)的后端将状态存储为本地文件。所有其他支持的后端都是某种远程存储服务。
#8. Terraform中的提供商是什么?
在Terraform中,提供者是允许Terraform与云提供商、SaaS提供商和其他API进行交互的插件。例如,如果我们计划使用Terraform在AWS上提供基础设施,我们将需要在配置文件中声明一个AWS提供者。
#9. 谁负责维护Terraform提供者?
提供者与Terraform本身分开分发。作为Terraform用户,任何人都可以开发自己的提供者。有一些标准提供者由Hashicorp明确维护。
#10. Sentinel是什么?
Sentinel是一种作为代码的策略工具,用于强制执行Terraform部署的资源的标准配置。它可以用于组织的合规性和治理目的。
#11. 你如何理解Terraform中的模块?
Terraform模块是一种用于一起提供和配置资源的多个资源的标准容器。例如,您可以为组织创建一个名为“VPC模块”的模块,该模块提供标准的VPC和其他资源,如子网和互联网网关。模块可以通过公共模块注册表公开共享,也可以通过私有模块注册表私下共享。
#12. 在terraform中使用模块的好处是什么?
Terraform模块允许我们在资源集的顶部创建逻辑抽象。使用模块可以帮助我们维护和重复使用资源的标准配置。它们可以进行版本控制,并与团队成员共享,以便按照标准方式提供资源。
#13. 什么是私有模块注册表?
私有模块注册表是Terraform Cloud的一个功能,允许我们在组织内共享Terraform模块。
Terraform高级面试问题和答案
#14. 我们如何将数据从一个模块导出到另一个模块?
我们可以通过在模块配置文件中定义输出块来从模块导出数据。然后可以将此数据作为参数传递给目标模块。
#13. 如何在Terraform中定义依赖关系?
Terraform具有内置的依赖管理。Terraform资源之间有两种依赖关系:隐式依赖关系和显式依赖关系。
隐式依赖关系如其名称所示,由Terraform自动检测。当“资源A”的输出在“资源B”中使用时,Terraform会自动检测到只有在“资源A”之后才需要创建“资源B”。
显式依赖关系可以在两个资源在内部相互依赖但不共享任何输出的情况下指定。这可以通过在配置块中使用depends_on参数来实现。
#14. Terraform中的Provisioners是什么?
Provisioners是Terraform资源,用于作为资源创建或销毁的一部分执行脚本。Terraform中有两种类型的Provisioners:
- local-exec:在运行Terraform的机器上调用脚本。
- remote-exec:在创建远程资源后在远程资源上调用脚本。
Provisioners只应作为Terraform中的最后一种选择使用。
#15. Terraform中的外部数据块是什么?
与local-exec provisioner类似,外部数据块可以用于在运行Terraform的机器上运行脚本。外部数据块与provisioners的区别在于,外部数据块中的脚本可以返回JSON格式的数据,而provisioners无法返回任何输出。需要注意的是,外部数据块也应作为最后一种选择使用,并且在有更好的替代方案时不应使用。
#16. 在Terraform中,两个使用Terraform Cloud的人如何使用相同的工作目录创建两套不同的基础设施?
通过使用不同的工作区,这些用户可以在两个单独的工作区中启动Terraform运行。每个工作区都有自己的状态文件,因此只要资源不重叠,两个用户可以使用相同的代码成功地提供两个不同的基础架构集。
#17. 当多个工程师使用相同的状态文件部署基础架构时会发生什么?
Terraform有一个非常重要的功能叫做“状态锁定”。这个功能确保在运行过程中不对状态文件进行任何更改,并防止状态文件损坏。需要注意的是,并不是所有的Terraform后端都支持状态锁定功能。如果需要这个功能,您应该选择合适的后端。
#18. Terraform中的null资源是什么?
Terraform的null资源是一种像标准的terraform资源块一样运行的配置,但不会创建任何资源。这可能听起来像是一个奇怪和无用的资源,但在各种情况下它可以用来解决Terraform的限制。
#19. 如何在Terraform中使用相同的提供程序但不同的配置?
通过在提供程序块中使用别名参数。
#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
命令来选择一个不同的工作区。
#27. 哪个命令用于对terraform配置文件进行语法验证?
使用terraform validate
命令来验证一个配置是否在语法上有效且内部一致。
#28. 哪个命令用于在Terraform Cloud中创建新的工作区?
使用terraform workspace new
命令来创建一个新的工作区。
技术面试中其他重要的Terraform命令。
- terraform init:初始化远程后端;下载在配置中定义的提供者和远程模块。
- terraform init -upgrade:用于升级已下载的提供者。
- terraform plan:为基础设施的创建或更新生成执行计划。
- terraform apply:在用户确认后创建或更新基础设施。
- terraform apply –auto-approve:创建或更新基础设施,跳过用户批准阶段。
- terraform destroy:在用户确认后删除基础设施。
- terraform destroy –auto-approve:删除基础设施,跳过用户批准阶段。
- terraform fmt:扫描当前目录中的配置文件,并根据HCP规范的样式和格式进行格式化。
- terraform fmt –recursive:扫描当前目录以及子目录中的配置文件,并根据HCP规范的样式和格式进行格式化。
- terraform show:从状态或计划文件提供可读性强的输出。
我希望以上信息能帮助你得到一个 Terraform job。