Exercice 06 : Créer une base de données RDS PostgreSQL
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lancer une instance RDS PostgreSQL dans un subnet privé
- ✅ Configurer les Security Groups pour une communication sécurisée EC2 → RDS
- ✅ Se connecter à la base depuis une instance EC2 (pas depuis l'internet public)
- ✅ Activer les sauvegardes automatiques et comprendre le Multi-AZ
Durée estimée : 40 minutes
Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)
Prérequis : VPC avec sous-réseaux créé (Exercice 02), notions de PostgreSQL
📖 Contexte
Gérer une base de données soi-même (installation, patches, sauvegardes, réplication) est fastidieux. RDS (Relational Database Service) délègue cette gestion à AWS : vous vous concentrez sur vos données, AWS gère le reste. RDS supporte PostgreSQL, MySQL, Oracle, SQL Server, et Aurora (version AWS-native).
📋 Énoncé
Créez une base RDS PostgreSQL, connectez-vous depuis une instance EC2 dans votre VPC et effectuez des opérations basiques.
🧭 Déroulement de l'exercice
Tâche 1 : Créer le Security Group RDS
La bonne pratique est de créer un Security Group dédié à RDS qui n'autorise que le port 5432 depuis le Security Group de votre EC2 (pas depuis internet).
- Console AWS → EC2 → Security Groups → Créer un groupe de sécurité
- Nom :
sg-rds-postgres - Description : "Accès PostgreSQL depuis EC2 uniquement"
- VPC : votre VPC (pas le VPC par défaut)
- Règle entrante :
- Type : PostgreSQL (port 5432)
- Source : Groupe de sécurité → choisir
sg-web-server(votre SG EC2)
Indice : Référencer un Security Group comme source est plus robuste qu'une plage IP. Cela signifie "autoriser le trafic de toute instance EC2 qui porte ce Security Group", même si leurs IPs changent.
Tâche 2 : Créer le Subnet Group RDS
RDS a besoin d'un "DB Subnet Group" : un ensemble de sous-réseaux privés dans plusieurs AZ pour la haute disponibilité.
- Console AWS → RDS → Groupes de sous-réseaux → Créer
- Nom :
rds-subnet-group - VPC : votre VPC
- Zones de disponibilité : sélectionner au moins 2 AZ
- Sous-réseaux : sélectionner vos sous-réseaux privés
Tâche 3 : Créer l'instance RDS
- Console AWS → RDS → Bases de données → Créer une base de données
Configuration :
- Méthode de création : Standard
- Moteur : PostgreSQL (version 16.x)
- Modèle : Niveau gratuit (Free Tier - désactive Multi-AZ)
- Identifiant de l'instance :
postgres-exercice - Nom d'utilisateur principal :
dbadmin - Mot de passe : choisir un mot de passe fort (≥ 12 caractères)
- Classe d'instance :
db.t3.micro(Free Tier) - Stockage : 20 Go gp2
Connectivité :
- VPC : votre VPC
- Groupe de sous-réseaux :
rds-subnet-group - Accès public : Non (important - base accessible uniquement depuis le VPC)
- Groupe de sécurité VPC :
sg-rds-postgres
Configuration supplémentaire :
- Nom de la base initiale :
appdb - Sauvegardes automatiques : activées (période de rétention : 7 jours)
Indice : La création prend environ 5 minutes. Pendant ce temps, notez le "point de terminaison" (endpoint) de la base - c'est l'adresse DNS que vos applications utiliseront, du style
postgres-exercice.xxxxx.eu-west-3.rds.amazonaws.com.
Tâche 4 : Se connecter depuis EC2
# Sur votre instance EC2 (connectée via SSH)
sudo dnf install -y postgresql16
# Obtenir l'endpoint depuis la console RDS
RDS_ENDPOINT="postgres-exercice.xxxxx.eu-west-3.rds.amazonaws.com"
# Se connecter
psql -h $RDS_ENDPOINT -U dbadmin -d appdb -p 5432
# Entrer votre mot de passe quand demandé-- Créer des tables de test
CREATE TABLE utilisateurs (
id SERIAL PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE NOT NULL,
cree_le TIMESTAMP DEFAULT NOW()
);
-- Insérer des données
INSERT INTO utilisateurs (nom, email) VALUES
('Alice Dupont', 'alice@example.com'),
('Bob Martin', 'bob@example.com');
-- Vérifier
SELECT * FROM utilisateurs;
-- Quitter
\qTâche 5 : Explorer les sauvegardes
- Console AWS → RDS → votre base → Maintenance et sauvegardes
Vous y trouverez :
- Les snapshots automatiques (créés chaque jour dans la fenêtre de maintenance)
- La possibilité de créer un snapshot manuel
# Via CLI : créer un snapshot manuel
aws rds create-db-snapshot \
--db-instance-identifier postgres-exercice \
--db-snapshot-identifier snap-exercice-$(date +%Y%m%d)
# Voir les snapshots disponibles
aws rds describe-db-snapshots \
--db-instance-identifier postgres-exercice \
--query 'DBSnapshots[*].[DBSnapshotIdentifier,Status,SnapshotCreateTime]' \
--output table✅ Vérification du résultat
- L'instance RDS est en état "Disponible" dans la console
- La connexion
psql -h $RDS_ENDPOINT -U dbadmin -d appdbfonctionne depuis EC2 - La table
utilisateursa été créée avec 2 lignes - Les sauvegardes automatiques sont activées (période de 7 jours)
- L'instance RDS n'est pas accessible directement depuis internet
💡 À retenir
Pourquoi RDS plutôt qu'une DB sur EC2 ?
| RDS | EC2 DIY | |
|---|---|---|
| Sauvegardes | ✅ Automatiques | ❌ Manuelles |
| Patches OS | ✅ AWS gère | ❌ Vous gérez |
| Multi-AZ (HA) | ✅ Option native | ❌ Complexe à configurer |
| Read Replicas | ✅ Native | ❌ Complexe |
| Coût | $$ (plus cher) | $ |
Multi-AZ : RDS maintient une réplique synchrone dans une 2e zone de disponibilité. En cas de panne de la principale, le basculement (failover) est automatique (~1 minute).
✨ Solution Complète
# Connexion RDS depuis EC2
RDS_ENDPOINT="<votre-endpoint>.rds.amazonaws.com"
psql -h $RDS_ENDPOINT -U dbadmin -d appdb -p 5432
# Depuis le code applicatif (Python)
# pip install psycopg2-binary
import psycopg2
conn = psycopg2.connect(
host=RDS_ENDPOINT,
database="appdb",
user="dbadmin",
password="votre-mot-de-passe",
port=5432
)