我尝试创建了一个Terraform面试问题集

首先

我制作了一个问题集,可以在面试时学习有关Terraform的实践基础知识和最佳实践。由于采用面试形式,示例代码的描述较少,可能会有些难以理解的部分,但对整理Terraform的基本概念非常有帮助。请务必在面试准备和知识确认时使用。

请留意的重点事项

    • 本問題集はTerraformのv1.5.xを基準に作成されています。

 

    • 本問題集は、Terraformにおける実践的な基礎知識やベストプラクティスなどを学ぶための問題集であり、全ての問題が実際の企業採用面接時に出題されるとは限りません。また筆者の現在所属する組織の採用活動とは一切関係ありません。

 

    • 本問題集では、Terraformの全ての基礎知識やベストプラクティスが網羅されているわけではありません。また特定のprovider(AWS等)に特化したものでもありません。特定のproviderにおけるベストプラクティス等は、該当providerの公式ドキュメント等をご参照ください。

 

    • 面接形式となるため、サンプルコード等の記述を省略する場合があります。ご了承ください。

 

    Terraformの学習においては、公式ドキュメントや他の情報源を併せて活用することをお勧めします。

Q1:Terraform中的state文件是什么?

A: state文件是记录Terraform管理的基础设施当前状态的文件。该文件包含创建的资源以及其配置、依赖关系等信息。
默认情况下,state文件在运行Terraform的目录下以terraform.tfstate的名称创建。

Q2: Terraform中的backend是什么?

使用后端可以定义状态文件的保存位置。
通常情况下,用于将状态文件保存在远程存储中。这样,可以实现团队成员之间的状态文件共享和安全存储。

问题3:在Terraform中,什么是状态锁定(state locking)?

状态锁定是一种机制,用于防止多个用户或进程同时使用Terraform来更改基础设施时出现竞态条件或矛盾的结果。
当状态文件被锁定时,其他用户或进程将无法更改该状态文件,从而可以防止竞态条件和数据不一致情况的发生。

Q4: Terraform中的provider是什么?

provider是用于管理特定云服务提供商(如AWS、Azure、GCP等)以及SaaS等资源的插件。当Terraform创建、修改、删除资源时,会使用provider,并为每个环境提供适当的API调用和配置。

Q5: 请告诉我 terraform init 命令的用途。

terraform init命令用于初始化Terraform项目。

作为主要用途

    • providerの初期化

 

    • プラグインのダウンロード

 

    • backendの設定

 

    moduleの初期化

可以列举出诸如此类的情况。而且,在创建项目的时候不仅需要执行terraform init命令,还需要在添加新的provider或module时执行。

请告诉我 terraform plan 和 terraform apply 命令的用途。

terraform plan命令会比较配置值和当前状态(state),并提供预览资源变更内容的功能。在应用变更之前,可用于确认变更内容和影响。

terraform apply命令会对基础设施进行实际变更的应用。如果不使用任何选项运行该命令,会先展示变更预览,然后要求用户输入是否应用变更。

请说明terraform plan和terraform validate命令之间的区别。

terraform plan命令会加载state文件,比较配置值和当前状态(state),生成变更的预览。然而,terraform validate命令只验证Terraform配置文件的语法和结构。它可以检测语法错误和配置不一致,但不会生成变更的预览和实际应用。

Q8:在执行terraform apply命令时,会要求以交互方式确认是否应用更改,如果想要跳过该步骤并执行apply,应该怎么做呢?

要在没有交互式形式下运行terraform apply命令,有以下方法。

    • terraform applyコマンドの-auto-approveオプションを使う

 

    terraform plan時に-outオプションを指定し、plan結果をファイルに保存、apply時に該当ファイルを指定

问题9:用于格式化tf文件的命令是什么?

通过使用terraform fmt命令,可以将Terraform代码格式化为一致的格式,从而提高代码的可读性。

Q10:Terraform中的模块是什么?使用模块有什么优点?

在Terraform中,模块是一种机制,用于组合多个资源和配置以定义可重复使用的组件。模块通过将.tf文件放置在特定目录中进行定义,并可从外部进行调用。

以下是模块的主要优点。

    • 再利用性の向上: コードの重複を減らし、効率的に管理することが可能になる

 

    • 抽象化と階層化:複雑な設定を論理的な単位に分割し、抽象化することでコードの管理が容易になる

 

    • 可読性の向上:コードの意図が明確になり、理解しやすくなる

 

    チーム開発:共通の設定やリソースを提供し、一貫性を保つ

问题11:请说明Terraform中变量(Variable)和本地值(Local Value)的区别。

变量(Variable)用于在Terraform代码中对值进行参数化。通常在tf文件(例如variables.tf)中声明,并在使用的地方以${var.variable_name}的形式引用。主要用于在提供程序和模块中传递共享的值。

一方,本地值(Local Value)是用于在Terraform代码中进行临时计算和转换的机制。通常,在Terraform代码的locals块中定义,使用时会引用为${local.local_name}。本地值在进行复杂计算和常见转换时可以提高效率。这两者都对代码整理和可读性的提高很有帮助。

Q12:请告诉我关于Terraform(HCL)中的数据类型。

以下是主要的数据类型。

    • string

 

    • number

 

    • bool

 

    • list

 

    • map

 

    • set

 

    • tuple

 

    • object

 

    • any

 

    null

通过适当地组合这些数据类型,我们可以在Terraform代码中操作各种数据,并进行资源配置和值管理。

Q13: 在Terraform中,tfvars文件是什么?

tfvars文件是用于设置变量的实际值的文件。
tfvars文件的主要用途如下。

    • 環境ごとの設定

 

    • 共有の秘密情報

 

    共通の設定

默认情况下,在执行terraform plan或apply命令时,将自动读取名称为terraform.tfvars或terraform.tfvars.json的文件,或者拓展名为.auto.tfvars或.auto.tfvars.json的文件。如果没有符合条件的文件,可以在命令执行时使用-var-file选项指定tfvars文件。

怎样在执行terraform plan和apply时指定特定的tfvars文件呢?

可以直接使用-var-file选项在执行terraform plan或terraform apply命令时指定.tfvars文件。还可以使用多个-var-file选项来指定多个.tfvars文件。

如果您只想在执行 terraform plan 和 apply 时针对特定资源进行操作,您该如何做呢?

在执行命令时,可以使用”-target”选项仅针对特定的资源进行操作。另外,通过多次使用”-target”选项,还可以指定多个资源。

在不使用import或硬编码的情况下,如果要引用现有资源的信息,而这些资源尚未由当前正在使用的tfstate进行管理,应该怎么做呢?

通过定义和引用数据源,您可以在Terraform代码中使用未包含在tfstate中的资源信息。

Q17: 如果想在一个模块中引用另一个模块中资源的信息,但不使用数据源,该怎么办?

可以通过使用输出块在模块中定义所需的输出值,并在接收输出值的模块中引用相应的输出值来实现共享资源信息的模块。

Q18:请告诉我在Terraform中有哪些日志级别类型以及如何在控制台输出时进行设置。

以下是主要的日志级别。

    • TRACE

 

    • DEBUG

 

    • INFO

 

    • WARN

 

    ERROR

您可以使用环境变量TF_LOG来设置Terraform的日志级别。在设置环境变量TF_LOG的日志级别之后,执行Terraform命令即可更改控制台输出时的日志级别。

如果您想要将某个资源的特定属性或设置值排除在变更应用的范围之外,应该怎么做呢?

在资源定义中,可以使用ignore_changes块来排除特定属性或设置值的更改。即使有更改,Terraform也会忽略变化差异。

如果想要在Terraform中多次创建特定资源,该怎么做呢?

可以使用count或for_each。

如果使用count,可以指定一个数值给count,然后可以创建相应次数的资源,并为每个资源分配一个索引。

如果使用for_each,可以对map或字符串set的每个元素创建资源。资源将使用键值对的形式创建。

Q21: 如果我想在Terraform中创建特定资源的特定区块多次,该怎么做?

通过使用动态块,可以在资源内动态生成多个块。

Q22:在Terraform管理下的某个资源上,通过手动重新创建,资源的唯一标识符已经发生了变化。如果想继续在Terraform中管理该资源而不删除它,该怎么做呢?

为了使Terraform能够正确管理,手动再创建将导致实际值与tfstate不一致,以下是实现这一目的的方法。

    • terraform state rm コマンドで旧リソースをtfstateから削除する

 

    • terraform import コマンドで新リソースをTerraformの管理下に取り込む

 

    terraform planコマンドを実行し、該当リソースで差分が表示されないことを確認する

附赠内容:实际面试可能会被问到的无法确定答案的问题(仅问题陈述)

请问在使用Terraform时,有哪些需要注意的事项?

如果您有关于Terraform的故障排除经验,请告诉我。

Q3: 请告诉我在使用Terraform时遇到的困难和解决方法。

如果您有在Terraform中进行单元测试和其他测试的经验,请告诉我们。

如果您有使用CI/CD工具进行Terraform的自动测试和部署的经验,请告诉我。

请提供参考的网址链接。

    • https://developer.hashicorp.com/terraform

 

    • https://www.youtube.com/watch?v=pCoCynze4Ag

 

    • https://www.youtube.com/watch?v=tyRhxznRkg0

 

    • https://www.youtube.com/watch?v=LPW3VriwLVs

 

    • https://www.youtube.com/watch?v=OOZkOJVH0rA

 

    • https://www.simplilearn.com/terraform-interview-questions-and-answers-article

 

    • https://intellipaat.com/blog/interview-question/terraform-interview-questions/?US

 

    https://geekflare.com/terraform-interview-questions-and-answers/
广告
将在 10 秒后关闭
bannerAds