Skip to main content

πŸ”§ Terraform

Terraform gestisce tutta l'infrastruttura GCP in modo dichiarativo.
I file sono in infra/terraform_k8s/.

πŸ“ Struttura File​

infra/terraform_k8s/
β”œβ”€β”€ main.tf # Provider + VPC + NAT
β”œβ”€β”€ gke.tf # Cluster GKE + Node Pool
β”œβ”€β”€ database.tf # Cloud SQL PostgreSQL
β”œβ”€β”€ secrets.tf # Secret Manager
β”œβ”€β”€ registry.tf # Artifact Registry
β”œβ”€β”€ variables.tf # Variabili configurabili
β”œβ”€β”€ outputs.tf # Output del terraform
β”œβ”€β”€ terraform.tfvars # Valori delle variabili
└── terraform.tfstate # Stato (NON TOCCARE)

Spiegazione File​

main.tf - Provider e Networking​

RisorsaNomeScopo
google_compute_networkvisla-k8s-vpcVPC principale
google_compute_subnetworkvisla-k8s-subnetSubnet nodi (10.0.0.0/20)
google_compute_routervisla-k8s-routerRouter per NAT
google_compute_router_natvisla-k8s-natNAT per traffico in uscita

Range IP Secondari:

  • pods: 10.1.0.0/16
  • services: 10.2.0.0/20

gke.tf - Cluster Kubernetes​

RisorsaNomeScopo
google_container_clustervisla-k8s-clusterCluster GKE zonal
google_container_node_poolvisla-node-pool2 nodi e2-standard-2

Caratteristiche:

  • Private Nodes: I nodi non hanno IP pubblici
  • Public Endpoint: Master accessibile da internet (per kubectl)
  • Workload Identity: Link tra K8s SA e GCP SA

database.tf - Cloud SQL​

RisorsaScopo
google_compute_global_addressRange IP per VPC peering
google_service_networking_connectionConnessione privata VPC-SQL
google_sql_database_instancePostgreSQL 17 (db-f1-micro)
google_sql_database10 database (auth, billing, ...)
google_sql_user10 utenti con password random

secrets.tf - Secret Manager​

SecretUso
visla-jwt-secretJWT signing key
visla-stripe-api-keyStripe API key
visla-db-{service}-passwordPassword DB per servizio

registry.tf - Artifact Registry​

Repository Docker per le immagini container:

europe-west8-docker.pkg.dev/visla-k8s-2026/visla/{service}:latest

πŸš€ Comandi​

cd infra/terraform_k8s

# Inizializza
terraform init

# Verifica
terraform plan

# Applica
terraform apply

# Visualizza output
terraform output
Attenzione

Non modificare terraform.tfstate manualmente. Cloud SQL puΓ² richiedere 10-15 minuti per la creazione.