TD d’initiation au SSP Cloud
À la fin de ce TD, vous saurez :
Astuce
Vous réutiliserez le datalab dans de nombreux TP cette année : ce TD est un investissement !
⚙️ Exécution du code
Où tourne mon programme ?
CPU, RAM, service éphémère
🪣 Stockage des données
Où sont mes données ?
S3 / MinIO
💾 Sauvegarde du code
Où est mon code ?
Git + GitHub / GitLab
Dans le cloud, ces 3 briques sont séparées. Tout le TD consiste à apprendre à les faire fonctionner ensemble.
Dans le monde professionnel, le statisticien se heurte souvent à :
Idée : fournir à la demande des environnements de travail prêts à l’emploi, avec la puissance adaptée.
| Instance | Pour qui ? | Support |
|---|---|---|
| SSP Cloud | administrations publiques & écoles | Slack |
| Datalab du GENES | GENES (ENSAE, ENSAI…) | canal Teams |
| LS3 | Insee, interne, coupé d’internet | — |
Note
Ce TD se fait exclusivement sur le SSP Cloud. Le datalab du GENES existe aussi et fonctionne sur le même principe (équipe et offre de service différentes).
➡️ Un data scientist n’a pas besoin de connaître Docker/Kubernetes pour obtenir un environnement fonctionnel.
➡️ Un bac à sable pour tester, apprendre, se former en se concentrant sur le contenu plutôt que sur la configuration.
Données sensibles
Ne déposez JAMAIS de données sensibles sur le SSP Cloud !
prenom.nom@eleve.ensai.frAstuce
Le nom d’utilisateur choisi sera aussi le nom de votre bucket de stockage (partie 6). Choisissez-le simple.
Dans Catalogue de services, plusieurs catalogues :
Cette année : surtout IDE et bases de données… mais n’hésitez pas à explorer les autres !
Exercice 1
Votre service s’ouvre : vous pouvez commencer à coder 😄
Revenons au formulaire (Catalogue de services → vscode-python → Lancer) :
CPU (processeur)
RAM (mémoire vive)
| Paramètre | Signification |
|---|---|
| requests | ressources garanties au lancement du service |
| limits | ressources maximales que le service peut utiliser |
Astuce
Demandez ce dont vous avez besoin : les ressources réservées sont partagées avec tous les utilisateurs.
Avertissement
Le volume persistant n’est pas une sauvegarde : supprimer le service = supprimer le volume.
Exercice 2
Exercice 3a – Prise en main
Un terminal permet de communiquer avec la machine en lignes de commande : exécuter du code, gérer ses fichiers, installer des outils, des packages…
Sur le datalab, le terminal utilise Bash.
| Commande | Signification | Action |
|---|---|---|
pwd |
print working directory | où suis-je ? |
ls |
list | lister les fichiers |
mkdir mon-dossier |
make directory | créer un dossier |
cd mon-dossier |
change directory | se déplacer |
touch mon-fichier |
créer un fichier vide | |
rm mon-fichier |
remove | supprimer un fichier |
pip install pkg / uv add pkg |
installer un package |
Astuce
cd .. remonte d’un niveau, cd ~ ramène au dossier personnel, la touche Tab complète les noms.
Exercice 3b
Exercice 4
Supprimer un service libère les ressources… et efface tout ce qu’il contenait.
Pas de solution miracle : il faut tout recommencer. 😢
Comment l’éviter ? En sauvegardant son code et ses données en dehors du service :
⚙️ Exécution
🪣 Données
💾 Code ← on est ici
Service (local) Forge (distant)
┌─────────────┐ git push ┌──────────────────┐
│ mon code │ ───────────► │ GitHub / GitLab │
│ │ ◄─────────── │ │
└─────────────┘ git clone └──────────────────┘
git pull
Note
Un cours dédié à Git arrive début octobre : ici, on se contente des premiers pas.
Mon compte → onglet Git
Exercice 5
Vous avez une copie locale du dépôt distant et vous voyez son historique.
Ces étapes sont aussi possibles via l’interface : icône Source Control (les branches) à gauche.
Exercice 5 bis
Question : comment renvoyer mes modifications vers GitHub ?
➡️ Réponse en octobre… ou tout de suite dans le bonus qui suit !
Bonus – Token
SSP CloudAvertissement
Le jeton n’est visible qu’une seule fois. Perdu ou expiré ? Il faut en générer un nouveau.
Déclarer le jeton
Créer un dépôt
Sauver son code
⚙️ Exécution
🪣 Données ← on est ici
💾 Code
Dans le cloud, on sépare les données des programmes pour :
https://minio.lab.sspcloud.frUn bucket ≈ un dossier à la racine du serveur S3, qui contient des objets (fichiers + métadonnées).
À la création du compte, un bucket à votre nom est créé. Vous pouvez :
Deux façons de le gérer : l’onglet Mes fichiers du datalab, ou un client en ligne de commande (aws s3).
Hors données explicitement publiques, il faut des credentials pour parler à l’API S3 :
| Type d’identité | Credentials |
|---|---|
| Compte de service | access key + secret key |
| Identité temporaire (vos credentials personnels) | access key + secret key + session token — expirent |
Variables d’environnement reconnues par la plupart des bibliothèques :
Où les trouver ? Mon compte → Connexion au stockage (ex : shell environment variable)
Clients
aws CLI : outil officiel AWS, compatible avec tout service S3 — préinstallé et préconfiguré sur le datalabmc (MinIO Client)s3fs, boto3 (Python), aws.s3, arrow (R)…Limites du stockage objet
WORM : Write Once, Read Many
Idéal pour backups, logs, ressources statiques, diffusion de données. S3 complète les stockages classiques, il ne les remplace pas.
Exercice 6
➡️ Le chemin de votre fichier sur S3 : s3://<username>/initiation/my-file.parquet
bucket = votre nom d’utilisateur, puis le chemin de l’objet dans le bucket.
aws s3Exercice 7 – dans un terminal de votre service
L’endpoint du SSP Cloud est déjà injecté (AWS_ENDPOINT_URL) : pas besoin d’option --endpoint-url.
Avertissement
Copier les données dans son espace de travail n’est pas une bonne pratique : on lit directement depuis S3 !
Mon compte → Connexion au stockage : snippets prêts à l’emploi pour Python, R… (s3fs, boto3…)
Onyxia injecte déjà les credentials dans votre service :
Important
Mon compte → Connexion au stockage)① Service bien configuré : les variables sont reconnues automatiquement
② Credentials passés explicitement
import os, pandas as pd
storage_opts = {
"key": os.environ["AWS_ACCESS_KEY_ID"],
"secret": os.environ["AWS_SECRET_ACCESS_KEY"],
"token": os.environ.get("AWS_SESSION_TOKEN"),
"client_kwargs": {
"region_name": "eu-west-1",
"endpoint_url": "https://minio.lab.sspcloud.fr",
},
}
df = pd.read_csv("s3://inesh/diffusion/airports_fr.csv", storage_options=storage_opts)③ Avec un système de fichiers s3fs
import os, s3fs, pandas as pd
S3_ENDPOINT_URL = "https://" + os.environ["AWS_S3_ENDPOINT"]
fs = s3fs.S3FileSystem(client_kwargs={"endpoint_url": S3_ENDPOINT_URL})
fs.ls("donnees-insee") # lister les objets d'un bucket
FILE_PATH_S3 = "donnees-insee/diffusion/BPE/2019/BPE_ENS.csv"
with fs.open(FILE_PATH_S3, mode="rb") as file_in:
df_bpe = pd.read_csv(file_in, sep=";")Exercice 8 – dans un nouveau notebook S3.ipynb
📖 Guide de survie : doc SSP Cloud – stockage de données
diffusions3://inesh/diffusion/airports_fr.parquetdiffusion : tout ce qui s’y trouve est lisible par les autres utilisateursaws s3 presign s3://<username>/chemin/fichier pour obtenir un lien de téléchargement temporaireExercice 9
import os, s3fs
S3_ENDPOINT_URL = "https://" + os.environ["AWS_S3_ENDPOINT"]
fs = s3fs.S3FileSystem(client_kwargs={"endpoint_url": S3_ENDPOINT_URL})
BUCKET_OUT = "<mon_bucket>" # votre nom d'utilisateur
FILE_PATH_OUT_S3 = BUCKET_OUT + "/initiation/output.csv"
with fs.open(FILE_PATH_OUT_S3, "w") as file_out:
df_bpe.to_csv(file_out)À l’ancienne : télécharger le fichier, le convertir sur le disque du service…
➡️ lent, consomme du disque, fichier à nettoyer ensuite.
Directement depuis S3 :
read_csv charge en mémoire (RAM) → traitements rapidesto_csv écrit le résultat (ici sur S3)✅ Vous avez un processus réplicable : lire sur S3 → traiter → écrire sur S3.
Comment votre service « connaît-il » vos credentials S3 et Git ?
➡️ Onyxia injecte des variables d’environnement, accessibles à tous les programmes du service.
Exercice 10
Les réglages de Mon compte sont réutilisés à chaque lancement :
➡️ Retrouvez-les et modifiez-les dans Mon compte.
Bonus – Grafana
Vous arrivez sur Grafana : consommation CPU, RAM… de votre service.
➡️ Utile pour ajuster requests / limits au plus juste.
Énigme du Père Fouras
Plus j’ai de gardiens, moins je suis gardé.
Moins j’ai de gardiens, plus je suis gardé.
Qui suis-je ?
Le secret ! 🤫
Jetons, mots de passe… ne doivent jamais apparaître dans le code poussé sur GitHub.
➡️ Le datalab propose de gérer vos secrets (stockés dans Vault) et de les injecter comme variables d’environnement.
Pour aller plus loin :
Init) : installer des packages, cloner, configurer… à chaque démarrageService) : un environnement entièrement sur mesureChecklist de fin de session
Reproduire votre travail plus tard est facile :
⚙️ Exécution
Service Onyxia
éphémère, jetable
🪣 Données
S3 / MinIO
persistant, partageable
💾 Code
Git + GitHub
versionné, collaboratif
Un service se jette sans regret si le code est sur Git et les données sur S3.
Sous le capot : la plateforme tourne sur un cluster Kubernetes, avec lequel vous pouvez interagir en ligne de commande → olevitt/kubernetes
Bon courage pour vos prochains TP sur le datalab
ENSAI 1A – Découverte du SSP Cloud