You are a DevOps engineer at an organization that is moving their configuration management to Infrastructure as Code (IaC) using Terraform. The networking team wants to move to managing their GCP VPCs and subnets with Terraform, but is concerned that maintaining separate code bases for development and production networks would lead to the environments not having the same configurations. You will create a single Terraform module and build both production and development VPCs using that module. This way, the environments will remain mirrored, and managing changes will be transparent and auditable.
Learning Objectives
Successfully complete this lab by achieving the following learning objectives:
- Create a ‘networking’ Module and Use It to Create a Small Development VPC
- Create a
terraform
directory to work in. - Create a
modules/networking
directory, and create amain.tf
inside of it. - Define variables for
environment
,cidr_range
,regions
andsubnet_size
. - Create a
locals
block and use thesplit()
,element()
,length()
, andtonumber()
Terraform functions to calculate thenewbits
value for thecidrsubnet()
function argument. - Create a
google_compute_network
resource. - Create a
google_compute_subnetwork
resource. Use thecount
argument to create a subnet in each region in theregions
variable. Use thecidrsubnet()
function to calculate theip_cidr_range
based on thecidr_range
variable. - In the
terraform
directory, create adev
folder containing amain.tf
file. - Create a
terraform
block and amodule
referencing themodules/networking
code. Set theenvironment
todev
, thecidr_range
to10.10.0.0/24
,regions
to["us-central1", "us-east1"]
, andsubnet_size
to28
. - Execute
terraform init
. - Execute
terraform apply
.
- Create a
- Using the Same Module, Create a Production VPC with a Larger CIDR Block and More Subnets
- In the
terraform
directory, create aprod
folder containing amain.tf
file. - Create a
terraform
block and amodule
referencing themodules/networking
code. Set theenvironment
toprod
, thecidr_range
to10.0.0.0/8
,regions
to["us-central1", "us-east1", "us-east4", "us-west1"]
, andsubnet_size
to24
. - Execute
terraform init
. - Execute
terraform apply
.
- In the