我们在 AWS 上的基础设施中有一个公共变量,计划由多个模块使用。例如子网 ID、VPC ID 等。
为了避免 *.tfvars 文件中每个模块中的变量重复。是否可以从任何 terraform 模块中使用它们?而模块本身可以相互隔离。
我想到了一种“核心模块”,可以在需要公共变量的地方导入它。但怀疑模块是否是一种正确的方法,因为模块中只包含“资源”,但我们只需要公开变量。使用模块共享变量是正确的方法吗?或者说你们是怎么解决这个问题的?认为这在地形中很常见还是不好?) 如果您有一组想要重用的表达式(包括硬编码的文字值),那么编写一个仅包含输入变量声明、本地值和输出值的模块作为建模方法是有效的。
output
块的模块,其值为硬编码的文字值,如下所示:
output "example" {
value = "result"
}
hashicorp/subnets/cidr
就是一个例子:它没有声明自己的任何资源,而只是封装了一些根据某些输入变量计算一组子网的逻辑。
这是仅数据模块的特殊情况,其中数据来自模块本身内部,而不是来自数据源。以这种方式对共享数据进行建模的一个好处是,如果您稍后决定根据数据源自动计算这些结果,那么您将能够这样做,同时保留详细信息。例如,如果您定义一个模块,该模块将环境名称作为输入变量并返回有关该环境的派生设置,则该模块可以包含本地逻辑来计算当前的这些结果,但稍后可以通过从规定的位置获取这些设置来确定其中一些设置。远程位置,例如 AWS SSM 参数存储(如果需要)。