你需要"输出"表达对terraform模块中资源的依赖?

时间:2017-08-23 20:58:05

标签: amazon-web-services terraform

您是否可以依赖模块中的资源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}

那么,任何人都可以通过输出确认(并且理想地指向确认的文档)这是正确的方法吗?或者,或者,告诉我如何在没有输出的情况下进行操作?

1 个答案:

答案 0 :(得分:2)

是的,您需要为该模块设置输出,否则无法引用它。

Terraform是开源项目(也有企业版,它不是开源的。)。如果您认为output文档不够好,请提出拉取请求以更新它。

相关的降价文件在此处:

https://github.com/hashicorp/terraform/blob/master/website/docs/configuration/outputs.html.md