Skip to content
main.tf 4.65 KiB
Newer Older
#
# Create the VPC 
# using directions from https://clouddocs.f5.com/cloud/public/v1/aws/AWS_multiNIC.html
#
## TODO Temporary local var for eks cluster name
locals {
  cluster_name = format("%s-eks_cluster-%s", var.tags.prefix, var.tags.random)
}

module "vpc_min" {
  count = var.create_min && !var.create_max ? 1 : 0

  source = "terraform-aws-modules/vpc/aws"
  name                 = format("%s-min-%s", var.tags.prefix, var.tags.random)
  cidr                 = var.aws_vpc_parameters.cidr
  enable_dns_hostnames = true
  enable_dns_support   = true

  azs = var.aws_vpc_parameters.azs

  # vpc public subnet used for external interface
  public_subnets = [for num in range(length(var.aws_vpc_parameters.azs)) :
    cidrsubnet(var.aws_vpc_parameters.cidr, 8, num + var.external_subnet_offset)
  ]
  public_subnet_tags = {
    Mode                                    = "public"
    Cluster                                 = local.cluster_name
    "kubernetes.io/role/elb"                = 1
    "kubernetes.io/cluster/${local.cluster_name}"     = "shared"
  }

  # vpc private subnet used for internal 
  private_subnets = [
    for num in range(length(var.aws_vpc_parameters.azs)) :
    cidrsubnet(var.aws_vpc_parameters.cidr, 8, num + var.internal_subnet_offset)
  ]
  private_subnet_tags = {
    Mode                                    = "private"
    Cluster                                 = format("%s-eks-%s", var.tags.prefix, var.tags.random)
    "kubernetes.io/role/internal-elb"       = 1
    "kubernetes.io/cluster/${local.cluster_name}"     = "shared"
  }

  enable_nat_gateway = true

  # using the database subnet method since it allows a public route
  database_subnets = [
    for num in range(length(var.aws_vpc_parameters.azs)) :
    cidrsubnet(var.aws_vpc_parameters.cidr, 8, num + var.management_subnet_offset)
  ]
  create_database_subnet_group           = true
  create_database_subnet_route_table     = true
  create_database_internet_gateway_route = true

  tags = {
    Name        = format("%s-min-%s", var.tags.prefix, var.tags.random)
    Terraform   = "true"
    Environment = var.tags.environment
  }
}

module "vpc_max_public" {
  count = var.create_max ? 1 : 0
  source = "terraform-aws-modules/vpc/aws"

  name                 = format("%s-max-%s", var.tags.prefix, var.tags.random)
  cidr                 = var.aws_vpc_parameters.cidr
  enable_dns_hostnames = true
  enable_dns_support   = true

  azs = var.aws_vpc_parameters.azs

  # vpc public subnet used for external interface
  public_subnets = [for num in range(length(var.aws_vpc_parameters.azs)) :
    cidrsubnet(var.aws_vpc_parameters.cidr, 8, num + var.external_subnet_offset)
  ]
  public_subnet_tags = {
    Mode                                    = "public"
    Cluster                                 = local.cluster_name
    "kubernetes.io/role/elb"                = 1
    "kubernetes.io/cluster/${local.cluster_name}"     = "shared"
  }

  tags = {
    Name        = format("%s-max-public-%s", var.tags.prefix, var.tags.random)
    Terraform   = "true"
    Environment = var.tags.environment
  }
}

module "vpc_max_private" {
  count = var.create_max ? 1 : 0
  source = "terraform-aws-modules/vpc/aws"

  name                 = format("%s-max-%s", var.tags.prefix, var.tags.random)
  cidr                 = var.aws_vpc_parameters.cidr
  enable_dns_hostnames = true
  enable_dns_support   = true

  azs = var.aws_vpc_parameters.azs

  # vpc private subnet used for internal
  private_subnets = [
    for num in range(length(var.aws_vpc_parameters.azs)) :
    cidrsubnet(var.aws_vpc_parameters.cidr, 8, num + var.internal_subnet_offset)
  ]
  private_subnet_tags = {
    Mode                                    = "private"
    Cluster                                 = format("%s-eks-%s", var.tags.prefix, var.tags.random)
    "kubernetes.io/role/internal-elb"       = 1
    "kubernetes.io/cluster/${local.cluster_name}"     = "shared"
  }

  tags = {
    Name        = format("%s-max-private-%s", var.tags.prefix, var.tags.random)
    Terraform   = "true"
    Environment = var.tags.environment
  }
}

module "vpc_max_management" {
  count = var.create_max ? 1 : 0
  source = "terraform-aws-modules/vpc/aws"

  name                 = format("%s-max-%s", var.tags.prefix, var.tags.random)
  cidr                 = var.aws_vpc_parameters.cidr
  enable_dns_hostnames = true
  enable_dns_support   = true

  azs = var.aws_vpc_parameters.azs
  public_subnets = [for num in range(length(var.aws_vpc_parameters.azs)) :
    cidrsubnet(var.aws_vpc_parameters.cidr, 8, num + var.management_subnet_offset)
  ]
  tags = {
    Name        = format("%s-max-mgmt-%s", var.tags.prefix, var.tags.random)
    Terraform   = "true"
    Environment = var.tags.environment
  }
}