这里有 28 个实时 Terraform 面试问题和答案,其中包含面试中经常问到的重要命令的列表和解释。
云技术使用的兴起为 DevOps 领域带来了很多机会。 未来,云技术将成为面试题的共同话题,而云和基础设施即代码的基础知识,IAC 工具将成为 DevOps 角色的必备。
目录
什么是 Terraform?
地形 是每个云工程师使用的最流行的 IAC 工具之一。 它允许我们在人类可读的配置文件中定义云和本地资源,从而以编程方式配置这些资源。 Terraform 最显着的特点是,与大多数 IAC 工具不同,它不限于单个云提供商。 您可以使用 Terraform 在多个云平台上同时运行您的应用程序。
如果您想知道 terraform 支持哪些技术,这里有一个小列表:
要在 DevOps 工程师、云架构师、开发人员或管理员的职业生涯中继续前进,您将不得不面对 Terraform 面试问题。 我们编制了一份顶级 terraform 面试问题列表,可以帮助您增强对 Terraform 的了解。
一般 Terraform 面试问题和答案
#1。 你对 Terraform 的理解是什么?
Terraform 是一个开源 IAC 工具,由 哈希公司. 它用于在多个云平台上创建、更新、删除和版本化您的基础架构。
#2。 为 DevOps 选择 Terraform 的原因是什么?
使用 Terraform 供应基础设施不会留下人为错误的余地,从而提高云和本地基础设施的质量、一致性和效率。 Terraform 使用 HCL 语言,它与 JSON 非常相似,易于学习和使用。 与 Cloudformation for AWS 等云提供商提供的其他 IAC 工具不同,我们可以同时将 Terraform 与多个云平台一起使用。 这避免了学习多种 IAC 工具的需要,并扩大了协作范围。
#3。 Terraform 是如何工作的?
Terraform 使用称为 Terraform 提供程序的插件与云平台上的 API 交互并提供我们的资源。 作为最终用户,terraform 工作流程包含三个步骤。
编写:将基础设施编写为代码。
计划:在应用之前预览 Terraform 将进行的更改。
应用:配置基础架构并应用更改。
#4。 Terraform 云是什么意思?
Terraform Cloud 是针对 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。 什么是哨兵?
哨兵 是一种策略即代码工具,用于强制执行 Terraform 部署的资源的标准配置。 组织可以将其用于合规性和治理目的。
#11。 您如何理解 Terraform 中的模块?
Terraform 模块是多个资源的标准容器,这些资源一起用于供应和配置资源。 例如,您可以为您的组织创建一个“VPC 模块”,用于配置标准 VPC 和其他资源,如子网和 Internet 网关。 模块可以通过公共模块注册表公开共享,也可以通过私有模块注册表私下共享。
#12。 在 terraform 中使用模块有什么好处?
Terraform 模块允许我们在资源集的顶部创建逻辑抽象。 使用模块允许我们维护和重用资源的标准配置。 它们可以进行版本控制并与您的团队成员共享,以标准方式配置资源。
#13。 什么是私有模块注册表?
私有模块注册表 Terraform Cloud 功能允许我们在整个组织中共享 Terraform 模块。
高级 Terraform 面试问题和答案
#14。 我们如何将数据从一个模块导出到另一个模块?
我们可以通过在模块配置文件中定义输出块来从模块中导出数据。 然后可以将该数据作为参数传输到目标模块。
#13。 如何在 Terraform 中定义依赖关系?
Terraform 具有内置的依赖管理。 Terraform 在资源之间有两种依赖关系——隐式依赖和显式依赖。
顾名思义,隐式依赖关系由 Terraform 自动检测。 这是在“资源 B”中使用“资源 A”的输出时。 Terraform 自动检测到只有在“资源 A”之后才需要创建“资源 B”
在两个资源内部相互依赖而不共享任何输出的情况下,可以指定显式依赖关系。 这可以通过使用配置块中的 depends_on 参数来完成。
#14。 Terraform 中的 Provisioner 是什么?
Provisioner 是 Terraform 资源,用于在资源创建或销毁过程中执行脚本。 Terraform 中有两种类型的 Provisioner:
- local-exec:在运行 Terraform 的机器上调用脚本。
- remote- exec:在远程资源创建后调用它的脚本。
Provisioner 仅用作 Terraform 中的最后手段。
#15。 Terraform 中的外部数据块是什么?
就像 local-exec 供应商一样,外部数据块可用于在运行 Terraform 的机器上运行脚本。 Provisioner 和外部数据块的区别在于,外部数据块中的脚本可以返回 JSON 格式的数据,而 Provisioner 不能返回任何输出。 需要注意的是,外部数据块也是最后的手段,如果有更好的选择,则不应使用。
#16。 使用 Terraform 云的两个人如何使用同一个工作目录创建两组不同的基础架构?
通过使用不同的工作区。 这些用户可以在两个单独的工作区中启动 Terraform 运行。 每个工作区都有自己的状态文件,因此只要资源不重叠,两个用户都可以使用相同的代码成功地配置两组不同的基础设施。
#17。 当多个工程师开始使用同一个状态文件部署基础设施时会发生什么?
Terraform 有一个非常重要的特性,叫做“状态锁定”。 此功能可确保在运行期间不对状态文件进行任何更改,并防止状态文件损坏。 请务必注意,并非所有 Terraform 后端都支持状态锁定功能。 如果需要此功能,您应该选择正确的后端。
#18。 Terraform 中的空资源是什么?
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 Management 下导入现有资源?
通过使用 terraform 导入命令。
#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 云中创建新工作空间?
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 工作。