Terraform 上中间值的本地值和 null_data_source 之间的差异

Mar*_*ark 3 terraform hcl

我有一种情况,我需要存储一些中间值,以便我可以在根模块的其他部分重用它们。我知道本地值,我知道 null_data_source,但我不知道哪一个是保存可重用值的推荐选项。两种描述看起来都与我有些相似

本地值https://www.terraform.io/docs/configuration/locals.html

本地值有助于避免在 >configuration 中多次重复相同的值或表达式,但如果过度使用它们也会通过隐藏实际使用的值使未来的 >maintainers 难以阅读配置。

null_data_source ( https://www.terraform.io/docs/providers/null/data_source.html )

空数据源的主要用例是收集中间 > 值的集合,以便在配置的其他地方重用:

因此,对于这种情况,两者似乎都是有效的选择。

这是我的示例代码

locals {
  my_string_A = "This is string A"
}

data "null_data_source" "my_string_B" {
  inputs = {
    my_string_B = "This is string B"
  }
}

output "my_output_a" {
  value = "${local.my_string_A}"
}

output "my_output_b" {
  value = "${data.null_data_source.my_string_B.outputs["my_string_B"]}"
}
Run Code Online (Sandbox Code Playgroud)

您能否建议何时使用一个而不是另一个来保存中间值以及每种方法的优缺点是什么?

谢谢

Mar*_*ins 5

null_data_source数据源是当地的值机制的临时解决方案,以满足用例之前能力成了语言一流之前引入。继续支持它只是为了与使用它的现有配置向后兼容。

所有新配置都应改用本地值机制。它完全集成到 Terraform 语言中,支持任何类型的值(同时null_data_source只能支持字符串),并且具有更简洁/可读的语法。