8. Network Setup 01: VPCs, Internet Gateways, and Subnets
Introduction
In this session, we will dive into deploying Virtual Private Clouds (VPCs), internet gateways, and subnets using Terraform for our project. A prerequisite for this setup includes having the S3 backend and two separate AWS providers configured, as detailed in previous course videos.
Setting Up the Network Environment
Our network architecture spans across two AWS regions: eu-west-1 and eu-west-2. The setup involves deploying VPCs in both regions, establishing two public subnets in eu-west-1, and one in eu-west-2. Additionally, we will be creating and attaching internet gateways to each VPC.
Creating the VPCs and Subnets
1. VPC Creation: Utilizing Terraform's aws_vpc
resource, we create VPCs in both regions with distinct CIDR blocks to prevent overlap during VPC peering. We enable DNS and hostname support within each VPC and assign meaningful names for easy identification.
2. Subnet Deployment: We deploy subnets in the defined VPCs. A critical step here is fetching the availability zones using Terraform's data source resource, enabling us to assign subnets to these zones accurately.
3. Internet Gateway Integration: Each VPC gets an internet gateway attached, facilitating external communication. The gateways are tied to the respective VPCs using their IDs.
Terraform File Structure and Execution
File Creation: The implementation involves creating a
networks.tf
file in our Terraform project folder.Resource Tagging and Providers: Each resource, like VPCs and subnets, is tagged with labels and linked to the correct AWS provider (us-east-1 or us-west-2) using Terraform's provider parameter.
providers.tf
provider "aws" {
profile = var.profile
region = var.region-master
alias = "region-master"
}
provider "aws" {
profile = var.profile
region = var.region-worker
alias = "region-worker"
}
networks.tf
# Create VPC in eu-west-1
resource "aws_vpc" "vpc_master" {
provider = aws.region-master
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "master-vpc-jenkins-node"
}
}
# Create VPC in eu-west-2
resource "aws_vpc" "vpc_master_london" {
provider = aws.region-worker
cidr_block = "192.168.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "worker-vpc-jenkins-node"
}
}
# Create IGW in eu-west-1
resource "aws_internet_gateway" "IGW" {
provider = aws.region-master
vpc_id = aws_vpc.vpc_master.id
}
# Create IGW in eu-west-2
resource "aws_internet_gateway" "IGW-london" {
provider = aws.region-worker
vpc_id = aws_vpc.vpc_master_london.id
}
# Get all avaialabe AZ's in VPC for master region
data "aws_availability_zones" "azs" {
provider = aws.region-master
state = "available"
}
# Create subnet 01 in eu-west-1
resource "aws_subnet" "subnet_1" {
provider = aws.region-master
availability_zone = element(data.aws_availability_zones.azs.names, 0)
vpc_id = aws_vpc.vpc_master.id
cidr_block = "10.0.1.0/24"
}
# Create subnet 02 in eu-west-1
resource "aws_subnet" "subnet_2" {
provider = aws.region-master
vpc_id = aws_vpc.vpc_master.id
availability_zone = element(data.aws_availability_zones.azs.names, 1)
cidr_block = "10.0.2.0/24"
}
# Create subnet 02 in eu-west-2
resource "aws_subnet" "subnet_1_london" {
provider = aws.region-worker
vpc_id = aws_vpc.vpc_master_london.id
cidr_block = "192.168.1.0/24"
}
-
Validation and Application: After defining the resources, we use
terraform fmt
to ensure code consistency, followed byterraform validate
for syntax and configuration checks. Finally,terraform plan
andterraform apply
are executed to create the actual resources in AWS.
Next Steps:
In the following lesson, we will progress to setting up subnet associations, and route tables, and establishing VPC peering to interconnect our network components.
Top comments (0)