示例:在 Azure 中,我正在同一区域中部署多个资源组、托管磁盘、网络接口等。
我想声明一个“区域”原语(“常量”),所有这些资源都将引用它。其中哪一个遵循惯例?
a)变量.tf:
variable "region" {
type = string
default = "a-place"
}
Run Code Online (Sandbox Code Playgroud)
b) 当地人.tf
locals {
region = "a-place"
}
Run Code Online (Sandbox Code Playgroud)
我自然会选择声明为本地人。仅当我期望从环境变量、命令行获得(或被覆盖)一个值,或者我正在创建一个模块时,我才会使用变量。然而,我还没有在任何示例中看到 local 被用于“声明常量”,这使我认为存在使用范围非常有限的 local 的约定(例如,主要用于创建可与 和count结构一起使用的结构for_each)。
在有人将此标记为基于意见之前掩饰我的背部:我问的是公约是什么,而不是您认为公约应该是什么。
后续问题:如果此示例涵盖 IP 地址、资源名称前缀等而不是区域,答案是否会有所不同?(该公约是否只涵盖特定领域?)
本地值的一般目的是表示您希望在模块中的许多位置重复使用其结果而不重复的表达式。这包括常量值,在将它们分解出来的情况下,例如,因为您希望它们在未来发生变化并且只想在一个地方进行更改,或者因为本地值名称比值本身更有意义,从而提高了可读性使用它的配置部分。
不过,声明本地值也有潜在的成本:它迫使任何阅读模块其余部分的人在每次引用它时都去其他地方查看最终值。通常,收益大于成本,但并非总是如此。
正如您所注意到的,输入变量的目的是它们可由模块的调用者设置,因此仅当您希望有时会覆盖默认值时才应使用输入变量。
| 归档时间: |
|
| 查看次数: |
10817 次 |
| 最近记录: |