I am learning Terraform using modules. I have created two modules for vpc and internet gateway. Please find the code below
provider "aws" {
profile = "default"
region = "us-east-1"
}
module "vpc" {
source = "./modules/vpc"
}
module "internet_gateway" {
source = "./modules/internet_gateway"
}
resource "aws_vpc" "some_custom_vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "Some Custom VPC"
}
}
output "vpc_id" {
value = aws_vpc.some_custom_vpc.id
}
resource "aws_internet_gateway" "some_ig" {
vpc_id = module.vpc.vpc_id
tags = {
Name = "Some Internet Gateway"
}
}
However, when I am running terraform init
and terraform plan
, I am getting below error
│ Error: Reference to undeclared module
│
│ on .terraform/modules/internet_gateway/main.tf line 2, in resource "aws_internet_gateway" "some_ig":
│ 2: vpc_id = module.vpc.vpc_id
│
│ No module call named "vpc" is declared in module.internet_gateway.
Can anyone please help me with what can be the reason for this error? Do I need to create VPC alone first and then reference it to the internet gateway or is there any other solution?
Please consider that I am beginner so I might have missed techinacl details, if required please let me know I'll add it up.
Thanks in advance.
I have tried looking online for help but couldn't avail.
You have to pass vpc_id
as an argument to your module "internet_gateway"
. For example:
provider "aws" {
profile = "default"
region = "us-east-1"
}
module "vpc" {
source = "./modules/vpc"
}
module "internet_gateway" {
source = "./modules/internet_gateway"
vpc_id = module.vpc.vpc_id
}
This requires declaration of vpc_id
variable in "./modules/internet_gateway"
, and subsequent use of the variable in the module:
variable "vpc_id" {}
resource "aws_internet_gateway" "some_ig" {
vpc_id = var.vpc_id
tags = {
Name = "Some Internet Gateway"
}
}