使用地形对象中的输出值



我有多个输出变量,我想让一个父输出变量,然后把其他输出放入其中。我搜索过它,发现我们可以为它使用terraform对象,但无法获得正确的语法。输出.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 })
}

Terraform输出没有type。因此,您的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}"
}  
}

但问题是,子模块无法访问其parrent的输出因此,我不太确定你想用你的产出实现什么。通常,您会使用variable将变量从父级传递到子级,然后您可以在子模块中从这些变量生成新的输出。

更新

根据您之前的问题,有带的main.tf

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的文件。文件中会有这样的内容(变量也可以在单独的文件中(:

variable "vpc_cidr" {}
variable "public_subnet" {}
variable "private_subnet" {}
variable "availability_zone" {}
# the rest of the VPC definition. Since the file is not given,
# i can only speculate on the exact details of the content
resource "aws_subnet" "public" {
count  = length(var.public_subnet)
vpc_id = aws_vpc.my_vpc.id
# other attributes
}
resource "aws_subnet" "private" {
count  = length(var.private_subnet)
vpc_id = aws_vpc.my_vpc.id
# other attributes
}

如果是这样,那么您可以创建一个名为./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
}  
}

相关内容

  • 没有找到相关文章

最新更新