I am new to terraform and trying to build an infrastructure with two subnets and VPC. I have created two modules
- VPC
- subnet
The VPC module will create a VPC and will return vpc_id as output, the same return vpc_id I am trying to use in the subnet module, but when I run the terraform plan, it asks me for the enter vpc_id input.
I want the vpc_id from the output value of the VPC module, can anyone please help me on the same.
Below is the code,
root tf file,
provider "aws" {
shared_credentials_file = var.shared_cred
profile = "default"
region = var.aws_region
}
module "vpc" {
source = "./vpc"
name = "terraformVPC"
cidr = "10.50.40.0/27"
}
module "private_subnet" {
source = "./subnet"
subnet_name = "private_subnet"
subnet_cidr = "10.50.40.16/28"
#VPC_id = aws_vpc.moduleVPC.id
VPCid = module.vpc.outvpc_id # this is the issue
}
module "public_subnet" {
source = "./subnet"
subnet_name = "public_subnet"
subnet_cidr = "10.50.40.0/28"
VPCid = module.vpc.outvpc_id
}
Subnet resource
resource "aws_subnet" "module_subnet" {
cidr_block = var.subnet_cidr
vpc_id = var.VPCid
tags = {
Name = var.subnet_name
}
}
Subnet module variable declaration
variable "subnet_name" {
description = " define th subnet name"
}
variable "subnet_cidr" {
description = "define th subnet cidr block"
}
variable "VPCid" {
description = "Assign VPC id to subnet"
}
VPC output
output "outvpc_id" {
value = "${aws_vpc.moduleVPC.id}"
}
When I use terraform for aws... My module name it's "network.ts" I don't think you need two tf files to manage your vpc and the subnets of that VPC.
network.tf
if you want vpc on another tf
(and if you want to have two files... only call the vpc like this)
another.tf