'Not a valid output for module' 在 terraform 中使用输出变量时
'Not a valid output for module' when using output variable with terraform
我正在尝试使用 AWS 上的 Hashicorp Terraform 为新项目设置一些 IaC。我使用模块是因为我希望能够在多个环境(暂存、生产、开发等)中重用东西
我很难理解我必须在模块中的什么地方设置输出变量,以及我如何在另一个模块中使用它。任何对此的指示将不胜感激!
我在创建 EC2 机器时需要使用在我的 VPC 模块中创建的一些东西(子网 ID)。我的理解是您不能在另一个模块中引用某个模块的内容,因此我尝试使用 VPC 模块的输出变量。
我的站点中有以下内容main.tf
module "myapp-vpc" {
source = "dev/vpc"
aws_region = "${var.aws_region}"
}
module "myapp-ec2" {
source = "dev/ec2"
aws_region = "${var.aws_region}"
subnet_id = "${module.vpc.subnetid"}
}
dev/vpc
只需设置一些值并使用我的 vpc 模块:
module "vpc" {
source = "../../modules/vpc"
aws_region = "${var.aws_region}"
vpc-cidr = "10.1.0.0/16"
public-subnet-cidr = "10.1.1.0/24"
private-subnet-cidr = "10.1.2.0/24"
}
在我的 vpc main.tf 中,我在 aws_vpc
和 aws_subnet
资源(显示子网资源)之后的最后有以下内容:
resource "aws_subnet" "public" {
vpc_id = "${aws_vpc.main.id}"
map_public_ip_on_launch = true
availability_zone = "${var.aws_region}a"
cidr_block = "${var.public-subnet-cidr}"
}
output "subnetid" {
value = "${aws_subnet.public.id}"
}
当我 运行 terraform plan
时,我收到以下错误消息:
Error: module 'vpc': "subnetid" is not a valid output for module "vpc"
每次都需要明确地通过每个模块向上传递输出。
例如,如果你想从嵌套在另一个模块下面的模块输出一个变量到屏幕,你需要这样的东西:
child-module.tf
output "child_foo" {
value = "foobar"
}
parent-module.tf
module "child" {
source = "path/to/child"
}
output "parent_foo" {
value = "${module.child.child_foo}"
}
main.tf
module "parent" {
source = "path/to/parent"
}
output "main_foo" {
value = "${module.parent.parent_foo}"
}
我正在尝试使用 AWS 上的 Hashicorp Terraform 为新项目设置一些 IaC。我使用模块是因为我希望能够在多个环境(暂存、生产、开发等)中重用东西
我很难理解我必须在模块中的什么地方设置输出变量,以及我如何在另一个模块中使用它。任何对此的指示将不胜感激!
我在创建 EC2 机器时需要使用在我的 VPC 模块中创建的一些东西(子网 ID)。我的理解是您不能在另一个模块中引用某个模块的内容,因此我尝试使用 VPC 模块的输出变量。
我的站点中有以下内容main.tf
module "myapp-vpc" {
source = "dev/vpc"
aws_region = "${var.aws_region}"
}
module "myapp-ec2" {
source = "dev/ec2"
aws_region = "${var.aws_region}"
subnet_id = "${module.vpc.subnetid"}
}
dev/vpc
只需设置一些值并使用我的 vpc 模块:
module "vpc" {
source = "../../modules/vpc"
aws_region = "${var.aws_region}"
vpc-cidr = "10.1.0.0/16"
public-subnet-cidr = "10.1.1.0/24"
private-subnet-cidr = "10.1.2.0/24"
}
在我的 vpc main.tf 中,我在 aws_vpc
和 aws_subnet
资源(显示子网资源)之后的最后有以下内容:
resource "aws_subnet" "public" {
vpc_id = "${aws_vpc.main.id}"
map_public_ip_on_launch = true
availability_zone = "${var.aws_region}a"
cidr_block = "${var.public-subnet-cidr}"
}
output "subnetid" {
value = "${aws_subnet.public.id}"
}
当我 运行 terraform plan
时,我收到以下错误消息:
Error: module 'vpc': "subnetid" is not a valid output for module "vpc"
每次都需要明确地通过每个模块向上传递输出。
例如,如果你想从嵌套在另一个模块下面的模块输出一个变量到屏幕,你需要这样的东西:
child-module.tf
output "child_foo" {
value = "foobar"
}
parent-module.tf
module "child" {
source = "path/to/child"
}
output "parent_foo" {
value = "${module.child.child_foo}"
}
main.tf
module "parent" {
source = "path/to/parent"
}
output "main_foo" {
value = "${module.parent.parent_foo}"
}