Amazon web services 你需要一个“电话号码”吗;“产出”;在地形模块中表达对资源的依赖关系?

Amazon web services 你需要一个“电话号码”吗;“产出”;在地形模块中表达对资源的依赖关系?,amazon-web-services,terraform,Amazon Web Services,Terraform,您是否可以依赖模块中的资源id,而不首先将其定义为该模块的输出 我有一个terraform项目,目前在顶层定义了一系列元素。我将安全组放入了一个模块中,因为它们非常详细(当使用aws\u security\u group\u rule时),而且我实际上只需要项目中其他地方的ID 所以,我想我有一个顶级的地形文件,比如: resource "aws_instance" "example_instance" { # instance config goes here vpc_secu

您是否可以依赖模块中的资源id,而不首先将其定义为该模块的输出

我有一个terraform项目,目前在顶层定义了一系列元素。我将安全组放入了一个模块中,因为它们非常详细(当使用
aws\u security\u group\u rule
时),而且我实际上只需要项目中其他地方的ID

所以,我想我有一个顶级的地形文件,比如:

resource "aws_instance" "example_instance" {
    # instance config goes here
    vpc_security_group_ids = [
        "${reference}",
    ]
}
以及
安全组
模块中的配置,如:

resource "aws_security_group" "example_group" {
    # security group config goes here
}
第一个文件中的引用是否可以类似于“${module.security\u groups.example\u 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\u groups.example\u group\u id}


那么,有人能用输出确认(最好是指向确认的文档)这是正确的方法吗?或者,告诉我如何在没有输出的情况下执行此操作?

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

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

相关的降价文件如下:


是,很明显,您需要为模块设置输出,否则,无法引用。是。模块对于调用方来说就像一个黑盒子。调用方只能引用输出变量。@我很高兴这对您来说很明显——我不清楚。我能找到的唯一一个地方是“模块也可以指定它们自己的输出。这些输出可以在配置中的其他地方引用,例如:”,这明确地表明,如果您想要引用模块的内容,您需要一个输出,但我找不到任何东西真正说明这一点。无论如何,谢谢你们两位的确认,尽管你们两人都没有回答,所以我不能接受顺便说一句,在讨论完这一点后,我对文档做了一个小小的澄清:它很小,但将来可能会帮助其他人。