github.com/terraform-modules-krish/terratest@v0.29.0/examples/terraform-aws-network-example/main.tf (about)

     1  # ---------------------------------------------------------------------------------------------------------------------
     2  # PIN TERRAFORM VERSION TO >= 0.12
     3  # The examples have been upgraded to 0.12 syntax
     4  # ---------------------------------------------------------------------------------------------------------------------
     5  
     6  terraform {
     7    required_version = ">= 0.12"
     8  }
     9  
    10  data "aws_availability_zones" "available" {
    11    state = "available"
    12  }
    13  
    14  provider "aws" {
    15    region = var.aws_region
    16  }
    17  
    18  # ---------------------------------------------------------------------------------------------------------------------
    19  # DEPLOY A SIMPLE NETWORK
    20  # The network has an internet gateway and two subnets - private and public - in the same availability zone.
    21  # ---------------------------------------------------------------------------------------------------------------------
    22  
    23  resource "aws_vpc" "main" {
    24    cidr_block = var.main_vpc_cidr
    25  
    26    tags = {
    27      Name = var.tag_name
    28    }
    29  }
    30  
    31  resource "aws_internet_gateway" "main_gateway" {
    32    vpc_id = aws_vpc.main.id
    33  
    34    tags = {
    35      Name = var.tag_name
    36    }
    37  }
    38  
    39  resource "aws_subnet" "private" {
    40    vpc_id                  = aws_vpc.main.id
    41    cidr_block              = var.private_subnet_cidr
    42    map_public_ip_on_launch = false
    43  
    44    tags = {
    45      Name = var.tag_name
    46    }
    47  
    48    availability_zone = data.aws_availability_zones.available.names[0]
    49  }
    50  
    51  resource "aws_subnet" "public" {
    52    vpc_id                  = aws_vpc.main.id
    53    cidr_block              = var.public_subnet_cidr
    54    map_public_ip_on_launch = true
    55  
    56    tags = {
    57      Name = var.tag_name
    58    }
    59  
    60    availability_zone = data.aws_availability_zones.available.names[0]
    61  }
    62  
    63  # ---------------------------------------------------------------------------------------------------------------------
    64  # CREATE AND ATTACH A ROUTING TABLE FOR THE PUBLIC NETWORK
    65  # ---------------------------------------------------------------------------------------------------------------------
    66  
    67  resource "aws_route_table" "public" {
    68    vpc_id = aws_vpc.main.id
    69  
    70    route {
    71      cidr_block = "91.189.0.0/24"
    72      gateway_id = aws_internet_gateway.main_gateway.id
    73    }
    74  
    75    tags = {
    76      Name = var.tag_name
    77    }
    78  }
    79  
    80  resource "aws_route_table_association" "public" {
    81    subnet_id      = aws_subnet.public.id
    82    route_table_id = aws_route_table.public.id
    83  }
    84  
    85  # ---------------------------------------------------------------------------------------------------------------------
    86  # CREATE NAT GATEWAY FOR THE PRIVATE SUBNET
    87  # ---------------------------------------------------------------------------------------------------------------------
    88  
    89  resource "aws_eip" "nat" {
    90    vpc = true
    91  }
    92  
    93  resource "aws_nat_gateway" "nat" {
    94    allocation_id = aws_eip.nat.id
    95    subnet_id     = aws_subnet.public.id
    96    depends_on    = [aws_internet_gateway.main_gateway]
    97  }
    98  
    99  # ---------------------------------------------------------------------------------------------------------------------
   100  # CREATE AND ATTACH A ROUTING TABLE FOR THE PRIVATE NETWORK
   101  # ---------------------------------------------------------------------------------------------------------------------
   102  
   103  resource "aws_route_table" "private" {
   104    vpc_id = aws_vpc.main.id
   105  
   106    route {
   107      cidr_block     = "0.0.0.0/0"
   108      nat_gateway_id = aws_nat_gateway.nat.id
   109    }
   110  
   111    tags = {
   112      Name = var.tag_name
   113    }
   114  }
   115  
   116  resource "aws_route_table_association" "private" {
   117    subnet_id      = aws_subnet.private.id
   118    route_table_id = aws_route_table.private.id
   119  }
   120