为了理解Terraform的模块,这是一份粗略的备忘录

这是什么?

    Terraform の Module を調べたときに理解しづらかったことを垂れ流しておきます。

执行目录中的 .tf 是根模块。

其实,当我们执行 terraform plan 和 terraform apply 时,所创建的 .tf 文件集合其实就是一个根模块。因为它是一个模块,所以可以像普通模块一样使用变量和输出来进行输入和输出。这一点往往被那些只查看了 Qiita 和博客的 Terraform 配置的人所忽略。

每个Terraform配置至少有一个模块,被称为根模块,它由在主工作目录中定义的.tf文件中的资源组成。

根模块与其他子模块有以下不同之处:
– 可以在terraform命令或tfvars文件中传递变量值
– 可以在terraform apply和terraform refresh中显示输出值

变量用于值传递的语法

在创建模块时,通常在变量块中不设置default属性,将其值保持为空。

variable "name" {} # this is the input parameter of the module

在日常工作中,当我们在路由模块中编写变量时,通常会使用默认属性来填充值。然而,如果将Terraform执行文件视为一组模块,那么”变量的值可以为空而没有问题,而默认值是为了在输入为空的情况下提供默认值的设置”这种思路就会自然而然地出现。在路由模块中明确写入默认值,是为了避免从命令中传递值,这样事先设置默认值会更方便。

在文件中明确指出,变量为“Input Variables”,即输入变量。

输入变量作为Terraform模块的参数,允许对模块的不同方面进行定制化,而无需修改模块的源代码,并且允许在不同配置之间共享模块。

根据这些事实,可以说”变量是为了在模块之间传递值而准备的元素”,”在根模块中,变量的写法是一个特殊情况(极端来说)”。

bannerAds