使用模块作为“自定义函数”

问题描述 投票:0回答:1

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

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

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

module terraform output
1个回答
9
投票

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

这样的模块根本不包含任何

resource
data
块,因此将是一个“仅计算”模块,因此具有与函数式编程语言中的函数相同的所有功能。

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
块。对模块的每次调用都可以采用一组不同的输入变量值,因此会产生不同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.