diff --git a/Terraform/AWS/vpc.tf b/Terraform/AWS/vpc.tf
index a5691ffdcabfbd8dade1095c3ff6b4c38b539b8d..b2d13c6d047bf8d42fae0e15083ce374b44891f1 100644
--- a/Terraform/AWS/vpc.tf
+++ b/Terraform/AWS/vpc.tf
@@ -88,6 +88,7 @@ locals {
     8 = "h"
     9 = "i"
   }
+  subnet_mapping = { for i in range(var.subnet_count) : i => local.az_mapping[i + 1] }
 }
 
 resource "aws_subnet" "private" {
@@ -124,21 +125,21 @@ output "private_subnet_names" {
 }
 
 resource "aws_subnet" "public" {
-  count                   = var.subnet_count
-  availability_zone       = "${var.region}${local.az_mapping[count.index + 1]}"
-  cidr_block              = cidrsubnet(var.cidr_block, 8, var.subnet_count + count.index)
+  for_each                = local.subnet_mapping
+  availability_zone       = "${var.region}${each.value}"
+  cidr_block              = cidrsubnet(var.cidr_block, 8, var.subnet_count + each.key)
   map_public_ip_on_launch = true
   vpc_id                  = local.vpc_id
   tags = {
-    Name = "${local.env}-public-${local.az_mapping[count.index + 1]}"
+    Name = "${local.env}-public-${each.value}"
     Type = "public"
   }
 }
 
 locals {
-  public_subnet_arns  = aws_subnet.public.*.arn
-  public_subnet_ids   = aws_subnet.public.*.id
-  public_subnet_names = [for i in aws_subnet.public.*.tags : i["Name"]]
+  public_subnet_arns  = [for i in aws_subnet.public : i.arn]
+  public_subnet_ids   = [for i in aws_subnet.public : i.id]
+  public_subnet_names = [for i in aws_subnet.public : i.tags["Name"]]
 }
 
 output "public_subnet_arns" {
@@ -183,17 +184,23 @@ output "nat_gateway_eip_names" {
 }
 
 resource "aws_nat_gateway" "gateway" {
-  count         = var.subnet_count
-  allocation_id = local.nat_gateway_eip_ids[count.index]
-  subnet_id     = local.public_subnet_ids[count.index]
+  for_each = {
+    for i in range(var.subnet_count) : i => {
+      nat_eip_id = local.nat_gateway_eip_ids[i]
+      subnet_id  = local.public_subnet_ids[i]
+      az         = local.az_mapping[i + 1]
+    }
+  }
+  allocation_id = each.value.nat_eip_id
+  subnet_id     = each.value.subnet_id
   tags = {
-    Name = "${local.env}-${local.az_mapping[count.index + 1]}"
+    Name = "${local.env}-${each.value.az}"
   }
 }
 
 locals {
-  nat_gateway_ids   = aws_nat_gateway.gateway.*.id
-  nat_gateway_names = [for i in aws_nat_gateway.gateway.*.tags : i["Name"]]
+  nat_gateway_ids   = [for i in aws_nat_gateway.gateway : i.id]
+  nat_gateway_names = [for i in aws_nat_gateway.gateway : i.tags["Name"]]
 }
 
 output "nat_gateway_ids" {
@@ -240,9 +247,9 @@ output "public_route_table_name" {
 }
 
 resource "aws_route_table_association" "public" {
-  for_each       = toset(local.public_subnet_ids)
+  for_each       = aws_subnet.public
   route_table_id = local.public_route_table_id
-  subnet_id      = each.key
+  subnet_id      = each.value.id
 }
 
 locals {
@@ -255,10 +262,10 @@ output "public_route_table_association_ids" {
 }
 
 resource "aws_route_table" "private" {
-  for_each = toset(local.nat_gateway_ids)
+  for_each = aws_nat_gateway.gateway
   vpc_id   = local.vpc_id
   tags = {
-    Name = "${local.env}-private-${local.az_mapping[index(local.nat_gateway_ids, each.key) + 1]}"
+    Name = "${local.env}-private-${local.az_mapping[index(local.nat_gateway_ids, each.value.id) + 1]}"
   }
 
   route {
@@ -289,9 +296,9 @@ output "private_route_table_names" {
 }
 
 resource "aws_route_table_association" "private" {
-  for_each       = zipmap(local.private_subnet_ids, local.private_route_table_ids)
-  route_table_id = each.value
-  subnet_id      = each.key
+  for_each       = aws_route_table.private
+  route_table_id = each.value.id
+  subnet_id      = local.private_subnet_ids[index(local.private_route_table_ids, each.value.id)]
 }
 
 locals {