93 lines
3.0 KiB
HCL
93 lines
3.0 KiB
HCL
data "aws_availability_zones" "available" {}
|
|
|
|
#-------------VPC and Internet Gateway------------------------------------------
|
|
resource "aws_vpc" "main" {
|
|
cidr_block = var.vpc_cidr
|
|
tags = merge(var.tags, { Name = "${var.env}-vpc" })
|
|
}
|
|
|
|
|
|
resource "aws_internet_gateway" "main" {
|
|
vpc_id = aws_vpc.main.id
|
|
tags = merge(var.tags, { Name = "${var.env}-igw" })
|
|
}
|
|
|
|
#-------------Public Subnets and Routing----------------------------------------
|
|
resource "aws_subnet" "public_subnets" {
|
|
count = length(data.aws_availability_zones.available.names)
|
|
vpc_id = aws_vpc.main.id
|
|
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index + 1)
|
|
availability_zone = data.aws_availability_zones.available.names[count.index]
|
|
map_public_ip_on_launch = true
|
|
tags = merge(var.tags, {
|
|
Name = "${var.env}-public-${count.index + 1}",
|
|
Tier = "public"
|
|
})
|
|
}
|
|
|
|
|
|
resource "aws_route_table" "public_subnets" {
|
|
vpc_id = aws_vpc.main.id
|
|
route {
|
|
cidr_block = "0.0.0.0/0"
|
|
gateway_id = aws_internet_gateway.main.id
|
|
}
|
|
|
|
tags = merge(var.tags, { Name = "${var.env}-route-public-subnets" })
|
|
}
|
|
|
|
|
|
resource "aws_route_table_association" "public_routes" {
|
|
count = length(aws_subnet.public_subnets[*].id)
|
|
route_table_id = aws_route_table.public_subnets.id
|
|
subnet_id = aws_subnet.public_subnets[count.index].id
|
|
}
|
|
|
|
|
|
#-----NAT Gateways with Elastic IPs--------------------------
|
|
resource "aws_eip" "nat" {
|
|
count = length(data.aws_availability_zones.available.names)
|
|
domain = "vpc"
|
|
tags = merge(var.tags, { Name = "${var.env}-nat-gw-${count.index + 1}" })
|
|
}
|
|
|
|
|
|
resource "aws_nat_gateway" "nat" {
|
|
count = length(data.aws_availability_zones.available.names)
|
|
allocation_id = aws_eip.nat[count.index].id
|
|
subnet_id = aws_subnet.public_subnets[count.index].id
|
|
tags = merge(var.tags, { Name = "${var.env}-nat-gw-${count.index + 1}" })
|
|
}
|
|
|
|
#--------------Private Subnets and Routing-------------------------
|
|
resource "aws_subnet" "private_subnets" {
|
|
count = length(data.aws_availability_zones.available.names)
|
|
vpc_id = aws_vpc.main.id
|
|
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index + 11)
|
|
availability_zone = data.aws_availability_zones.available.names[count.index]
|
|
tags = merge(var.tags, {
|
|
Name = "${var.env}-private-${count.index + 1}",
|
|
Tier = "private"
|
|
})
|
|
}
|
|
|
|
|
|
resource "aws_route_table" "private_subnets" {
|
|
count = length(data.aws_availability_zones.available.names)
|
|
vpc_id = aws_vpc.main.id
|
|
route {
|
|
cidr_block = "0.0.0.0/0"
|
|
nat_gateway_id = aws_nat_gateway.nat[count.index].id
|
|
}
|
|
|
|
tags = merge(var.tags, { Name = "${var.env}-route-private-subnet-${count.index + 1}" })
|
|
}
|
|
|
|
|
|
resource "aws_route_table_association" "private_routes" {
|
|
count = length(data.aws_availability_zones.available.names)
|
|
route_table_id = aws_route_table.private_subnets[count.index].id
|
|
subnet_id = aws_subnet.private_subnets[count.index].id
|
|
}
|
|
|
|
#============================================================== |