Terraform 如何避免在调用模块时重新定义输出?
我有一个带输出的模块,看起来像这样:Terraform 如何避免在调用模块时重新定义输出?,terraform,Terraform,我有一个带输出的模块,看起来像这样: output "myvpc" { value = "${aws_vpc.myvpc.id}" } output "myvpc" { value = "${module.myvpc.myvpc}" } 我在另一个tf文件中调用该模块 现在我希望调用模块的tf文件具有我在模块中定义的那些输出 但我能够做到这一点的唯一方法是在调用tf文件中重新定义输出,如下所示: output "myvpc" { value = "${aws_vpc.myvpc.id}" }
output "myvpc" { value = "${aws_vpc.myvpc.id}" }
output "myvpc" { value = "${module.myvpc.myvpc}" }
我在另一个tf文件中调用该模块
现在我希望调用模块的tf文件具有我在模块中定义的那些输出
但我能够做到这一点的唯一方法是在调用tf文件中重新定义输出,如下所示:
output "myvpc" { value = "${aws_vpc.myvpc.id}" }
output "myvpc" { value = "${module.myvpc.myvpc}" }
所以现在我有了这个冗余的配置行和另一个抽象层来做一些我认为在使用terraform时非常必要的事情
我很确定我做错了,因为我觉得这是多余的/错误的。模块的全部目的是代码重用,但必须冗余地重新定义输出,更糟糕的是,用另一层抽象来掩盖它们会带走一些价值。您所经历的行为正是预期的原因,因为模块抽象掉了实现的细节 在编写模块时,您通过指定模型需要的变量(参数)来最小化接触面,但隐藏所有实现细节。同样的参数也适用于输出。不是从模块输出所有变量,而是只公开语义上有用的值 如果您可以接受上述行为是有效的,那么将相同的逻辑应用到下一个语义级别似乎也很直观 如果您需要对抽象链中的值进行高级访问,那么您需要编写这个“重复代码”。但是请注意,您可以根据语义需要重命名和更改值