flowchart TD
subgraph Stockage
S3[S3 — Stockage objet]
end
subgraph Compute
EC2[EC2 — Machines virtuelles]
Lambda[Lambda — Serverless]
end
subgraph Base de données
RDS[RDS — SQL managé]
end
subgraph ML
SM[SageMaker — ML]
end
S3 --> EC2
S3 --> Lambda
S3 --> SM
EC2 --> RDS
Lambda --> RDS
0.0.1 🎯 Objectifs d’apprentissage
- Expliquer les avantages du cloud pour la data science
- Naviguer dans l’écosystème AWS (régions, services)
- Créer et configurer un bucket S3
- Manipuler des fichiers avec AWS CLI
- Utiliser boto3 pour interagir avec S3 en Python
📚 Prérequis : Docker, Git, Python
⏱️ Temps estimé : 3 heures
1 Pourquoi le cloud ?
1.1 Comparaison on-premise vs cloud
| Critère | On-premise | Cloud (AWS) |
|---|---|---|
| Coût initial | Élevé (serveurs, infra) | Faible (pay-as-you-go) |
| Scalabilité | Limitée, délai d’achat | Quasi-illimitée, instantanée |
| Maintenance | À ta charge | Gérée par AWS |
| Disponibilité | Variable | 99.99% (SLA) |
| Sécurité | Tu gères tout | Modèle de responsabilité partagée |
💡 Pour la data science, le cloud permet de lancer un GPU pour entraîner un modèle en 2 heures, puis de l’éteindre. Pas besoin d’acheter une machine à 10 000 € qui dort 95% du temps.
1.2 Les services AWS essentiels
2 S3 : le stockage objet
2.1 Concepts fondamentaux
Amazon S3 (Simple Storage Service) organise les données en objets dans des buckets :
- Bucket : conteneur de niveau supérieur (nom unique globalement sur tout AWS)
- Objet : fichier + métadonnées, identifié par une clé (chemin)
- Versioning : garder l’historique des modifications d’un objet
📝 Cas d’usage en assurance
- Stocker les datasets bruts (CSV, Parquet) des sinistres
- Archiver les modèles entraînés (fichiers .pkl, .joblib)
- Héberger les rapports générés (PDF, HTML)
- Partager des données entre équipes
2.2 Classes de stockage
| Classe | Usage | Coût |
|---|---|---|
| S3 Standard | Accès fréquent | ~0.023 $/Go/mois |
| S3 Infrequent Access | Accès rare | ~0.0125 $/Go/mois |
| S3 Glacier | Archivage long terme | ~0.004 $/Go/mois |
3 AWS CLI
3.1 Installation et configuration
# Installer AWS CLI
\(</span> pip install awscli<br><br>
<span class="comment"># Configurer les identifiants</span><br>
<span class="prompt">\) aws configure
AWS Access Key ID: AKIA…
AWS Secret Access Key: ****
Default region name: eu-west-1
Default output format: json
3.2 Opérations courantes
# Créer un bucket
\(</span> aws s3 mb s3://mon-portefeuille-assurance<br><br>
<span class="comment"># Uploader un fichier</span><br>
<span class="prompt">\) aws s3 cp data/sinistres.csv s3://mon-portefeuille-assurance/data/
# Lister le contenu
\(</span> aws s3 ls s3://mon-portefeuille-assurance/data/<br>
<span class="output">2024-01-15 10:30:00 2456789 sinistres.csv</span><br><br>
<span class="comment"># Synchroniser un dossier entier</span><br>
<span class="prompt">\) aws s3 sync ./data/ s3://mon-portefeuille-assurance/data/
# Télécharger
$ aws s3 cp s3://mon-portefeuille-assurance/data/sinistres.csv ./local/
⚠️ Sécurité
Ne jamais mettre tes clés AWS dans le code source ou sur GitHub. Utiliser aws configure (stocke dans ~/.aws/credentials) ou des variables d’environnement. En CI/CD, utiliser les GitHub Secrets.
4 boto3 : S3 en Python
4.1 Opérations de base
import boto3
# Créer un client S3
s3 = boto3.client('s3')
# Upload un fichier
s3.upload_file(
Filename='data/sinistres.csv',
Bucket='mon-portefeuille-assurance',
Key='data/sinistres.csv'
)
# Download un fichier
s3.download_file(
Bucket='mon-portefeuille-assurance',
Key='data/sinistres.csv',
Filename='local/sinistres.csv'
)
# Lister les objets
response = s3.list_objects_v2(
Bucket='mon-portefeuille-assurance',
Prefix='data/'
)
for obj in response.get('Contents', []):
print(f"{obj['Key']} — {obj['Size'] / 1024:.1f} Ko")4.2 Lire un CSV directement depuis S3
import pandas as pd
import boto3
from io import StringIO
s3 = boto3.client('s3')
response = s3.get_object(Bucket='mon-bucket', Key='data/sinistres.csv')
df = pd.read_csv(StringIO(response['Body'].read().decode('utf-8')))
print(f"Dataset : {len(df)} lignes, {len(df.columns)} colonnes")💡 Point clé
En production, les données sont rarement sur ton disque local. Elles sont sur S3 (ou un data lake). Savoir lire/écrire sur S3 avec boto3 est une compétence essentielle pour un data scientist en entreprise.
Synthèse
4.2.1 🎯 Les 5 points essentiels
- Le cloud = flexibilité et scalabilité — Pay-as-you-go, pas d’investissement matériel
- S3 = stockage objet — Buckets + objets, pas un système de fichiers classique
- AWS CLI pour les opérations rapides — cp, sync, ls depuis le terminal
- boto3 pour l’automatisation Python — Upload, download, listing en script
- Sécurité : jamais de clés dans le code — aws configure ou variables d’environnement
Auto-évaluation
Réponse : Scalabilité instantanée (GPU à la demande), pay-as-you-go (pas d’investissement), services managés (pas de maintenance), collaboration facilitée (données centralisées), haute disponibilité (99.99%).
Réponse : Un bucket est un conteneur de niveau supérieur avec un nom unique global. Un objet est un fichier stocké dans un bucket, identifié par sa clé (chemin). Exemple : bucket mon-projet, objet data/sinistres.csv.
Réponse : Utiliser aws configure (stocke dans ~/.aws/credentials), des variables d’environnement, ou des GitHub Secrets en CI/CD. Ne jamais mettre les clés dans le code source, les commits Git, ou les Dockerfiles.
Réponse : Avec boto3 : récupérer l’objet avec s3.get_object(), lire le body, décoder en UTF-8, et passer à pd.read_csv() via StringIO. Alternative : pd.read_csv('s3://bucket/key') avec le package s3fs installé.