Costruzione di una VPC AWS Terraform Passo dopo Passo

Se hai bisogno di configurare AWS Virtual Private Cloud (VPC), puoi farlo tramite la Console di Gestione AWS, ma automatizzarlo è molto più divertente! In uno scenario DevOps, la creazione di servizi AWS tramite strumenti come Terraform è un approccio più scalabile e automatizzato alla fornitura di risorse cloud.

In questo tutorial, imparerai come creare e eseguire una configurazione Terraform per costruire un VPC Terraform da zero!

Prerequisiti

Questo post sarà un tutorial passo-passo. Se desideri seguirci, assicurati di avere quanto segue:

  • Terraform – Questo tutorial utilizzerà Terraform v0.14.9 in esecuzione su Ubuntu 18.04.5 LTS, ma qualsiasi sistema operativo con Terraform dovrebbe funzionare.
  • 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.

Comprensione dei VPC AWS

Il cloud AWS dispone di diverse decine di servizi diversi, tra cui compute, storage, networking e altro ancora. Ciascuno di questi servizi può comunicare tra loro come i servizi di un datacenter in loco. Tuttavia, ciascuno di questi servizi è indipendente dagli altri e non è necessariamente isolato dagli altri servizi. L’AWS VPC cambia questa situazione.

Un AWS VPC è una singola rete che consente di lanciare servizi AWS all’interno di una singola rete isolata. Tecnicamente, un AWS VPC è quasi la stessa cosa di possedere un datacenter, ma con i vantaggi aggiuntivi di scalabilità, tolleranza ai guasti, archiviazione illimitata, ecc.

AWS VPC architecture

Gli AWS VPC sono limitati alla regione. Non è possibile avere un VPC che si estende su più regioni, con un massimo di cinque VPC supportati per regione.

Creazione della configurazione di Terraform per un AWS VPC

Basta parlare, passiamo alla creazione!

1. Per iniziare, crea una cartella in cui archiviare i file di configurazione di Terraform. Questo tutorial creerà una cartella chiamata terraform-vpc-demo nella tua directory home.

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

2. Apri il tuo editor di codice preferito e copia/incolla la seguente configurazione già creata, salvando il file come main.tf all’interno della directory ~/terraform-vpc-demo. Le informazioni su ciascuna risorsa da creare sono incluse nel file.

Il file main.tf contiene tutte le risorse che devono essere provisionate.

Terraform utilizza diversi tipi di file di configurazione. Ciascun file è scritto in formato testo normale o formato JSON. Hanno una convenzione di denominazione specifica, sia in formato .tf che .tfjson.

La configurazione Terraform qui sotto:

  • Crea una VPC
  • Crea un Gateway Internet e lo collega alla VPC per consentire al traffico all’interno della VPC di essere raggiungibile dall’esterno.
  • Crea una subnet pubblica e una privata

Le subnet sono reti all’interno di reti. Sono progettate per aiutare il flusso di traffico di rete ad essere più efficiente e fornire “porzioni” più piccole e gestibili di indirizzi IP

  • Crea una tabella di route per le subnet pubbliche e private e associa la tabella a entrambe le subnet
  • Crea un NAT Gateway per consentire alle subnet private di accedere a Internet senza necessità di un indirizzo IP esternamente instradabile assegnato a ciascuna risorsa.
Create the VPC
 resource "aws_vpc" "Main" {                # Creazione della VPC qui
   cidr_block       = var.main_vpc_cidr     # Definizione del blocco CIDR, utilizzare 10.0.0.0/24 per la demo
   instance_tenancy = "default"
 }
 Create Internet Gateway and attach it to VPC
 resource "aws_internet_gateway" "IGW" {    # Creazione del Gateway Internet
    vpc_id =  aws_vpc.Main.id               # vpc_id sarà generato dopo la creazione della VPC
 }
 Create a Public Subnets.
 resource "aws_subnet" "publicsubnets" {    # Creazione delle subnet pubbliche
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.public_subnets}"        # Blocco CIDR delle subnet pubbliche
 }
 Create a Private Subnet                   # Creazione delle subnet private
 resource "aws_subnet" "privatesubnets" {
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.private_subnets}"          # Blocco CIDR delle subnet private
 }
 Route table for Public Subnet's
 resource "aws_route_table" "PublicRT" {    # Creazione del RT per la subnet pubblica
    vpc_id =  aws_vpc.Main.id
         route {
    cidr_block = "0.0.0.0/0"               # Il traffico dalla subnet pubblica raggiunge Internet tramite il Gateway Internet
    gateway_id = aws_internet_gateway.IGW.id
     }
 }
 Route table for Private Subnet's
 resource "aws_route_table" "PrivateRT" {    # Creazione del RT per la subnet privata
   vpc_id = aws_vpc.Main.id
   route {
   cidr_block = "0.0.0.0/0"             # Il traffico dalla subnet privata raggiunge Internet tramite il Gateway NAT
   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. Ora, crea un altro file all’interno della directory ~/terraform-vpc-demo, chiamalo vars.tf e incolla il contenuto seguente.

Vars.tf è un file di variabili Terraform che contiene tutte le variabili a cui il file di configurazione fa riferimento.

Puoi vedere il riferimento alle variabili nel file di configurazione tramite:

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

È possibile includere tutti i valori di configurazione in un singolo file di configurazione. Per mantenere le cose chiare e rendere più facile per gli sviluppatori e gli amministratori, è importante suddividere le cose.

4. Crea un altro file all’interno della directory ~/terraform-vpc-demo, incolla il seguente codice e chiamalo provider.tf per definire il provider AWS. Il tutorial creerà risorse nella regione us-east-2.

Il file dei provider definisce provider come AWS, Oracle o Azure, ecc., in modo che Terraform possa connettersi ai servizi cloud corretti. provider "aws" { region = "us-east-2" }

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

5. Infine, crea un altro file all’interno della directory ~/terraform-vpc-demo, chiamalo terraform.tfvars, e incolla il codice di seguito. Questo file di variabili contiene i valori che Terraform utilizzerà per sostituire i riferimenti alle variabili all’interno del file di configurazione.

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

Ora, apri il tuo terminale preferito (Bash in questo caso) e verifica che tutti i file richiesti siano contenuti nella cartella eseguendo il comando tree.

tree terraform-vpc-demo  
Folder structure of terraform files

Esecuzione di Terraform per creare la VPC AWS

Ora che hai il file di configurazione Terraform e i file delle variabili pronti, è il momento di avviare Terraform e creare la VPC! Per eseguire la configurazione di Terraform, Terraform utilizza tipicamente un approccio a tre fasi terraform initterraform planterraform apply. Ora passiamo attraverso ogni fase.

1. Apri un terminale e vai alla directory ~\terraform-vpc-demo.

cd ~\terraform-vpc-demo

2. Esegui il comando terraform init nella stessa directory. Il comando terraform init inizializza i plugin e i provider necessari per lavorare con le risorse.

terraform init

Se tutto va bene, dovresti vedere il messaggio Terraform è stato inizializzato con successo nell’output, come mostrato di seguito.

Terraform initialized successfully

3. Ora, esegui il comando terraform plan. Questa è un’azione facoltativa, ma consigliata, per assicurarti che la sintassi della tua configurazione sia corretta e per darti una panoramica delle risorse che verranno create nella tua infrastruttura. terraform plan

terraform plan

Se avete successo, dovreste vedere un messaggio come Piano: "X" da aggiungere, "Y" da modificare, o "Z" da eliminare nell’output per indicare che il comando è stato eseguito con successo. Vedrete anche tutte le risorse AWS che Terraform intende creare.

Plan command execution

4. Successivamente, dite effettivamente a Terraform di provvedere alla VPC AWS e alle risorse utilizzando terraform apply . Quando invocate terraform apply , Terraform leggerà la configurazione ( main.tf ) e gli altri file per compilare una configurazione. Quindi invierà quella configurazione ad AWS come istruzioni per costruire la VPC e altri componenti.

terraform apply
Terraform apply command execution

Notate gli ID definiti nell’output di Terraform. Avrete bisogno di questi ID per correlare le risorse create nella sezione successiva.

Il comando Terraform è stato eseguito correttamente, quindi passiamo alla Console di Gestione AWS per confermare che la VPC e i componenti siano stati creati con successo.

Verifica della VPC Terraform AWS

A questo punto, dovreste aver creato la VPC con Terraform. Verifichiamo manualmente la presenza della VPC nella Console di Gestione AWS.

1. Aprite il vostro browser web preferito e navigare fino alla Console di Gestione AWS e accedete.

2. Mentre siete nella Console, fate clic sulla barra di ricerca in alto, cercate ‘vpc’ e fate clic sull’ elemento di menu VPC .

Navigating to the VPC service

3. Una volta sulla pagina VPC, fate clic su Le vostre VPC . Dovreste vedere la VPC creata con lo stesso ID restituito da Terraform in precedenza.

VPC created

4. Poiché Terraform ha creato più di una semplice risorsa VPC, ma tutte le risorse necessarie per la VPC, dovresti quindi trovare ogni risorsa anche in questa pagina.

Subnets created
Route tables created
Internet Gateway created
NAT Gateway created

Con tutti i componenti creati con successo, utilizzando Terraform, questa VPC è pronta per essere utilizzata!

Conclusioni

In questo tutorial, hai imparato come utilizzare Terraform per distribuire una VPC AWS e i suoi componenti.

La creazione di una Virtual Private Cloud di Amazon con Terraform ti consente di creare risorse in modo rapido, semplice e prevedibile. Ora sei pronto per utilizzare questa conoscenza con altri servizi AWS e creare servizi potenti su di essa.

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