我正在尝试在AWS上使用Hashicorp Terraform为一个新项目设置一些IaC。我之所以使用模块,是因为我希望能够跨多个环境(staging、prod、dev等)重用东西
我很难理解在一个模块中必须在何处设置输出变量,以及如何在另一个模块中使用该变量。任何指向此的指针都将不胜感激!
创建EC2机器时,我需要使用在VPC模块(子网ID)中创建的一些东西。我的理解是,您不能在另一个模块中引用某个模块的内容,因此我尝试使用专有网络模块的输出变量。
我的网站中有以下内容
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
只需设置一些值并使用我的专有网络模块:
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
我收到以下错误消息:
错误:模块“vpc”:“subnetid”不是模块“vpc”的有效输出