Hi, devops fan. Welcome to the 3d and last part of articles devoted to the terraform network module. Here we are going to deal with outputs, variables and finally implement terrafrom AWS network module. At 2d part we have finished at routing and security groups. Let’s continue with environment variables – terraform/modules/network/variables-env.tf:
variable "account_id" {
  type        = string
  description = "AWS Account ID"
}
variable "env" {
  type        = string
  description = "Environment name"
}
variable "project" {
  type        = string
  description = "Project name"
}
variable "region" {
  type        = string
  description = "AWS Region"
}And here are variables related to network module by itself terraform/modules/network/variables.tf:
variable "vpc_ip_block" {
  type = string
}
variable "subnet_cidr_public" {
  type = string
}
variable "subnet_cidr_private" {
  type = string
}
variable "new_bits_public" {
  type = number
}
variable "natgw_count" {
  type        = string
  description = "all | none | one"
}
variable "new_bits_private" {
  type = number
}
variable "az_num" {
  type        = number
  description = "Number of used AZ"
}
variable "management_ips" {
  type = map(string)
}
variable "app_direct_access" {
  type = map(map(string))
}Finally below we have module outputs terraform/modules/network/outputs.tf:
output "vpc" {
  value = aws_vpc.main
}
output "subnets_private" {
  value = aws_subnet.private
}
output "subnets_public" {
  value = aws_subnet.public
}
output "sg_app" {
  value = aws_security_group.app
}
output "sg_management" {
  value = aws_security_group.management
}
output "sg_es" {
  value = aws_security_group.es
}And in the end we have implementation terraform/dev/network/main.tf. Please, remember to change x.x.x.x.at some real ip address your are going to use
terraform {
  backend "s3" {
    bucket         = "terraform-state-aws-es-devops"
    dynamodb_table = "terraform-state-aws-es-devops"
    encrypt        = true
    key            = "dev-network.tfstate"
    region         = "eu-central-1"
  }
}
provider "aws" {
  allowed_account_ids = [var.account_id]
  region              = var.region
}
module "network" {
  source = "../../modules/network"
  account_id = var.account_id
  env        = var.env
  project    = var.project
  region     = var.region
  az_num              = 3
  vpc_ip_block        = "172.27.72.0/22"
  subnet_cidr_private = "172.27.72.0/24"
  subnet_cidr_public  = "172.27.73.0/24"
  new_bits_private    = 2
  new_bits_public     = 2
  natgw_count         = "one"
  management_ips = {
    "x.x.x.x/32" = "VPN",
  }
  app_direct_access = {
    "vpn" = {
      "x.x.x.x/32" = "VPN",
    }
  }
}
Then run terraform init and apply terraform chanmges as it is represented at screen:

If you did all all properly – you have to see “green” success message that all resources are added. Here is, just as a reminder, our architecture scheme:

And below you can find screens from AWS console






So, great. Take my congratulations. You already know how to use network terraform module that will create VPC, subnets, route tables, security groups, network address translation (NAT) and internet gateways (IG). If you still have some questions, as always, you may refer to online udemy course. As the reader of that blog you are also getting possibility to use coupon for the best possible low price. P.S. Don’t forget to destroy AWS resources in the end 😉
