Amazon web services 在地形对象中使用输出值

Amazon web services 在地形对象中使用输出值,amazon-web-services,terraform,amazon-vpc,terraform-provider-aws,Amazon Web Services,Terraform,Amazon Vpc,Terraform Provider Aws,我有多个输出变量,我想将一个父变量输出,然后将其他输出放入其中。我搜索过它,发现我们可以使用terraform对象来获取它,但无法获得正确的语法。 Output.tf output "public_subnet" { value = "${module.my_vpc.public_subnets_ids}" } output "vpc_id" { value = "${module.my_vpc.vpc_id}&quo

我有多个输出变量,我想将一个父变量输出,然后将其他输出放入其中。我搜索过它,发现我们可以使用terraform对象来获取它,但无法获得正确的语法。 Output.tf

output "public_subnet" {
  value = "${module.my_vpc.public_subnets_ids}"
}
output "vpc_id" {
  value = "${module.my_vpc.vpc_id}"
}
output "private_subnet" {
  value = "${module.my_vpc.private_subnets_ids}"
}
我希望我的输出是在一个对象中,或者你可以说父输出变量有所有的子输出值,我已经想出了几行,我知道这不是正确的语法,但会让你了解我在想什么

output "vpc" {
  value = {
    vpc_id         = "${module.my_vpc.vpc_id}"
    public_subnet  = "${module.my_vpc.public_subnets_ids}"
    private_subnet = "${module.my_vpc.private_subnets_ids}"
  }
  type = object({ vpc_id = string, public_subnet = string, private_subnet = string })
}
地形没有
类型
。因此,您的
vpc
应该是:

output "vpc" {
  value = {
    vpc_id         = "${module.my_vpc.vpc_id}"
    public_subnet  = "${module.my_vpc.public_subnets_ids}"
    private_subnet = "${module.my_vpc.private_subnets_ids}"
  }  
}
但问题是子模块无法访问其相应模块的输出。因此,我不确定您希望通过输出实现什么。通常,您会使用
变量
将变量从父级传递到子级,然后可以在子模块中从这些变量生成新的输出

更新 根据您之前的问题,这里有
main.tf
with

module "my_vpc" {
  source            = "./modules/vpc"
  vpc_cidr          = var.vpc_cidr
  public_subnet     = var.public_subnet
  private_subnet    = var.private_subnet
  availability_zone = data.aws_availability_zones.azs.names
}
因此,您必须有一个文件夹
/modules/vpc
。文件夹中可能有一个名为
/modules/vpc/vpc.tf
的文件。文件中会有类似的内容(变量也可以在单独的文件中):

如果是这样,则可以创建一个名为
/modules/vpc/output.tf的新文件,其内容如下:

output "vpc" {
  value = {
    vpc_id         = my_vpc.vpc_id
    public_subnet  = aws_subnet.public.*.id
    private_subnet = aws_subnet.private.*.id
  }  
}

你怎么能用地形物体来做呢?@Shifa你好。你能澄清一下“做吗?”做什么吗?嗨,Marcin,我的主管让我在output.tf文件中使用terraform对象,这样如果我想引用输出,我可以使用
“${module.vpc.vpc_id}”
“${module.vpc.public\u subnet}”
输出变量的名称保持不变,我们可以访问不同的属性,如
vpc\u id
public\u subnet
etcDid你明白我的意思了吗?我做了很多搜索,没有找到任何有用的material@Shifa我在试着拼图。我记得昨天的VPC。我想我知道你的意思。给我几分钟核实一下。
output "vpc" {
  value = {
    vpc_id         = my_vpc.vpc_id
    public_subnet  = aws_subnet.public.*.id
    private_subnet = aws_subnet.private.*.id
  }  
}