Module Technique 5 — AWS : Introduction et S3

Découvrir le cloud et le stockage objet

aws
s3
cloud
Auteur·rice

François Boussengui

Date de publication

25 mars 2026

0.0.1 🎯 Objectifs d’apprentissage

  1. Expliquer les avantages du cloud pour la data science
  2. Naviguer dans l’écosystème AWS (régions, services)
  3. Créer et configurer un bucket S3
  4. Manipuler des fichiers avec AWS CLI
  5. 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

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

Services AWS pour la data science


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

  1. Le cloud = flexibilité et scalabilité — Pay-as-you-go, pas d’investissement matériel
  2. S3 = stockage objet — Buckets + objets, pas un système de fichiers classique
  3. AWS CLI pour les opérations rapides — cp, sync, ls depuis le terminal
  4. boto3 pour l’automatisation Python — Upload, download, listing en script
  5. 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é.


← Retour à la Semaine 5 Voir la Fiche de travail →