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