Buongiorno a tutti cari lettori, iniziamo l’anno a bomba con nuovi articoli e una nuova categoria Cloud, questa categoria sarà incentrata sul mondo del cloud computing, nell’articolo di oggi configureremo un’infrastruttura AWS utilizzando Terraform per ospitare una web app su un’istanza EC2. Questa guida include la configurazione della rete, il provisioning delle risorse e il deployment della web app.
Prerequisites
- Account AWS attivo.
- Sì bisogna aver attivato un’account di Amazon Web Service, qui il link per registrarvi o accedere al portale, questo prerequisito serve per farvi creare le risorse in cloud, banalmante il cloud è creare risorse IT( server, database, reti …) via internet.
- Terraform installato sul tuo sistema.
- Terraform è uno strumentio Infrastructure as Code (IaC) consentono di gestire l’infrastruttura con i file di configurazione piuttosto che attraverso un’interfaccia utente grafica. IaC è progettato per creare, modificare e gestire le risorse sulla base della configurazione che scrivi nei file
.tf
. - qui il link per installarlo dal loro sito.
- Terraform è uno strumentio Infrastructure as Code (IaC) consentono di gestire l’infrastruttura con i file di configurazione piuttosto che attraverso un’interfaccia utente grafica. IaC è progettato per creare, modificare e gestire le risorse sulla base della configurazione che scrivi nei file
- AWS CLI configurata con un profilo valido ecco qui il link ufficiale di aws e questo video che lo spiega molto brevemente.
Obiettivi
- Creare un’istanza EC2 utilizzando Terraform.
- Configurare Docker tramite uno script User Data.
- Scaricare automaticamente un’immagine Docker (es.
nginx
o altre immagini a vostro piacimento) durante l’avvio.
1. Scrivere il file Terraform
Senza perdere altro tempo in questo punto, una volta configurata le credenziali di aws, si può procedere con la creazione del file terraform. La configurazione del file main.tf
serve per creare i componenti AWS con Terraform si basa sulla definizione di risorse che descrivono gli elementi infrastrutturali da creare su AWS, quindi fondamentale avere credenziali valide e ben configurate.
Divideremo la struttura del file main.tf in varie parti per spiegare brevemente quello che andremo ad usare.
1. Provider
Il provider specifica quale piattaforma cloud utilizzerai (in questo caso, AWS, potremmo usare altri cloud pubblici come Azure). Terraform utilizza il provider per autenticarsi e interagire con l’API di AWS.
provider "aws" {
region = "eu-west-1"
}
region
: È importante scegliere una regione, nel mio caso io scelgo eu-west-1 = Irlanda, potete visionare le regioni sulla console di AWS, in cui vuoi che le tue risorse siano create. Assicurati che l’AMI che utilizzi sia disponibile nella regione scelta.
2. Risorsa EC2 da inserire nel Terraform
Questa è la risorsa principale per creare un’istanza EC2. I valori più importanti sono:
Parametri principali
resource "aws_instance" "ec2_with_docker" {
ami = "ami-01f5f2e96f603b15b"
instance_type = "t2.micro"
key_name = "terraform"
}
ami
: L’Amazon Machine Image (AMI) è il sistema operativo preconfigurato. Utilizza un’AMI compatibile con il tuo scopo, come Amazon Linux 2 (puoi trovare gli ID AMI nella documentazione AWS o nella tua console AWS).instance_type
: Specifica il tipo di istanza, dalla sua grandezza alla sua velocità .key_name
: Il nome del key pair necessario per accedere all’istanza via SSH. Devi già aver creato un key pair nella console AWS, accedendo alla console EC2 .

Quando si è capito che tipo di immagine avere e la dimensione dell’ec2, si segna il codice ID dell’ami e si procede con la creazione della coppia di chiavi o proseguendo in basso o nella sidebar di sinistra.

Un procedimento molto semplice per creare una coppia di chiavi, bisogna dare un nome, scegliere tra il tipo di coppia ed il formato che vi serve di più a voi. Infine cliccate sulla creazione della coppia di chiave.
User Data Script
User Data è uno script che Terraform esegue automaticamente al primo avvio dell’istanza EC2. Qui puoi configurare Docker e altre applicazioni.
user_data = <<-EOF
#!/bin/bash
sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -aG docker ec2-user
docker pull matteo29mar/web-app-flask:latest
EOF
Usa script di bash o PowerShell per configurazioni personalizzate.
Questo script installa Docker, avvia il servizio e scarica l’immagine docker pull matteo29mar/web-app-flask:latest
, nel mio caso utilizzo la web-app dell’anatra fatta nel precedente articolo, ma voi potete usare qualsiasi altra immagine docker.
N.B ricordatevi di inserire il corretto path per pullare l’immagine perché se non riesce a trovare l’immagine installerà tutto ma il container non ci sarà ma tutto il resto sì.
3. Gruppo di Sicurezza
Un gruppo di sicurezza definisce quali connessioni in entrata e in uscita sono consentite per la tua istanza.
resource "aws_security_group" "docker_sg" {
name_prefix = "docker-sg"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
- Ingress: Definisce le regole per il traffico in entrata (SSH sulla porta 22 e HTTP sulla porta 80).
- Egress: Consente il traffico in uscita (necessario per Docker e aggiornamenti di sistema), se usate immagini docker particolari che rischiedono range particolari come me con la 5000 dovete modifcare il from_port ed il to_port con le porte desiderate.
cidr_blocks
: Può essere ristretto a un IP specifico per maggiore sicurezza (es.203.0.113.0/32
).
Il codice main.tdf completo

4. Esecuzione Completa del file Terraform
- Inizializza Terraform usando il comando:
terraform init
Una volta completato il file di terraform si procede con l’inizializzare il file

- Pianificare Terraform con il comando:
terraform plan


- Applicare Terraform con il comando:
terraform apply


2. Esecuzione dell’infrastruttura
Quando vediamo la scritta “Apply complete!”siamo pronti per andare a vedere se la nostra infrastruttura è pronta, ci colleghiamo su aws sezione Ec2 della regione che abbiamo scelto in fase di creazione del file e controlliamo se c’è un’istanza attiva.

Ci prendiamo indirizzo Ipv4 pubblico che ci fornisce aws e andiamo a testare la web app.

Funziona! io ho messo come web app python della paperella che trovate nel precedente articolo, visto che è una web app personalizzata ho divuto inserire a mano la porta 5000 per farlo funzionare, infine ho qliccato la Q della mia tastiera e sono apparse le paperelle.
Siamo alla fine di questo articolo, quando l’infrastruttura non ci serve più andiamo a spegnere l’infrastruttura per evitare costi indesiderati, visto che paghiamo perciò che utilizziamo sul cloud.
Torniamo sul terminale e digitiamo il comando
terraform destroy


Vi lascio il link github per accedere al file terraform, se vi può essere utile.
Differenza principale tra i comandi
Comando | Cosa fa | Quando usarlo |
---|---|---|
terraform init | Inizializza il progetto e configura il backend e i provider. | All’inizio o dopo aver aggiunto provider/moduli. |
terraform plan | Simula le modifiche all’infrastruttura e mostra un piano d’azione. | Per verificare cosa verrà fatto prima di apply . |
terraform apply | Esegue le modifiche effettive sull’infrastruttura, aggiornando lo stato. | Per creare o aggiornare risorse. |
terraform destroy | Elimina tutte le risorse gestite da Terraform. | Per rimuovere l’infrastruttura gestita. |
3. Conclusione
Siamo arrivati alla fine di questo articolo abbiamo visto come creare un’istanza EC2 con Docker utilizzando Terraform e automatizzare il download di un’immagine Docker. Questa configurazione è un ottimo punto di partenza per progetti più complessi che includono containerizzazione e orchestrazione.
Spero che questo articolo vi sia piaciuto e che la nuova categoria possa interessarvi.
Se hai domande o vuoi approfondire, lascia un commento!
Seguici sui social!