地形模块作为"custom function"



可以使用一些即本地模块来返回相同的计算输出。但是如何传递一些参数呢?所以每次你要求输出值时,你都会根据参数得到不同的值(即不同的前缀)

是否可以将资源传递给模块并使用标签对其进行增强?

我可以想象这两种情况都更有可能适用于提供者,但对于一些简单的情况,它应该可能有效。最好的方法是,如果他们实现了您可以随意调用的一些自定义函数。

原则上可以编写一个仅包含"命名值"的 Terraform 模块,这是三个模块功能的广义术语输入变量(类似于函数参数)、局部值(类似于函数内的局部声明)和输出值(类似于返回值)。

这样的模块根本不包含任何resourcedata块,因此将是一个"仅计算"模块,因此具有与函数式编程语言中的函数相同的所有功能。

variable "a" {
type = number
}
variable "b" {
type = number
}
locals {
sum = var.a + var.b
}
output "sum" {
value = local.sum
}

上面的例子只是为了说明原理而人为的。这么简单的"函数"实际上并不需要本地值local.sum,因为它的表达式可以内联写在output "sum"的值中,但我想在这里展示所有三个相关结构的示例。

您可以通过声明一个模块调用来"调用函数",该调用引用包含包含上述源代码的文件的目录:

module "example" {
source = "./modules/sum"
a = 1
b = 2
}
output "result" {
value = module.example.sum
}

我在这里包含了output "result"块,以展示如何在模块中的其他地方引用"函数"的结果,如module.example.sum

当然,这种语法比典型的函数调用要"笨重"得多,因此在实践中,Terraform 模块作者只有在分解出的逻辑足够重要以证明其合理性时才使用此方法。撇开冗长不谈,如果您需要使用不同的参数集调用"函数",您可以根据需要包含任意数量的module块引用同一模块。对模块的每次调用都可以采用一组不同的输入变量值,因此会产生不同的结果。

最新更新