diff --git a/vpc.tf b/vpc.tf index 26c7509..a393e08 100644 --- a/vpc.tf +++ b/vpc.tf @@ -1,10 +1,110 @@ +# VPC resource "aws_vpc" "vpc" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true enable_dns_support = true tags = { - Name = "dev-vpc" - Environment = "Production" + Name = "${var.environment}-vpc" + Environment = var.environment } -} \ No newline at end of file +} + +# Public subnet +resource "aws_subnet" "public_subnet" { + vpc_id = aws_vpc.vpc.id + count = length(var.public_subnets_cidr) + cidr_block = element(var.public_subnets_cidr, count.index) + availability_zone = element(local.availability_zones, count.index) + map_public_ip_on_launch = true + + tags = { + Name = "${var.environment}-${element(local.availability_zones, count.index)}-public-subnet" + Environment = "${var.environment}" + } +} + +# Private Subnet +resource "aws_subnet" "private_subnet" { + vpc_id = aws_vpc.vpc.id + count = length(var.private_subnets_cidr) + cidr_block = element(var.private_subnets_cidr, count.index) + availability_zone = element(local.availability_zones, count.index) + map_public_ip_on_launch = false + + tags = { + Name = "${var.environment}-${element(local.availability_zones, count.index)}-private-subnet" + Environment = "${var.environment}" + } +} + +#Internet gateway +resource "aws_internet_gateway" "ig" { + vpc_id = aws_vpc.vpc.id + tags = { + "Name" = "${var.environment}-igw" + "Environment" = var.environment + } +} + +# Elastic-IP (eip) for NAT +resource "aws_eip" "nat_eip" { + vpc = true + depends_on = [aws_internet_gateway.ig] +} + +# NAT Gateway +resource "aws_nat_gateway" "nat" { + allocation_id = aws_eip.nat_eip.id + subnet_id = element(aws_subnet.public_subnet.*.id, 0) + tags = { + Name = "nat-gateway-${var.environment}" + Environment = "${var.environment}" + } +} + +# Routing tables to route traffic for Private Subnet +resource "aws_route_table" "private" { + vpc_id = aws_vpc.vpc.id + tags = { + Name = "${var.environment}-private-route-table" + Environment = "${var.environment}" + } +} + +# Routing tables to route traffic for Public Subnet +resource "aws_route_table" "public" { + vpc_id = aws_vpc.vpc.id + + tags = { + Name = "${var.environment}-public-route-table" + Environment = "${var.environment}" + } +} + +# Route for Internet Gateway +resource "aws_route" "public_internet_gateway" { + route_table_id = aws_route_table.public.id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig.id +} + +# Route for NAT Gateway +resource "aws_route" "private_internet_gateway" { + route_table_id = aws_route_table.private.id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_nat_gateway.nat.id +} + +# Route table associations for both Public subnet +resource "aws_route_table_association" "public" { + count = length(var.public_subnets_cidr) + subnet_id = element(aws_subnet.public_subnet.*.id, count.index) + route_table_id = aws_route_table.public.id +} + +resource "aws_route_table_association" "private" { + count = length(var.private_subnets_cidr) + subnet_id = element(aws_subnet.private_subnet.*.id, count.index) + route_table_id = aws_route_table.private.id +}