AWS : RDS, S3 et EBS
Le stockage est un élément critique de toute infrastructure cloud. AWS propose trois services de stockage avec des caractéristiques radicalement différentes : Amazon RDS pour les bases de données relationnelles managées, Amazon S3 pour le stockage d'objets hautement scalable, et Amazon EBS pour le stockage en bloc persistant.
RDS — Bases de données relationnelles managées
Qu'est-ce que RDS ?
Amazon Relational Database Service (RDS) est un service AWS géré qui simplifie le déploiement, l'exploitation et la mise à l'échelle de bases de données relationnelles. RDS prend en charge plusieurs moteurs :
- Aurora (MySQL et PostgreSQL compatibles, optimisé pour le cloud)
- PostgreSQL (open source, robuste)
- MySQL (léger, performant)
- MariaDB (fork de MySQL)
- Oracle Database (commercial)
- Microsoft SQL Server (commercial)
RDS gère automatiquement les tâches d'administration : sauvegardes, patching des versions, haute disponibilité, et sauvegarde automatique. L'administrateur peut se concentrer sur l'application, sans intervenir sur la gestion du serveur de base de données.
Avantages de RDS
Maintenance automatique : AWS effectue les sauvegardes quotidiennes, les patchs de sécurité et les mises à jour mineures sans intervention manuelle.
Haute disponibilité : Le déploiement Multi-AZ réplique la base de données dans une zone de disponibilité différente. En cas d'incident, un basculement automatique survient en quelques minutes.
Sauvegardes et récupération : Les sauvegardes automatiques conservent 35 jours de journaux, permettant une récupération à un point dans le temps (PITR). Les snapshots manuels peuvent être conservés indéfiniment.
Scalabilité : Les ressources (CPU, mémoire) peuvent être augmentées sans arrêt du service. Les lectures peuvent être distribuées sur des réplicas en lecture.
Sécurité : Chiffrement en transit (SSL/TLS) et au repos (KMS), isolement réseau via VPC, gestion d'accès via IAM.
Créer une instance RDS
La création d'une RDS depuis la console AWS se fait en quelques clics :
- Naviguer vers RDS → Databases → Create database
- Sélectionnez le moteur : Aurora PostgreSQL, MySQL, etc.
- Choisissez le mode :
- Easy Create (configuration simplifiée) : idéal pour débuter
- Standard Create (contrôle total) : pour la production
Pour une première base de données, Easy Create suffit. Les paramètres par défaut incluent :
- Un type d'instance
db.t3.micro(Free Tier) - Stockage de 20 GB
- Backup automatique
- Un utilisateur root administrateur
- Un VPC par défaut
-
Définissez les credentials :
- Master username (par défaut
adminoupostgres) - Master password (à mémoriser ou stocker de façon sécurisée)
- Master username (par défaut
-
Configurer les paramètres réseau :
- VPC : sélectionner le VPC par défaut
- Security Group : autoriser le port 5432 (PostgreSQL) ou 3306 (MySQL)
- Connectivité publique : activer pour un accès depuis une machine locale
-
Validez et créez : Le déploiement prend quelques minutes.
Paramètres essentiels à connaître
DB identifier : nom unique de votre instance (visible dans les logs, ARNs, etc.)
Multi-AZ : réplication dans une autre zone. Recommandé en production, désactivé en test (coûts doublés).
Backup retention period : nombre de jours de rétention des sauvegardes automatiques. Par défaut 7, maximum 35 jours.
Performance Insights : monitoring détaillé de la charge et des requêtes. Activé automatiquement en Standard Create, payant après l'essai gratuit.
Enhanced Monitoring : métriques détaillées du système d'exploitation. Utile pour diagnostiquer les goulots.
Storage Auto Scaling : augmente automatiquement le stockage EBS si la capacité atteint 90%. Évite les interruptions dues au manque d'espace.
Récupérer les informations de connexion
Une fois l'instance créée (état "Available"), les détails de connexion sont accessibles :
- Console RDS → Databases → Instance RDS créée
- Onglet "Connectivity & security" :
- Endpoint : adresse URL de la BD (ex:
mydb.c1234567890.eu-west-3.rds.amazonaws.com) - Port : 5432 pour PostgreSQL, 3306 pour MySQL
- Master username et password (définis lors de la création)
- Endpoint : adresse URL de la BD (ex:
Se connecter à une RDS depuis Python
La connexion dépend du moteur. Voici les deux cas les plus courants.
- PostgreSQL / Aurora PostgreSQL
- MySQL / MariaDB
Installez d'abord le driver :
pip install psycopg2-binary
Ensuite, connectez-vous :
import psycopg2
password = "your-master-password"
endpoint = "mydb.c1234567890.eu-west-3.rds.amazonaws.com"
try:
conn = psycopg2.connect(
host=endpoint,
port=5432,
database="postgres", # base par défaut
user="postgres", # ou le master username utilisé
password=password,
sslmode="require" # SSL obligatoire pour RDS
)
cur = conn.cursor()
cur.execute("SELECT VERSION();")
version = cur.fetchone()[0]
print(f"Connected! Version: {version}")
cur.close()
except Exception as e:
print(f"Database error: {e}")
raise
finally:
if conn:
conn.close()
Installez d'abord le driver :
pip install mysql-connector-python
Ensuite, connectez-vous :
import mysql.connector
password = "your-master-password"
endpoint = "mydb.c1234567890.eu-west-3.rds.amazonaws.com"
try:
conn = mysql.connector.connect(
host=endpoint,
port=3306,
database="mysql", # base par défaut
user="admin", # ou le master username utilisé
password=password,
ssl_disabled=False,
autocommit=True
)
cur = conn.cursor()
cur.execute("SELECT VERSION();")
version = cur.fetchone()[0]
print(f"Connected! Version: {version}")
cur.close()
except Exception as e:
print(f"Database error: {e}")
raise
finally:
if conn:
conn.close()
Points importants :
- Port : 5432 pour PostgreSQL, 3306 pour MySQL
- database : la base cible (généralement
postgresoumysqlpar défaut) - user : le master username défini lors de la création
- SSL : RDS requiert SSL/TLS. Les connecteurs le gèrent automatiquement.
Cas d'usage RDS
Application web avec données structurées : Stocker les utilisateurs, posts, commentaires, etc. dans des tables relationnelles.
Données financières : Transactions, comptes clients, audits. Les BD relationnelles offrent les ACID guaranties.
Migrer une BD locale : RDS simplifie la migration d'une BD existante vers le cloud.
Haute disponibilité : Multi-AZ avec basculement automatique pour les services critiques.
Facturation RDS
- Par instance-heure : un
db.t3.microcoûte ~$0.015/heure ( ~$11/mois) - Stockage EBS : ~$0.12 par GB/mois (pour 20 GB = ~$2.40/mois)
- Sauvegardes : stockage supplémentaire au-delà de la taille de la BD (~$0.21/GB/mois)
- Transfert de données sortantes : payant (transfert entrant gratuit)
- Free Tier : 750h/mois de
db.t2.micro+ 20 GB de stockage pour 12 mois
Astuce : Les BD de développement peuvent être arrêtées quand elles ne sont pas utilisées. Aucun coût n'est facturé pour une BD arrêtée (pendant 7 jours max).
S3 — Stockage d'objets hautement scalable
Qu'est-ce que S3 ?
Amazon Simple Storage Service (S3) est un service de stockage d'objets hautement scalable, durable et sécuris é. Contrairement à RDS, S3 ne stocke pas des données structurées dans une BD, mais des objets non structurés : fichiers, images, vidéos, sauvegardes, logs, datasets, etc.
Caractéristiques clés :
- Scalabilité infinie : stockez des pétaoctets sans limite
- Durabilité 11-9 : 99.999999999% de durabilité (une seule perte attendue pour 10 milliards d'objets)
- Disponibilité 99.99% : le service est disponible en permanence
- Pas de gestion serveur : AWS gère l'infrastructure complète
- Classes de stockage : Standard, Infrequent Access, Glacier (archivage) pour optimiser les coûts
Concepts clés
Bucket : conteneur principal des objets. Un bucket est nommé uniquement dans tout AWS (pas d'homonymes possibles).
Object : fichier stocké dans un bucket, identifié par une clé (chemin). Exemple : mon-bucket/dossier/fichier.txt.
Key : path unique dans un bucket. S3 n'a pas de dossiers réels, juste des chemins. Les "dossiers" sont des conventions de naming.
Region : zone géographique où le bucket est créé. Les données ne quittent pas la région (pour la conformité).
Créer un bucket S3
Depuis la console AWS :
- Naviguer vers S3 → Create bucket
- Nom du bucket : doit être unique mondialement (ex:
mon-app-storage-2026) - Région : sélectionner la région la plus proche des utilisateurs ou services visés
- ACL (Access Control List) : maintenir "Private" (par défaut) pour restreindre l'accès
- Versioning : activer si l'historique des versions est nécessaire
- Encryption : activez le chiffrement par défaut (AES-256 ou KMS)
- Créez le bucket
Interagir avec S3 en Python
Pour utiliser S3 avec Python, le package boto3 est requis. L'installation se fait par :
pip install boto3
D'abord, configurer les credentials AWS (voir AWS CLI):
aws configure
Ensuite, boto3 utilise automatiquement ces credentials :
import boto3
# boto3 cherche automatiquement les credentials dans ~/.aws/credentials
s3_client = boto3.client('s3')
# Ou utiliser un profil spécifique
s3_session = boto3.Session(profile_name='default')
s3_client = s3_session.client('s3')
Opérations courantes avec S3
Lister tous les buckets :
response = s3_client.list_buckets()
for bucket in response['Buckets']:
print(f"Bucket: {bucket['Name']}")
Lister le contenu d'un bucket :
response = s3_client.list_objects_v2(Bucket='mon-bucket')
if 'Contents' in response:
for obj in response['Contents']:
print(f"{obj['Key']} — {obj['Size']} bytes")
else:
print("Bucket is empty")
Upload un fichier :
# Upload simple
s3_client.upload_file(
Filename='./mon-fichier.txt',
Bucket='mon-bucket',
Key='dossier/mon-fichier.txt'
)
# Upload avec contrôle d'ACL (ex: public-read)
s3_client.upload_file(
Filename='./mon-fichier.txt',
Bucket='mon-bucket',
Key='dossier/mon-fichier.txt',
ExtraArgs={'ACL': 'private'} # ou 'public-read'
)
Download un fichier :
s3_client.download_file(
Bucket='mon-bucket',
Key='dossier/mon-fichier.txt',
Filename='./local-fichier.txt'
)
Supprimer un objet :
s3_client.delete_object(Bucket='mon-bucket', Key='dossier/mon-fichier.txt')
Obtenir l'URL publique d'un objet :
# Accès direct (si l'objet est public)
url = f"https://mon-bucket.s3.amazonaws.com/mon-fichier.txt"
# Ou générer une URL signée (valable 1 heure)
url = s3_client.generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'mon-bucket', 'Key': 'mon-fichier.txt'},
ExpiresIn=3600 # 1 heure en secondes
)
print(url)
Classes de stockage S3
S3 propose plusieurs classes optimisées pour différents cas d'usage :
S3 Standard : accès fréquent, traitement immédiat. Prix : ~$0.025/GB/mois.
S3 Standard-IA (Infrequent Access) : accès occasionnel, données doivent rester disponibles. Prix : ~$0.0125/GB/mois + frais accès.
S3 Intelligent-Tiering : AWS déplace automatiquement les objets entre Standard et IA selon l'usage. Prix : ~$0.0125/GB/mois + frais gestion.
S3 Glacier Flexible Retrieval : archivage, accès rare. Récupération en heures. Prix : ~$0.004/GB/mois.
S3 Glacier Deep Archive : archivage longue durée (7+ ans), accès très rare. Récupération en 12h. Prix : ~$0.00099/GB/mois.
Cas d'usage S3
Sauvegarde et archivage : Sauvegarder des fichiers, des logs, des DBs sur des années avec Glacier.
Data lakes : Consolider et analyser de grandes quantités de données non structurées (CSV, JSON, Parquet).
Hosting de contenu statique : Héberger un site web statique, des images, des PDFs (avec CloudFront en CDN).
Distribution de logiciels : Stocker et servir des binaires, des mises à jour applicatives.
ML & Big Data : Stocker les datasets d'entraînement pour SageMaker, Spark, etc.
Facturation S3
- Stockage : ~$0.025/GB/mois pour Standard (varie par classe)
- Requêtes API : ~$0.0004 par 1000 GET, ~$0.005 par 1000 PUT (varie selon l'opération)
- Transfert de données sortantes : ~$0.09/GB au-delà du Free Tier
- Feature supplémentaires : versioning, lifecycle, replication (tous payants)
- Free Tier : 5 GB stocké + 20 000 GET + 2000 PUT pour 12 mois
Astuce : Utilisez les policies de cycle de vie pour migrer automatiquement les vieux objets vers Glacier (beaucoup moins cher).
EBS — Stockage bloc attaché aux instances
Qu'est-ce que EBS ?
Amazon Elastic Block Store (EBS) est un service de stockage par bloc hautement disponible et performant. Contrairement à S3 qui est un service indépendant, EBS se rattache directement à une instance EC2, fonctionnant comme un disque dur externe.
Caractéristiques clés :
- Attaché à une instance : Un volume EBS ne peut être attaché qu'à une seule EC2 à la fois
- Persistant : Les données survivent à l'arrêt/redémarrage de l'instance
- Performance élevée : Latence basse, haute IOPS (entrées/sorties par seconde)
- Volumes multiples : Une instance peut avoir plusieurs volumes EBS
- Snapshots : Sauvegardes incrémentielles des données
- Chiffrement : Chiffrement natif au repos avec KMS
Volumes EBS et types
Chaque instance EC2 a un volume root (le disque système). Des volumes supplémentaires peuvent être attachés.
SSD (haute performance) :
- gp3 (General Purpose) : équilibre coût/performance pour la plupart des workloads. ~$0.10/GB/mois.
- gp2 : version antérieure, moins performante. ~$0.10/GB/mois.
- io1/io2 : haute IOPS pour BD exigeantes. ~$0.125/GB/mois + coûts IOPS.
HDD (stockage économique) :
- st1 : débit élevé pour big data. ~$0.045/GB/mois.
- sc1 : archives économiques. ~$0.015/GB/mois.
Le type gp3 est recommandé pour débuter (le meilleur rapport coût/performance).
Attacher un volume EBS
Depuis la console EC2 :
-
Créer un volume : EC2 → Elastic Block Store → Volumes → Create volume
- Sélectionner la zone (même que l'instance)
- Taille (ex: 100 GB)
- Type (gp3 recommandé)
- Chiffrement : activer (recommandé)
-
Attacher l'instance : Clic droit sur le volume → Attach volume → sélectionner l'instance et le device (ex:
/dev/sdf) -
Monter dans l'instance (depuis SSH) :
# Lister les disques
lsblk
# Formater le volume (première fois uniquement)
sudo mkfs.ext4 /dev/nvme1n1
# Créer un point de montage
sudo mkdir /mnt/data
# Monter le volume
sudo mount /dev/nvme1n1 /mnt/data
# Vérifier
df -h
- Rendre permanent : Ajouter une ligne à
/etc/fstabpour que le montage survive aux redémarrages.
Snapshots et sauvegardes
Un snapshot EBS est une sauvegarde incrémentiellele du volume (seules les modifications depuis le dernier snapshot sont copiées).
# Créer un snapshot depuis la console
# EC2 → Elastic Block Store → Snapshots → Create snapshot
Cas d'usage :
- Sauvegarde : protéger les données critiques
- Clonage : créer un nouveau volume à partir d'un snapshot
- Migration : copier un volume vers une autre région (via snapshots)
- Restauration : récupérer un point-dans-le-temps
Prix : ~$0.05 par GB/mois pour le stockage du snapshot.
Cas d'usage EBS
Disque système d'EC2 : Partitionnement / OS / applications système — Le volume root pour chaque instance.
Bases de données locales : Installer PostgreSQL, MySQL directement sur l'EC2 avec EBS comme stockage (au lieu de RDS managé).
Application avec données temporaires : Cache, sessions, fichiers temporaires nécessitant un accès rapide.
Haute performance : Traitement de données intensif, machine learning, analytics où la latence est critique.
EBS vs S3 vs RDS : Comparaison rapide
| Aspect | EBS | S3 | RDS |
|---|---|---|---|
| Attachement | Instance EC2 unique | Indépendant | Indépendant |
| Accès | Disque système | API HTTP | Connexion BD |
| Performance | Très rapide (msec) | Réseau (sec) | Requêtes SQL (msec) |
| Scalabilité | Limitée à instance | Infinie | Instance-dépendante |
| Persistance | Survit arrêt EC2 | Permanent | Permanent |
| Prix | ~$0.10/GB/mois | ~$0.025/GB/mois | Instance-heure + stockage |
| Données | Non structurées (fichiers) | Non structurées (objets) | Relationnelles (tables) |
Résumé :
- EBS = disque attaché pour une instance (performance)
- S3 = stockage d'objets indépendant (scalabilité)
- RDS = base de données managée (structure)
Facturation EBS
- Volume : ~$0.10/GB/mois pour gp3
- Snapshots : ~$0.05 par GB/mois
- IOPS surprovisionnés : coûts additionnels pour io1/io2
- Free Tier : 30 GB de stockage EBS combiné (gp2 & io1) pour 12 mois
Bonnes pratiques EBS
- Utiliser gp3 pour la plupart des cas (meilleur coût/performance)
- Créer des snapshots réguliers des données critiques
- Activer le chiffrement sur tous les volumes
- Monitorer l'utilisation disque pour éviter les saturation
- Supprimer les volumes inutilisés pour réduire les coûts
- Utiliser EBS Auto Scaling si la charge varie dynamiquement
RDS vs S3 : Différences clés
| Aspect | RDS | S3 |
|---|---|---|
| Type de données | Structurées (tables, lignes, colonnes) | Non structurées (objets, blobs) |
| Accès | Requêtes SQL, connexion persistente | API REST HTTP, sans connexion |
| Scalabilité | verticale (augmenter instance) + répliques lecture | Horizontale infinie |
| Disponibilité | 99.95% avec Multi-AZ | 99.99% |
| Durabilité | Sauvegardes automatiques | 11-9 (copie par défaut dans 3 AZ) |
| Coûts | Instance-heure + stockage | Stockage + requêtes + transfert |
| Transactions | ACID (atomicité, cohérence) | Cohérence éventuelle |
| Latence | Millisecondes (requêtes db) | Millisecondes (API) |
| Chiffrement | SSL en transit, KMS au repos | SSL en transit, SSE en repos |
| Audit | Pas natif (logs fournis) | CloudTrail + access logs |
Cas d'usage appropriés pour RDS
- Applications avec données relationnelles (CRM, e-commerce, ERP)
- Nécessité de transactions ACID (opérations financières)
- Requêtes complexes avec JOINs
- Données fréquemment modifiées
- Exigence de haute disponibilité (Multi-AZ)
Cas d'usage appropriés pour S3
- Stockage de fichiers statiques (images, PDFs, vidéos)
- Data lakes et big data
- Sauvegarde et archivage
- Données rarement accédées
- Demande de scalabilité infinie
- Optimisation des coûts d'archivage long terme
Architecture hybrid
En pratique, une application moderne utilise les deux :
┌─────────────────────────────────┐
│ Application Web/API │
└─────────────────────────────────┘
↓ ↓
┌────────────┐ ┌──────────┐
│ RDS │ │ S3 │
│ Données │ │ Fichiers,│
│ de app │ │ logs, │
│ (users, │ │backup │
│ posts) │ │ │
└────────────┘ └──────────┘
Par exemple, une application de réseau social stocke les profils, posts, commentaires en RDS, tandis que les photos, vidéos, avatars sont hébergés en S3.
Bonnes pratiques
Pour RDS :
- Toujours utiliser Multi-AZ en production
- Activer automated backups avec retention de 7-35j
- Utiliser IAM database authentication plutôt que des mots de passe en dur
- Auditer les slow queries et optimiser les index
- Monitorer CPU, mémoire, stockage avec CloudWatch
Pour S3 :
- Toujours bloquer l'accès public par défaut (Block Public Access)
- Activer versioning pour les données critiques
- Utiliser des lifecycle policies pour réduire les coûts
- Chiffrer les données sensibles avec KMS
- Activer logging et CloudTrail pour l'audit
- Utiliser CloudFront comme CDN pour distribuer globalement
Les services RDS et S3 offrent une fondation solide pour le stockage et la gestion des données en production. Une combinaison avec Lambda, EC2 ou ECS permet de construire une application cloud complète.