Files
laboratori-cloud/labs/lab-05-database/tutorial/01-deploy-rds-database.md
Luca Sacchi Ricciardi f8544afe35 docs(06-02): create Diátaxis documentation for Lab 05 Database & RDS
Documentation (6 files, 1500+ lines):
Tutorials (3):
- 01-deploy-rds-database.md: Deploy PostgreSQL in private network
- 02-data-persistence.md: Data persistence with named volumes
- 03-security-compliance.md: INF-01/02/03/04 compliance

How-to Guides (1):
- connect-to-postgresql.md: Connection methods

Reference (1):
- postgresql-commands.md: PostgreSQL command reference

Explanation (1):
- database-rds-parallels.md: Docker↔RDS parallels with architecture diagrams

Key concepts:
- PostgreSQL container → RDS Instance
- Private network → VPC Private Subnet
- Named volume → EBS volume
- Resource limits → DB instance class

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 17:41:29 +02:00

4.0 KiB

Tutorial: Deploy Database in VPC Privata (RDS Simulation)

In questo tutorial imparerai a deployare un database PostgreSQL in una rete privata simulando RDS in AWS VPC.

Obiettivo

Deployare PostgreSQL in Docker private network che simula RDS in VPC privata AWS.

Prerequisiti

  • Lab 02 (Network & VPC) completato
  • Docker Engine in esecuzione
  • Comandi base: docker-compose, docker ps, docker exec

Passo 1: Verifica l'ambiente

Verifica che le reti private siano già state create.

Esegui:

# Verifica reti esistenti
docker network ls | grep vpc

# Atteso:
# lab05-vpc-private
# lab05-vpc-public

Se le reti non esistono, consulta prima il Lab 02.


Passo 2: Esamina docker-compose.yml

Apri il file docker-compose.yml e osserva la configurazione del database.

Esegui:

cat docker-compose.yml | grep -A 30 "db:"

Configurazione chiave:

  • image: postgres:16-alpine
  • networks: solo vpc-private (nessuna rete pubblica)
  • volumes: db-data per persistenza
  • ports: NESSUNA porta esposta
  • resources: 2 vCPU, 4GB RAM

Passo 3: Avvia il database

Deploya il database nella rete privata.

Esegui:

# Avvia i container
docker-compose up -d

# Verifica che il database sia in esecuzione
docker ps | grep lab05-db

Atteso:

lab05-db   postgres:16-alpine   Up   5432/tcp   lab05-vpc-private

Nota: 5432/tcp significa che la porta è aperta nel container, ma NON è mappata sull'host.


Passo 4: Verifica isolamento di rete

Il database NON deve essere accessibile dall'host.

Esegui:

# Verifica NESSUNA porta mappata su host
docker port lab05-db

# Atteso: (nessun output)

Se vedi una porta mappata (es. 0.0.0.0:5432->5432/tcp), c'è un errore di configurazione.


Passo 5: Verifica healthcheck

PostgreSQL impiega qualche secondo per avviarsi.

Esegui:

# Verifica health status
docker inspect lab05-db --format '{{.State.Health.Status}}'

# Oppure usa pg_isready
docker exec lab05-db pg_isready -U lab05_user

Atteso: healthy o accepting connections


Passo 6: Connettiti al database

Puoi connetterti SOLO da container nella stessa rete privata.

Esegui dal container app:

# Connettiti dal container app
docker exec lab05-app psql -h db -U lab05_user -d lab05_db

# Una volta connesso, esegui:
lab05_db=> SELECT version();
lab05_db=> \q

Se provi a connetterti dall'host:

# Questo FALLIRA' (corretto!)
psql -h localhost -U lab05_user -d lab05_db

# Errore: connection refused

Passo 7: Crea dati di test

Crea una tabella e inserisci dati per verificare la persistenza.

Esegui:

docker exec lab05-db psql -U lab05_user -d lab05_db -c "
CREATE TABLE test_table (
    id SERIAL PRIMARY KEY,
    data TEXT,
    created_at TIMESTAMP DEFAULT NOW()
);
"

docker exec lab05-db psql -U lab05_user -d lab05_db -c "
INSERT INTO test_table (data) VALUES ('Test RDS simulation');
"

Verifica i dati:

docker exec lab05-db psql -U lab05_user -d lab05_db -c "
SELECT * FROM test_table;
"

Verifica Finale

Esegui lo script di verifica finale.

Esegui:

cd tests
./99-final-verification.sh

Tutti i test devono PASSARE.


Parallelismo con AWS RDS

Locale AWS
PostgreSQL container RDS Instance
Private network VPC Private Subnet
Named volume EBS volume
Resource limits DB instance class
No host access Security group restriction

Troubleshooting

Database non parte

# Logs del container
docker logs lab05-db

# Verifica risorse
docker stats lab05-db

Connessione fallita

# Verifica rete
docker network inspect lab05-vpc-private

# Verifica container connessi
docker inspect lab05-db --format '{{.NetworkSettings.Networks}}'

Persi dati dopo riavvio

# Verifica volume esista
docker volume ls | grep db-data

# Verifica montaggio
docker inspect lab05-db --format '{{.Mounts}}'

Prossimo tutorial: Implementare healthchecks e dipendenze.