/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 */ # --- modules/vpc/main.tf --- # List of AZs available in the AWS Region data "aws_availability_zones" "available" { state = "available" } # VPC resource "aws_vpc" "vpc" { cidr_block = var.vpc_info.cidr_block enable_dns_support = true enable_dns_hostnames = true tags = { Name = "${var.vpc_name}-${var.identifier}" } } # Default Security Group # Ensuring that the default SG restricts all traffic (no ingress and egress rule). It is also not used in any resource resource "aws_default_security_group" "default_sg" { vpc_id = aws_vpc.vpc.id } # SUBNETS # Private Subnets - either to create instances or VPC endpoints resource "aws_subnet" "vpc_private_subnets" { count = var.vpc_info.number_azs vpc_id = aws_vpc.vpc.id cidr_block = [for i in range(0, 3) : cidrsubnet(var.vpc_info.cidr_block, 8, i)][count.index] availability_zone = data.aws_availability_zones.available.names[count.index] tags = { Name = "${var.vpc_name}-private-subnet-${var.identifier}-${count.index + 1}" } } # TGW Subnets - for TGW ENIs resource "aws_subnet" "vpc_tgw_subnets" { count = var.vpc_info.number_azs vpc_id = aws_vpc.vpc.id cidr_block = [for i in range(129, 132) : cidrsubnet(var.vpc_info.cidr_block, 12, i)][count.index] availability_zone = data.aws_availability_zones.available.names[count.index] tags = { Name = "${var.vpc_name}-tgw-subnet-${var.identifier}-${count.index + 1}" } } # ROUTE TABLES # Private Subnet Route Table resource "aws_route_table" "vpc_private_subnet_rt" { count = var.vpc_info.number_azs vpc_id = aws_vpc.vpc.id tags = { Name = "${var.vpc_name}-private-subnet-rt-${var.identifier}-${count.index + 1}" } } resource "aws_route_table_association" "vpc_private_subnet_rt_assoc" { count = var.vpc_info.number_azs subnet_id = aws_subnet.vpc_private_subnets[count.index].id route_table_id = aws_route_table.vpc_private_subnet_rt[count.index].id } # TGW Subnet Route Table resource "aws_route_table" "vpc_tgw_subnet_rt" { vpc_id = aws_vpc.vpc.id tags = { Name = "${var.vpc_name}-tgw-subnet-rt-${var.identifier}" } } resource "aws_route_table_association" "vpc_private_rt_assoc" { count = var.vpc_info.number_azs subnet_id = aws_subnet.vpc_tgw_subnets[count.index].id route_table_id = aws_route_table.vpc_tgw_subnet_rt.id }