Het stapsgewijs bouwen van een AWS Terraform VPC

Als je een AWS Virtual Private Cloud (VPC) wilt instellen, kun je dat doen via de AWS Management Console, maar het automatiseren ervan is veel leuker! In een DevOps-scenario is het opbouwen van AWS-services met tools zoals Terraform een schaalbaardere en geautomatiseerde benadering van het voorzien van cloudresources.

In deze tutorial leer je hoe je een Terraform-configuratie kunt maken en uitvoeren om een Terraform VPC helemaal opnieuw op te bouwen!

Vereisten

Deze post zal een stapsgewijze handleiding zijn. Als je wilt meedoen, zorg er dan voor dat je het volgende hebt:

  • Terraform – Deze tutorial zal Terraform v0.14.9 gebruiken op Ubuntu 18.04.5 LTS, maar elk besturingssysteem met Terraform zou moeten werken.
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.

Begrip van AWS VPCs

De AWS-cloud heeft tientallen verschillende services op het gebied van rekenkracht, opslag, netwerken en meer. Elk van deze services kan met elkaar communiceren, net als de services van een on-premises datacenter. Maar elk van deze services is onafhankelijk van elkaar en ze zijn niet per se geïsoleerd van andere services. De AWS VPC verandert dat.

Een AWS VPC is een enkel netwerk waarmee je AWS-services kunt starten binnen een enkel geïsoleerd netwerk. Technisch gezien is een AWS VPC bijna hetzelfde als het bezitten van een datacenter, maar dan met ingebouwde extra voordelen van schaalbaarheid, fouttolerantie, onbeperkte opslag, enzovoort.

AWS VPC architecture

AWS VPC’s zijn beperkt per regio. Je kunt geen VPC hebben die zich uitstrekt over regio’s, met maximaal vijf ondersteunde VPC’s per regio.

Het opbouwen van de Terraform-configuratie voor een AWS VPC

Genoeg gepraat, laten we aan de slag gaan met bouwen!

1. Om te beginnen, maak een map aan om je Terraform-configuratiebestanden in op te slaan. Deze tutorial zal een map genaamd terraform-vpc-demo aanmaken in je home-directory.

mkdir ~/terraform-vpc-demo
 cd ~/terraform-vpc-demo

2. Open je favoriete code-editor en kopieer/plak de volgende configuratie die al voor je is gemaakt, en sla het bestand op als main.tf binnen de map ~/terraform-vpc-demo. Informatie over elk te maken resource staat inline.

Het bestand main.tf bevat alle resources die moeten worden voorzien.

Terraform gebruikt verschillende soorten configuratiebestanden. Elk bestand is geschreven in ofwel platte tekstformaat of JSON-formaat. Ze hebben een specifieke benamingconventie van hetzij .tf of .tfjson-formaat.

De onderstaande Terraform-configuratie:

  • Maakt een VPC
  • Maakt een Internet Gateway en koppelt deze aan de VPC om verkeer binnen de VPC bereikbaar te maken voor de buitenwereld.
  • Maakt een openbaar en privé subnet

Subnetten zijn netwerken binnen netwerken. Ze zijn ontworpen om het netwerkverkeer efficiënter te laten verlopen en kleinere, beheersbare ‘brokken’ IP-adressen te bieden

  • Maakt een routeringstabel voor de openbare en privé-subnetten en koppelt de tabel aan beide subnetten
  • Maakt een NAT Gateway om privé-subnetten in staat te stellen verbinding te maken met internet zonder dat elk resource een extern routeerbaar IP-adres nodig heeft.
Create the VPC
 resource "aws_vpc" "Main" {                # Hier wordt een VPC gemaakt
   cidr_block       = var.main_vpc_cidr     # Definieer het CIDR-blok gebruik 10.0.0.0/24 voor demo
   instance_tenancy = "default"
 }
 Create Internet Gateway and attach it to VPC
 resource "aws_internet_gateway" "IGW" {    # Een internetgateway maken
    vpc_id =  aws_vpc.Main.id               # vpc_id zal worden gegenereerd nadat we VPC hebben aangemaakt
 }
 Create a Public Subnets.
 resource "aws_subnet" "publicsubnets" {    # Openbare subnets maken
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.public_subnets}"        # CIDR-blok van openbare subnets
 }
 Create a Private Subnet                   # Prive-subnets maken
 resource "aws_subnet" "privatesubnets" {
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.private_subnets}"          # CIDR-blok van privé-subnets
 }
 Route table for Public Subnet's
 resource "aws_route_table" "PublicRT" {    # RT maken voor openbare subnet
    vpc_id =  aws_vpc.Main.id
         route {
    cidr_block = "0.0.0.0/0"               # Verkeer van openbare subnetten bereikt internet via internetgateway
    gateway_id = aws_internet_gateway.IGW.id
     }
 }
 Route table for Private Subnet's
 resource "aws_route_table" "PrivateRT" {    # RT maken voor privé-subnet
   vpc_id = aws_vpc.Main.id
   route {
   cidr_block = "0.0.0.0/0"             # Verkeer van privé-subnet bereikt internet via NAT-gateway
   nat_gateway_id = aws_nat_gateway.NATgw.id
   }
 }
 Route table Association with Public Subnet's
 resource "aws_route_table_association" "PublicRTassociation" {
    subnet_id = aws_subnet.publicsubnets.id
    route_table_id = aws_route_table.PublicRT.id
 }
 Route table Association with Private Subnet's
 resource "aws_route_table_association" "PrivateRTassociation" {
    subnet_id = aws_subnet.privatesubnets.id
    route_table_id = aws_route_table.PrivateRT.id
 }
 resource "aws_eip" "nateIP" {
   vpc   = true
 }
 Creating the NAT Gateway using subnet_id and allocation_id
 resource "aws_nat_gateway" "NATgw" {
   allocation_id = aws_eip.nateIP.id
   subnet_id = aws_subnet.publicsubnets.id
 }

3. Maak nu een ander bestand aan binnen de ~/terraform-vpc-demo directory, noem het vars.tf en plak de onderstaande inhoud.

Vars.tf is een Terraform-variabelenbestand dat alle variabelen bevat waarnaar het configuratiebestand verwijst.

Je kunt variabelenverwijzingen in het configuratiebestand zien door:

  • var.region
  • var.main_vpc_cidr
  • var.public_subnets
  • var.private_subnets
variable "region" {}
 variable "main_vpc_cidr" {}
 variable "public_subnets" {}
 variable "private_subnets" {}

Het is mogelijk om alle configuratiewaarden in één configuratiebestand op te nemen. Om dingen duidelijk te houden en het gemakkelijker te maken voor ontwikkelaars en beheerders, is het belangrijk om zaken op te splitsen.

4. Maak nog een bestand aan binnen de map ~/terraform-vpc-demo, plak de volgende code in en noem het provider.tf om de AWS-provider te definiëren. De tutorial zal bronnen creëren in de regio us-east-2.

Het providersbestand definieert providers zoals AWS, Oracle of Azure, etc., zodat Terraform kan verbinden met de juiste cloudservices. provider "aws" { region = "us-east-2" }

provider "aws" {
   region = "us-east-2"
 }

5. Maak tot slot nog een bestand aan binnen de map ~/terraform-vpc-demo, noem het terraform.tfvars, en plak de onderstaande code. Dit variabelenbestand bevat de waarden die Terraform zal gebruiken om de variabelen in het configuratiebestand te vervangen.

main_vpc_cidr = "10.0.0.0/24"
 public_subnets = "10.0.0.128/26"
 private_subnets = "10.0.0.192/26"

Open nu je favoriete terminal (Bash in dit geval) en controleer of alle benodigde bestanden in de map staan door het tree-commando uit te voeren.

tree terraform-vpc-demo  
Folder structure of terraform files

Uitvoeren van Terraform om de AWS VPC te creëren

Nu je het Terraform-configuratiebestand en de variabelenbestanden klaar hebt staan, is het tijd om Terraform te starten en de VPC te maken! Voor het inrichten van een Terraform-configuratie gebruikt Terraform typisch een driestappenbenadering terraform initterraform planterraform apply. Laten we nu elke stap doorlopen.

1. Open een terminal en navigeer naar de ~\terraform-vpc-demo map.

cd ~\terraform-vpc-demo

2. Voer het terraform init commando uit in dezelfde map. Het terraform init commando initialiseert de plugins en providers die nodig zijn om met resources te werken.

terraform init

Als alles goed gaat, zou je de melding Terraform is succesvol geïnitialiseerd in de uitvoer moeten zien, zoals hieronder getoond.

Terraform initialized successfully

3. Voer nu het terraform plan commando uit. Dit is een optionele, maar aanbevolen stap om te controleren of de syntaxis van je configuratie correct is en je een overzicht te geven van welke resources zullen worden ingericht in je infrastructuur. terraform plan

terraform plan

Als het succesvol is, zou je een bericht moeten zien zoals Plan: "X" toe te voegen, "Y" te wijzigen, of "Z" te vernietigen in de uitvoer om aan te geven dat het commando succesvol was. Je zult ook elke AWS-resource zien die Terraform van plan is te creëren.

Plan command execution

4. Vertel vervolgens aan Terraform om daadwerkelijk de AWS VPC en resources te voorzien met behulp van terraform apply. Wanneer je terraform apply aanroept, zal Terraform de configuratie lezen (main.tf) en de andere bestanden om een configuratie samen te stellen. Het zal die configuratie vervolgens naar AWS sturen als instructies om de VPC en andere componenten te bouwen.

terraform apply
Terraform apply command execution

Merk de IDs op die zijn gedefinieerd in de Terraform-uitvoer. Je hebt deze IDs nodig om de resources die in de volgende sectie zijn gemaakt te correleren.

De Terraform-opdracht is succesvol uitgevoerd, dus laten we overschakelen naar de AWS Management Console om te bevestigen dat de VPC en componenten succesvol zijn aangemaakt.

Het verifiëren van de AWS Terraform VPC

Tegen die tijd zou je de VPC met Terraform moeten hebben gecreëerd. Laten we dit controleren door handmatig te kijken of de VPC in de AWS Management Console is aangemaakt.

1. Open je favoriete webbrowser en ga naar de AWS Management Console en log in.

2. Terwijl je in de Console bent, klik op de zoekbalk bovenaan, zoek naar ‘vpc’ en klik op het VPC-menu-item.

Navigating to the VPC service

3. Eenmaal op de VPC-pagina, klik op Jouw VPC’s. Je zou de VPC moeten zien die is aangemaakt met dezelfde ID die Terraform eerder heeft geretourneerd.

VPC created

4. Aangezien Terraform niet alleen de VPC-bron heeft gemaakt, maar alle bronnen die nodig zijn voor de VPC, moet je ook elke bron op deze pagina vinden.

Subnets created
Route tables created
Internet Gateway created
NAT Gateway created

Met alle componenten succesvol gemaakt, met behulp van Terraform, is deze VPC klaar voor gebruik!

Conclusie

In deze tutorial heb je geleerd hoe je Terraform kunt gebruiken om een AWS VPC en de bijbehorende componenten te implementeren.

Het bouwen van een Amazon Virtual Private Cloud met Terraform stelt je in staat om snel, eenvoudig en voorspelbaar resources te maken. Je bent nu klaar om deze kennis te gebruiken met andere AWS-services en krachtige services erbovenop te bouwen.

Source:
https://adamtheautomator.com/terraform-vpc/