如何解决在Terraform对象中使用输出值 更新
我有多个输出变量,我想让一个父输出变量,然后将其他输出放入其中。我已经搜索过它,发现我们可以为其使用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 })
}
解决方法
Terraform output没有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}"
}
}
但是问题是子模块无法访问其父级输出。因此,我不确定您要用输出实现什么。通常,您可以使用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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。