La tua bolletta AWS di fine mese ti fa digrignare i denti. €187/mese per uno stack Node.js + Postgres 50 GB + 200 GB di oggetti statici, di cui il 60% va a RDS e NAT Gateway. Sai che c'è qualcosa di più economico, ma esiti ad abbandonare il comfort di EC2 e la magia di S3. Questa guida è il resoconto onesto di una migrazione che abbiamo eseguito internamente nell'aprile 2026: da AWS a un singolo VPS Contabo a €9,99/mese, risparmio del 78% su 12 mesi, senza perdita significativa di funzionalità per il nostro caso d'uso.
Perché lasciare AWS nel 2026
Tre motivi cumulativi convergono nel 2026 e rendono la conversazione sulla migrazione più matura che mai.
Il primo motivo è ancora il costo grezzo. AWS scala brutalmente con il traffico in uscita fatturato a $0,09/GB oltre i 100 GB al mese, i NAT Gateway fatturati a $45/mese solo per esistere prima di contare il traffico, gli snapshot RDS che si accumulano silenziosamente a $0,095/GB-mese senza allarme predefinito, e i servizi gestiti come Lambda la cui fatturazione per invocazione si traduce in bollette mensili imprevedibili. Un progetto che inizia a $30/mese finisce regolarmente a $200-400/mese in 18 mesi senza alcun cambiamento visibile delle funzionalità. Sul nostro progetto interno descritto in questa guida, la bolletta AWS aveva raggiunto €187/mese per uno stack che avrebbe potuto funzionare su un singolo VPS da €9,99/mese — 19 volte più costoso per un servizio identico erogato.
Il secondo motivo è la sovranità legale. Anche in eu-central-1 (Francoforte), AWS rimane un'entità statunitense vincolata dal CLOUD Act, il che significa che un giudice federale statunitense può richiedere l'accesso ai dati memorizzati in Europa senza che l'utente finale o l'azienda cliente ne siano informati. Per i dati dei clienti GDPR, questo è un rischio legale formalizzato dalle raccomandazioni EDPB del 2020 post-Schrems II. Le prime controversie civili basate su questo rischio hanno iniziato a emergere nel 2024-2025 con il caso Mediawan / Microsoft Azure che è costato diversi milioni in spese legali e reindirizzamento d'emergenza dell'infrastruttura.
Il terzo motivo è il lock-in tecnico. IAM, KMS, VPC, Application Load Balancer, Lambda — ogni servizio AWS ti lega un po' di più alla piattaforma. Dopo due anni, "solo spostarsi" richiede almeno 3 settimane di sforzo cumulativo. Più aspetti a lasciare, più costosa diventa la migrazione da progettare e quindi da fare, il che crea un ciclo di procrastinazione in cui continui a pagare l'affitto ad AWS senza mai prendere la decisione. La soglia psicologica di migrazione è generalmente intorno al mese 6 o 12 di utilizzo attivo, dopo di che il costo dell'inerzia organizzativa diventa proibitivo.
Oltre a questi tre fattori strutturanti, tre trigger operativi spingono un'organizzazione a una migrazione concreta: un cambio di CIO o CTO che porta una nuova prospettiva sulla bolletta del cloud; un audit GDPR o di conformità che indica l'uso di AWS US come non conforme alla politica di sovranità interna; o un grave incidente tecnico AWS (interruzione us-east-1 propagata a livello mondiale come nel dicembre 2024) che ti ricorda che la dipendenza da un singolo fornitore ha un costo opportunità reale.
Contabo non è magico: è un provider VPS tedesco di fascia bassa che ti consegna una macchina Ubuntu e ti lascia fare il resto. Ma per l'80% dei carichi di lavoro SMB e SaaS individuali, è più che sufficiente — e 5 a 10 volte più economico.
Quando la migrazione conviene (e quando no)
Sii onesto con te stesso. AWS → Contabo ha senso se:
- Hai uno o due servizi da ospitare (API + DB + oggetti), non un'architettura a microservizi con 30 container.
- Il tuo traffico è prevedibile (nessun picco 100× rispetto alla base). Contabo non ha auto-scaling.
- Accetti di diventare l'amministratore:
apt,systemctl,ufw, backup manuali. - I tuoi dati non tollerano il CLOUD Act, o la tua bolletta AWS supera i €100/mese.
Al contrario, rimani su AWS se:
- Usi intensamente Lambda, Cognito, SageMaker, SQS gestito. Costo di migrazione > costo AWS.
- Hai un SLA cliente che richiede il 99,99% (Contabo è 99,9%, cioè ~8h di downtime/anno).
- Gestisci decine di TB e il tuo traffico in uscita supera la quota di Contabo (32 TB/mese).
Il nostro caso a VPNSmith: un singolo backend Node.js + Postgres + oggetti statici. Ogni casella spuntata. Decisione presa in un'ora.
Audit del costo AWS attuale (metodo Cost Explorer)
Prima di migrare, misura. Senza una base di riferimento, non c'è ROI.
- Vai su AWS Cost Explorer → Reports → Cost & Usage Reports.
- Filtra gli ultimi 3 mesi, granularità mensile, raggruppato per Service.
- Esporta come CSV. Apri in un foglio di calcolo. Tipicamente ottieni:
| Servizio AWS | Costo mensile medio |
|---|---|
| EC2 (1× t3.medium) | €32 |
| RDS (db.t3.small Postgres) | €38 |
| S3 (200 GB + richieste) | €12 |
| Trasferimento dati in uscita | €24 |
| NAT Gateway | €41 |
| CloudFront | €18 |
| Route 53 + vari | €6 |
| Totale | €171 / mese |
Annualizzato: €2,052. Nota il dettaglio: su questo profilo, NAT Gateway + Trasferimento dati = €65/mese, ovvero il 38% della bolletta solo per spingere byte dentro e fuori. Questo è il classico punto cieco.
Configurare il VPS Contabo di destinazione
Per questo stack, scegliamo un Cloud VPS 10 da Contabo: 6 vCPU, 16 GB RAM, 400 GB NVMe, 1 Gbps, 32 TB di traffico/mese. €9,99/mese con un impegno di 24 mesi.
Provisioning:
# Una volta consegnato il VPS (email Contabo con IP + password root)
ssh root@YOUR_IP
# Indurimento minimo
adduser ericg
usermod -aG sudo ericg
mkdir -p /home/ericg/.ssh
nano /home/ericg/.ssh/authorized_keys # incolla la tua chiave SSH
chmod 700 /home/ericg/.ssh && chmod 600 /home/ericg/.ssh/authorized_keys
chown -R ericg:ericg /home/ericg/.ssh
sed -i 's/^PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart ssh
apt update && apt upgrade -y
apt install -y ufw fail2ban
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
systemctl enable --now fail2ban
Dettagli completi di indurimento (Lynis, snapshot Contabo, journald) sono nella guida all'autogestione di WireGuard. Le stesse basi si applicano qui.
Migrazione Postgres RDS → Postgres autogestito (pg_dump passo dopo passo)
Questo è il pezzo più critico. Procedura collaudata:
Passo 1 — Installa Postgres 15 su Contabo
sudo apt install -y postgresql-15 postgresql-contrib-15
sudo systemctl enable --now postgresql
# Crea utente app e DB
sudo -u postgres psql <<EOF
CREATE USER appuser WITH PASSWORD 'PASTE_A_STRONG_PASSWORD';
CREATE DATABASE appdb OWNER appuser;
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
EOF
Abilita SSL e consenti connessioni remote solo dalla tua app (o solo locale se Postgres gira sulla stessa macchina dell'API — consigliato):
sudo nano /etc/postgresql/15/main/postgresql.conf
# ssl = on
# listen_addresses = 'localhost' (o '*' se l'app vive su un altro VPS)
sudo nano /etc/postgresql/15/main/pg_hba.conf
# Aggiungi: hostssl appdb appuser YOUR_APP_IP/32 scram-sha-256
sudo systemctl restart postgresql
Passo 2 — Dump da RDS
Dal tuo workstation, con accesso RDS:
pg_dump \
-h your-rds.eu-central-1.rds.amazonaws.com \
-U masteruser \
-d appdb \
-Fc \
-f appdb.dump
# Formato personalizzato (-Fc) = compresso + parallelizzabile al ripristino
Per un database di 50 GB, aspettati 10-25 min a seconda della classe RDS e della larghezza di banda.
Passo 3 — Trasferimento e ripristino
scp appdb.dump ericg@YOUR_CONTABO_IP:/tmp/
ssh ericg@YOUR_CONTABO_IP
sudo -u postgres pg_restore \
-d appdb \
-j 4 \
--no-owner \
--role=appuser \
/tmp/appdb.dump
# Verifica
sudo -u postgres psql -d appdb -c "SELECT count(*) FROM users;"
Verifica l'integrità confrontando count(*) delle tabelle grandi tra RDS e Contabo. Differenza = 0.
Passo 4 — Backup automatici post-migrazione
Sostituisci i backup automatici RDS con un semplice cron:
sudo nano /usr/local/bin/pg-backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d-%H%M)
sudo -u postgres pg_dump -Fc appdb > /var/backups/postgres/appdb-$DATE.dump
find /var/backups/postgres -name "appdb-*.dump" -mtime +14 -delete
# Spingi su MinIO o S3 esterno per off-site
rclone copy /var/backups/postgres/appdb-$DATE.dump remote:backups/postgres/
Cron giornaliero alle 3 AM: 0 3 * * * /usr/local/bin/pg-backup.sh.
Migrazione S3 → MinIO (rclone, compatibilità aws-cli)
MinIO è un archivio di oggetti open-source basato su Go, compatibile al 100% con l'API S3. Installazione diretta:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
sudo mkdir -p /data/minio
sudo useradd -r minio-user -s /sbin/nologin
sudo chown minio-user:minio-user /data/minio
sudo nano /etc/default/minio
MINIO_VOLUMES="/data/minio"
MINIO_OPTS="--console-address :9001 --address :9000"
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=PASTE_A_STRONG_32_CHAR_PASSWORD
unità systemd: prendi il .service ufficiale (documentazione MinIO) e systemctl enable --now minio.
Migra gli oggetti da S3 usando rclone:
sudo apt install -y rclone
rclone config
# n) Nuovo remote → nome: aws / s3 / AWS / incolla access_key + secret_key
# n) Nuovo remote → nome: minio / s3 / Altro / endpoint http://localhost:9000 / incolla admin + password
# Bucket-to-bucket
rclone copy aws:my-prod-bucket minio:my-prod-bucket --transfers=8 --progress
Per 200 GB: prevedi 2-5 ore a seconda della larghezza di banda in uscita AWS (che ti costerà ~€18 nel trasferimento finale — è il pedaggio di uscita).
Dal lato applicativo, nessun cambiamento di codice: il tuo aws-sdk-js continua a funzionare, basta puntare all'endpoint MinIO:
const s3 = new S3Client({
endpoint: 'https://storage.yourdomain.com',
region: 'us-east-1', // valore arbitrario richiesto
credentials: { accessKeyId, secretAccessKey },
forcePathStyle: true, // importante per MinIO
});
Cambio DNS senza downtime
Il metodo pulito, pianificato su 10 giorni:
- D-10: distribuisci l'intero stack su Contabo, esegui test interni tramite override
/etc/hosts. - D-7: abbassa il TTL dei record A in Route 53 da 3600 → 60 secondi. Lascia propagare 48h.
- D-3: congelamento delle funzionalità, ultimo
pg_dumpincrementale, ultimorclone syncdegli oggetti. - D-1: cambio durante un periodo di bassa attività (tipicamente 3 AM UTC per un pubblico UE). Cambia il record A: vecchio IP AWS → nuovo IP Contabo. Propagazione max 60s.
- D+0 → D+2: monitoraggio aggressivo (latenza, errori 5xx, metriche DB). Mantieni AWS in esecuzione "per sicurezza".
- D+7: pulizia AWS (termina EC2, elimina RDS dopo l'ultimo snapshot esportato, elimina il bucket S3 dopo il backup off-site).
Nessun downtime percepibile dall'utente se Postgres è sincronizzato (un congelamento in sola lettura di 5 minuti è sufficiente per spedire il delta finale).
Vuoi un VPS Contabo per avviare la tua migrazione? Contabo Cloud VPS 10, contratto di 24 mesi — €9,99/mese
Stima del ROI (tabella dei costi prima/dopo su 12 mesi)
Un confronto rappresentativo prima/dopo basato sui prezzi pubblicati da ciascun provider:
| Voce di costo | AWS (prima) | Contabo (dopo) |
|---|---|---|
| Calcolo (EC2 t3.medium / VPS Cloud 10) | €32 | €9,99 |
| Database (RDS / Postgres autogestito) | €38 | €0 (incluso) |
| Archiviazione oggetti (S3 200 GB / MinIO) | €12 | €0 (incluso) |
| Trasferimento dati in uscita | €24 | €0 (32 TB/mese inclusi) |
| NAT Gateway | €41 | €0 (non necessario) |
| CDN CloudFront | €18 | €12 (BunnyCDN esterno) |
| DNS Route 53 | €6 | €0,40 (Cloudflare gratuito + 1 dominio) |
| Backup off-site (Wasabi 50 GB) | €0 | €3 |
| Monitoraggio (UptimeRobot pro) | €0 | €4 |
| Totale mensile | €171 | €29,39 |
| Costo annuale | €2,052 | €352,68 |
Risparmio: €1,699,32/anno, ovvero 83% su questo profilo rappresentativo. La cifra esatta dipende dal tuo stack, ma per un carico di lavoro piccolo-medio comparabile, i risparmi nell'intervallo 75-85% sono tipici. Il ritorno è rapido: nessun costo di migrazione significativo (circa un giorno di lavoro).
Cosa perdi rispetto ad AWS (servizi gestiti)
Nessun marketing, chiariamo le perdite:
- RDS Multi-AZ auto-failover: su AWS, se il primario muore, il secondario subentra in 60-120s. Autogestito su Contabo, avresti bisogno di un secondo VPS + replica in streaming + Patroni. Fattibile ma aggiunge tempo operativo.
- 11 nove di durabilità di S3: Amazon garantisce il 99,999999999% di durabilità per oggetto (replica interna a 3-AZ). MinIO su un singolo disco = la durabilità del tuo disco NVMe. Soluzione: backup regolari su Wasabi o Backblaze B2 (€2-6/mese per 200 GB off-site).
- IAM granulare: sostituito da utenti Linux + sudoers + politiche MinIO. Meno granulare, più semplice da gestire.
- CloudWatch unificato: sostituisci con Prometheus + Grafana, o Netdata (installazione di 15 min), o un SaaS esterno (Better Stack, Sentry).
- Supporto enterprise 24/7: Contabo offre supporto via email, non il livello enterprise 24/7 venduto da AWS. Per operazioni critiche, pianifica un runbook + un secondo amministratore di turno.
Prevedi 3 a 5 ore di operazioni al mese in stato stabile: aggiornamenti Ubuntu, controlli di backup, avvisi di monitoraggio. Questo è il vero costo nascosto — non insormontabile, ma reale.
Leggi successivamente
- VPN autogestita su Contabo: guida completa a WireGuard 2026
- Hosting cloud GDPR: alternative ad AWS in Europa 2026
- Contabo vs Hetzner vs OVH: VPS in Europa per VPN autogestita 2026
- Fonti ufficiali: documentazione MinIO, replica in streaming PostgreSQL, guida AWS Cost Explorer, raccomandazioni EDPB Schrems II
Articolo pubblicato il 2026-06-02. Stima del ROI basata sui prezzi pubblicati da AWS e Contabo. Divulgazione affiliata: se scegli un VPS Contabo tramite i link in questo articolo, guadagniamo una commissione senza costi aggiuntivi per te. Le nostre raccomandazioni si basano su specifiche e prezzi pubblicati.
