您是否可以依赖模块中的资源ID而不先将其定义为该模块的输出?
我有一个terraform项目,目前在顶层定义了一堆元素。我已将安全组放入模块中,因为它们非常冗长(使用aws_security_group_rule
时),因为我真的只需要项目中其他地方的ID。
所以,我想我有一个顶级的terraform文件,如:
resource "aws_instance" "example_instance" {
# instance config goes here
vpc_security_group_ids = [
"${reference}",
]
}
security_groups
模块中的配置如:
resource "aws_security_group" "example_group" {
# security group config goes here
}
第一个文件中的引用可以是" $ {module.security_groups.example_group.id}"?我可以说,答案是否定的,我得到的错误如下:
* module root:
resource 'aws_instance.example_instance' config:
aws_security_group.example_group.id is not a valid output for
module security_groups
但是,我还没有在任何地方明确记录这一点,所以我试图证实我的理解。我能找到的唯一方法是在模块文件中执行类似的操作:
output "example_group_id" {
value = "${aws_security_group.example_group.id}"
}
然后引用如下:${module.security_groups.example_group_id}
那么,任何人都可以通过输出确认(并且理想地指向确认的文档)这是正确的方法吗?或者,或者,告诉我如何在没有输出的情况下进行操作?
答案 0 :(得分:2)
是的,您需要为该模块设置输出,否则无法引用它。
Terraform是开源项目(也有企业版,它不是开源的。)。如果您认为output
文档不够好,请提出拉取请求以更新它。
相关的降价文件在此处:
https://github.com/hashicorp/terraform/blob/master/website/docs/configuration/outputs.html.md