29个常见的Terraform 面试问题

news2025/4/22 17:27:51

问题 1:假设您使用 Terraform 创建了一个 EC2 实例,创建完成后,您从状态文件中删除了该条目,那么运行 Terraform Apply 命令时会发生什么?

由于我们已从该状态文件中删除了该条目,因此 Terraform 将不再管理该资源,因此在下次执行 Apply 命令时,它将创建一个新的资源。


问题 2:Terraform 中的状态文件是什么?

状态文件是 Terraform 用来跟踪其部署的所有基础设施的文件。


问题 3:存储 Terraform 状态文件的最佳方式是什么?

存储状态文件的最佳方式是将其保存在远程后端,例如 S3 或 GitLab 管理的 Terraform State,这样当多个用户处理同一代码资源时,就不会发生重复。


问题 4:什么是 Terraform 状态锁定?

每当我们在处理任何 Terraform 代码并执行 Terraform 的规划、应用或销毁操作时,Terraform 都会锁定状态文件,以防止破坏性操作。


问题 5:什么是 Terraform 后端?

后端定义了 Terraform 存储其状态数据文件的位置。Terraform 使用持久化状态数据来跟踪其管理的资源。


问题 6:Terraform 中的插件是什么?

插件负责将 HCL 代码转换为 API 调用,并将请求发送到相应的提供商(AWS、GCP)。


问题 7:什么是空资源?

正如名称中所示,前缀为 null,这意味着该资源不存在于您的云基础设施中。
Terraform null_resource 可用于以下场景 -

  • 运行 Shell 命令
  • 您可以将其与本地配置器和远程配置器一起使用
  • 它还可以与 Terraform 模块、Terraform 计数、Terraform 数据源和本地变量一起使用
  • 它甚至可以用于输出块

问题 8:配置器有哪些类型?

远程执行:使用 Terraform 在远程服务器上运行命令
本地执行:使用 Terraform 在本地系统上运行命令


问题 9:Terraform 模块有什么用?

  • 我们可以一次性创建 Terraform 模块,并在需要时重复使用它们。
  • 为了使代码标准化
  • 为了减少代码重复
  • 模块可以进行版本控制。


问题 10:如果我使用 Terraform 创建了 EC2 和 VPC,但不幸 tfstate 文件被删除了,可以恢复吗?(该文件仅位于本地机器上,而不在 S3 或 Dynamo 数据库中)

您可以使用 Terraform import 命令导入 Terraform 创建的资源,然后它会进入状态文件。


问题 11:如果我们创建了不同的模块,例如 VPC、EC2、安全组、访问密钥和子网,那么 Terraform 如何确定应该首先部署哪个资源?

Terraform 会根据代码中的资源引用自动计算出依赖关系图。它理解资源之间的关系,并利用这些信息来确定创建或修改资源的顺序。
您可以使用depends_on关键字定义显式依赖关系。


问题12:如何在不更改逻辑的情况下删除/销毁特定资源?

  1. 使用taint和destroy命令
  2. 我们需要使用terraform taint RESOURCE_TYPE.RESOURCE_NAME命令对该资源进行污染。
  3. 污染资源后,您可以运行“destroy”命令,使用terraform destroy -target=RESOURCE_TYPE.RESOURCE_NAME命令删除受污染的资源。

问题13:如何在Terraform中重命名资源而不删除它?

我们可以使用terraform mv命令重命名资源而不删除它。


问题14:假设您使用Terraform创建了一个EC2实例,并且有人在您下次运行Terraform plan时对其进行了手动更改,会发生什么?

Terraform 状态将不匹配,Terraform 会将 EC2 实例修改为所需状态,即我们在 .tf 文件中定义的状态。


问题 15:Terraform 中的局部变量和变量有什​​么区别?

变量在 Variables.tf 文件中定义,或者使用可以覆盖的 Variables 关键字,但局部变量不能被覆盖。
因此,如果您想限制此时对变量的覆盖,则需要使用局部变量。

问题 16:解释 Terraform 的“本地”和“远程”后端配置之间的区别。


Terraform 状态文件是一个文件,用于存储 Terraform 所配置基础设施的当前状态。该状态文件可以本地存储或远程存储。本地状态文件存储在运行 Terraform 的计算机上。远程状态文件存储在远程服务器上。

a. 本地后端:本地后端将状态文件存储在运行 Terraform 的计算机的本地磁盘上。它是默认后端,无需任何额外配置。此后端适用于由单个开发人员管理基础设施的个人或小型项目。

b. 远程后端:远程后端将状态文件远程存储,通常存储在一个共享且可访问的位置。远程后端具有多种优势,包括:协作、一致性、可扩展性和安全性。

要配置远程后端,您需要指定后端类型(例如 S3、Azure 存储)、必要的凭据或访问详细信息以及其他可选设置。此配置通常存储在单独的文件中(例如 backend.tf),或作为 Terraform 命令的命令行参数提供。

总体而言,虽然本地后端适用于小型或个人项目,但在使用 Terraform 进行更大规模开发时,远程后端对于团队协作、可扩展性、一致性和增强的安全性至关重要。

问题 17:Terraform 的“target”参数是什么?它有何用途?


Terraform 中的“target”参数允许您指定单个资源或模块作为操作的目标。当您希望仅将更改应用于特定资源而不影响整个基础架构时,此功能尤其有用。例如:

terraform apply -target="aws_security_group.my_sg"
通过使用资源地址(例如本例中的安全组)指定“target”参数,Terraform 将仅将更改应用于该特定资源,从而最大限度地减少对其他资源的影响。

当您想要在大型基础设施部署中进行有针对性的更新或排查特定资源的故障时,这会非常有用。

问题 18:terraform_remote_state 数据源的用途是什么?如何使用?


Terraform 中的 terraform_remote_state 数据源支持从单独的 Terraform 状态文件共享和检索输出。它促进了不同 Terraform 配置或处理相关基础设施的团队之间的沟通。这提高了可重用性、一致性,并简化了不同 Terraform 项目之间的协作。

要使用 terraform_remote_state,您需要为远程状态定义后端配置并指定所需的输出。以下是如何在 Terraform 中使用 `terraform_remote_state` 的示例:

data "terraform_remote_state" "networking" {
  backend = "s3"
  config = {
    bucket = "example-bucket"
    key = "networking.tfstate"
    region = "us-west-2"
}
}
resource "aws_instance" "example" {
// 使用远程状态输出作为资源配置的输入
  subnet_id = data.terraform_remote_state.networking.outputs.subnet_id
// …
}


这里我们定义了一个引用名为“networking”的 terraform_remote_state 数据源的数据块。后端配置指定了 S3 存储桶、状态文件键和 AWS 区域。然后,我们可以在配置 aws_instance 等资源时访问远程状态的输出,例如 subnet_id。

问题 19:解释“不可变基础设施”的概念以及 Terraform 如何支持它。


不可变基础设施是一种架构方法,其中基础设施组件(例如服务器或容器)被视为不可变的,并且在初始部署后永远不会被修改。任何更新或更改都不是直接更改正在运行的实例,而是通过部署具有所需配置的新实例并替换旧实例来进行。

Terraform 通过多种方式支持不可变基础设施的概念:

a. 声明式基础设施即代码:Terraform 允许您使用声明式语言将基础设施定义为代码。使用 Terraform 代码,您可以指定基础设施的期望状态,而不是描述实现该状态的步骤。这种方法与不可变基础设施的理念非常契合,即定义所需配置并部署新实例以匹配该配置。

b. 基础设施版本控制:Terraform 与 Git 等版本控制系统集成,允许您跟踪和管理基础设施代码随时间的变化。此版本控制功能使您能够回滚到先前的基础设施状态或跟踪部署历史记录。

c.不可变资源管理:使用 Terraform,您可以使用资源提供程序为各种云平台配置和管理基础设施资源。Terraform 将资源视为不可变实体,可以创建、更新或销毁,但不能直接修改。

问题20: 您拥有不同的环境,并且希望在所有环境(例如开发、测试、生产等)中部署基础架构。该如何实现?

每个应用程序在部署到生产环境之前都会经历不同的环境。为了保持一致性,拥有相似的环境始终是最佳实践。复制错误并轻松修复它们非常容易。如果我们手动操作,则很难在每个环境中复制相同的基础架构。Terraform 可以轻松在多云环境中创建基础架构。
Terraform — 在多环境中创建基础架构的 4种方法
1) 使用文件夹 
3) 工作区
4) 模块
5) Terragrunt

问题21 如何限制提供程序版本?

要按照建议限制提供程序版本,请在 Terraform 块中添加一个 required_providers 块:

terraform {
  required_providers {
  aws = "~> 1.0"
   }
}


问题22. 配置提供程序版本的方法有多少种?

1. 使用 Terraform 块下的 required_providers 块

terraform {
  required_providers {
  aws = "~> 1.0"
  }
}


2. 也可以使用提供程序块中的版本参数指定提供程序版本约束

provider {
  version= "1.0"
}


问题23. 如何配置多个提供程序实例?

别名
您可以选择为同一个提供程序定义多个配置,并根据每个资源或每个模块选择使用哪个配置。


问题24. 为什么需要多个提供程序实例?

一些示例场景:

a.一个云平台的多个区域
b. 针对多个 Docker 主机
c. 多个 Consul 主机等


问题25. 如何定义多个提供程序配置?

要为给定提供程序包含多个配置,请包含具有相同提供程序名称的多个提供程序块,但将 alias 元参数设置为每个附加配置使用的别名。

# 默认提供程序配置

provider "aws" {
  region = "us-east-1"
}


# 西海岸区域的附加提供程序配置

provider "aws" {
  alias = "west"
  region = "us-west-2"
}


问题26. 如何选择备用提供程序?

默认情况下,资源使用从资源类型名称的第一个单词推断出的默认提供程序配置。例如,除非另有说明,否则 aws_instance 类型的资源将使用默认(未使用别名的)aws 提供程序配置。

resource "aws_instance" "foo" {
  provider = aws.west
# ...

问题27. 什么是提供程序插件缓存?

默认情况下,terraform init 会将插件下载到工作目录的子目录中,以便每个工作目录都是独立的。因此,如果您有多个使用同一提供程序的配置,则每个配置都会下载其插件的单独副本。鉴于提供程序插件可能非常大(大约数百兆字节),这种默认行为对于那些网络连接速度较慢或流量计费的用户来说可能不方便。因此,Terraform 可以选择使用本地目录作为共享插件缓存,这样每个不同的插件二进制文件只需下载一次。


问题28. 使用插件缓存时,缓存目录最终会变得越来越大,包含不同的版本。谁负责清理它?

用户
一旦插件被放入插件缓存中,Terraform 就永远不会自行删除它。随着时间的推移,随着插件的升级,缓存目录可能会变得很大,包含多个未使用的版本,这些版本必须手动删除。


问题29. 如果不同的团队使用相同的配置,如何确保文件格式一致?

terraform fmt

此命令会自动更新当前目录中的配置,以提高可读性和一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习-08-推荐算法-案例

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中关联规则 参考 机器学习(三):Apriori算法(算法精讲) Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 23张图&#x…

LLM中的N-Gram、TF-IDF和Word embedding

文章目录 1. N-Gram和TF-IDF:通俗易懂的解析1.1 N-Gram:让AI学会"猜词"的技术1.1.1 基本概念1.1.2 工作原理1.1.3 常见类型1.1.4 应用场景1.1.5 优缺点 1.2 TF-IDF:衡量词语重要性的尺子1.2.1 基本概念1.2.2 计算公式1.2.3 为什么需…

Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取

关于Office系列文件文字内容的提取 本文主要通过接口的方式获取Office文件和PDF、OFD文件的文字内容。适用于需要获取Word、OFD、PDF、PPT等文件内容的提取实现。例如在线文字统计以及论文文字内容的提取。 一、提取Word及WPS文档的文字内容。 支持以下文件格式: …

HXBC编译相关错误

0、Keil MDK报错:Browse information of one or more files is not available----解决方法: 1、使用cubemax生成的工程中,某些引脚自定义了的,是在main.h中,要记得移植。 注意:cubemax生成的spi.c后,在移植的时候,注意hal_driver下面要对应增加hal_stm32H7xxxspi.c …

运维概述(linux 系统)

1、运维的基本概念 2、企业的运行模式 3、计算机硬件 运维概述 运维岗位的定义 在技术人员(写代码的)之间,一致对运维有一个开玩笑的认知:运维就是修电脑的、装网线的、背锅的岗位。 IT运维管理是指为了保障企业IT系统及网络…

C语言 数据结构 【堆】动态模拟实现,堆排序,TOP-K问题

引言 堆的各个接口的实现(以代码注释为主),实现堆排序,解决经典问题:TOP-K问题 一、堆的概念与结构 堆 具有以下性质 • 堆中某个结点的值总是不大于或不小于其父结点的值; • 堆总是一棵完全二叉树。 二…

模型加载常见问题

safetensors_rust.SafetensorError: Error while deserializing header: HeaderTooLarge 问题代码: model AutoModelForVision2Seq.from_pretrained( "/data-nvme/yang/Qwen2.5-VL-32B-Instruct", trust_remote_codeTrue, torch_dtypetorc…

PyTorch 深度学习实战(37):分布式训练(DP/DDP/Deepspeed)实战

在上一篇文章中,我们探讨了混合精度训练与梯度缩放技术。本文将深入介绍分布式训练的三种主流方法:Data Parallel (DP)、Distributed Data Parallel (DDP) 和 DeepSpeed,帮助您掌握大规模模型训练的关键技术。我们将使用PyTorch在CIFAR-10分类…

微信小程序通过mqtt控制esp32

目录 1.注册巴法云 2.设备连接mqtt 3.微信小程序 备注 本文esp32用的是MicroPython固件,MQTT服务用的是巴法云。 本文参考巴法云官方教程:https://bemfa.blog.csdn.net/article/details/115282152 1.注册巴法云 注册登陆并新建一个topic&#xff…

1.Vue3 - 创建Vue3工程

目录 一、 基于vue-cli 脚手架二、基于vite 推荐2.1 介绍2.2 创建项目2.3 文件介绍2.3.1 extensions.json2.3.2 脚手架的根目录2.3.3 主要文件 src2.3.3.1 main.js2.3.3.2 App.vue 组件2.3.3.3 conponents 2.3.4 env.d.ts2.3.5 index.html 入口文件2.3.6 package2.3.7 tsconfig…

AI编写的“黑科技风格、自动刷新”的看板页面

以下的 index.html 、 script.js 和 styles.css 文件&#xff0c;实现一个具有黑科技风格、自动刷新的能源管理系统实时监控看板。 html页面 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&q…

11-DevOps-Jenkins Pipeline流水线作业

前面已经完成了&#xff0c;通过在Jenkins中创建自由风格的工程&#xff0c;在界面上的配置&#xff0c;完成了发布、构建的过程。 这种方式的缺点就是如果要在另一台机器上进行同样的配置&#xff0c;需要一项一项去填写&#xff0c;不方便迁移&#xff0c;操作比较麻烦。 解…

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库&#xff08;RDBMS&#xff09;**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…

Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍

Jumpserver今日喜提160星&#xff0c;总星飙至2.6万&#xff01;这个开源堡垒机有三大亮点&#xff1a;① 像哆啦A梦的口袋&#xff0c;支持多云服务器一站式管理&#xff1b;② 安全审计功能超硬核&#xff0c;操作记录随时可回放&#xff1b;③ 网页终端无需装插件&#xff0…

第七届传智杯全国IT技能大赛程序设计赛道 国赛(总决赛)—— (B组)题解

1.小苯的木棍切割 【解析】首先我们先对数列排序&#xff0c;找到其中最小的数&#xff0c;那么我们就保证了对于任意一个第i1个的值都会大于第i个的值那么第i2个的值也比第i个大&#xff0c;那么我们第i1次切木棍的时候一定会当第i个的值就变为了0的&#xff0c;第i1减去的应该…

Netty前置基础知识之BIO、NIO以及AIO理论详细解析和实战案例

前言 Netty是什么&#xff1f; Netty 是一个基于 Java 的 ​高性能异步事件驱动网络应用框架&#xff0c;主要用于快速开发可维护的协议服务器和客户端。它简化了网络编程的复杂性&#xff0c;特别适合构建需要处理海量并发连接、低延迟和高吞吐量的分布式系统。 1)Netty 是…

开源身份和访问管理(IAM)解决方案:Keycloak

一、Keycloak介绍 1、什么是 Keycloak&#xff1f; Keycloak 是一个开源的身份和访问管理&#xff08;Identity and Access Management - IAM&#xff09;解决方案。它旨在为现代应用程序和服务提供安全保障&#xff0c;简化身份验证和授权过程。Keycloak 提供了集中式的用户…

深入理解 TCP 协议 | 流量、拥塞及错误控制机制

注&#xff1a;本文为 “TCP 协议” 相关文章合辑。 原文为繁体&#xff0c;注意术语描述差异。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 作者在不同的文章中互相引用其不同文章&#xff0c;一并汇总于此。 可从本文右侧目录直达本文主题相关的部分&#xff…

VSCode远程图形化GDB

VSCode远程图形化GDB 摘要一、安装VSCode1、使用.exe安装包安装VSCode2、VSCode 插件安装3、VSCode建立远程连接 二、core dump找bug1、开启core文件2、永久生效的方法3、编写测试程序4、运行结果5、查看core段错误位置6、在程序中开启core dump并二者core文件大小 三、gdbserv…

软件工程师中级考试-上午知识点总结(上)

我总结的这些都是每年的考点&#xff0c;必须要记下来的。 1. 计算机系统基础 1.1 码 符号位0表示正数&#xff0c;符号位1表示负数。补码&#xff1a;简化运算部件的设计&#xff0c;最适合进行数字加减运算。移码&#xff1a;与前几种不同&#xff0c;1表示&#xff0c;0表…