Exercice 05 : Stocker et gérer des fichiers avec Cloud Storage
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un bucket Cloud Storage avec une classe de stockage adaptée
- ✅ Uploader et gérer des fichiers avec
gcloud storageetgsutil - ✅ Activer le versioning et récupérer une version antérieure
- ✅ Générer une URL signée pour partager un fichier temporairement
Durée estimée : 25 minutes
Difficulté : ⭐☆☆☆☆ (Débutant)
Prérequis : Compte GCP, gcloud CLI configurée
📖 Contexte
Cloud Storage est le service de stockage d'objets de GCP. C'est l'équivalent d'AWS S3 et d'Azure Blob Storage. Il est utilisé pour stocker des données non structurées : images, vidéos, fichiers de données, artefacts de build, sauvegardes. Il s'intègre nativement avec tous les services GCP (BigQuery, Dataflow, Vertex AI...).
📋 Énoncé
Créez un bucket, gérez des fichiers et configurez les permissions d'accès.
🧭 Déroulement de l'exercice
Tâche 1 : Créer un bucket
# Activer l'API
gcloud services enable storage.googleapis.com
# Les noms de bucket sont uniques globalement
PROJECT_ID=$(gcloud config get-value project)
BUCKET_NAME="devops-exercice-${PROJECT_ID}"
echo "Nom du bucket : $BUCKET_NAME"
# Créer le bucket (nouvelle CLI gcloud storage)
gcloud storage buckets create gs://$BUCKET_NAME \
--location=europe-west9 \
--storage-class=STANDARD \
--uniform-bucket-level-access # Pas d'ACL individuels (meilleure pratique)
# Vérifier
gcloud storage buckets list --filter="name:devops-exercice"
gcloud storage buckets describe gs://$BUCKET_NAMEIndice :
--uniform-bucket-level-accessdésactive les ACL au niveau des objets individuels. Tout l'accès est contrôlé par IAM au niveau du bucket. C'est la meilleure pratique de sécurité recommandée par Google.
Tâche 2 : Uploader et gérer des fichiers
# Créer des fichiers de test
echo "Contenu du fichier de test - version 1" > fichier-test.txt
mkdir -p mon-dossier && echo "<h1>Page HTML</h1>" > mon-dossier/index.html
echo '{"key":"value","numero":42}' > data.json
# Uploader un fichier
gcloud storage cp fichier-test.txt gs://$BUCKET_NAME/
# Uploader un dossier entier
gcloud storage cp -r mon-dossier/ gs://$BUCKET_NAME/
# Uploader avec métadonnées personnalisées
gcloud storage cp data.json gs://$BUCKET_NAME/ \
--content-type=application/json
# Lister le contenu du bucket
gcloud storage ls gs://$BUCKET_NAME/
gcloud storage ls -r gs://$BUCKET_NAME/ # Récursif avec tailles
# Télécharger
gcloud storage cp gs://$BUCKET_NAME/fichier-test.txt ./telecharge.txt
cat telecharge.txt
# Supprimer un objet
gcloud storage rm gs://$BUCKET_NAME/data.json
# Synchroniser un dossier local avec le bucket (comme rsync)
gcloud storage rsync mon-dossier/ gs://$BUCKET_NAME/site/ --delete-unmatched-destination-objectsTâche 3 : Activer le versioning
# Activer le versioning sur le bucket
gcloud storage buckets update gs://$BUCKET_NAME --versioning
# Modifier le fichier et re-uploader
echo "Contenu modifié - version 2" > fichier-test.txt
gcloud storage cp fichier-test.txt gs://$BUCKET_NAME/
echo "Encore modifié - version 3" > fichier-test.txt
gcloud storage cp fichier-test.txt gs://$BUCKET_NAME/
# Lister toutes les versions
gsutil ls -a gs://$BUCKET_NAME/fichier-test.txt
# Récupérer la première version (generation la plus ancienne)
FIRST_GEN=$(gsutil ls -a gs://$BUCKET_NAME/fichier-test.txt | head -1 | grep -oP '#\K[0-9]+')
echo "Première version (generation) : $FIRST_GEN"
gsutil cp "gs://$BUCKET_NAME/fichier-test.txt#$FIRST_GEN" ./version1-recuperee.txt
cat version1-recuperee.txt
# → Contenu du fichier de test - version 1Tâche 4 : URL signée pour partage temporaire
# Créer un compte de service pour la signature
SA_EMAIL="storage-signer@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud iam service-accounts create storage-signer \
--display-name="Signature d'URLs Cloud Storage"
# Accorder les droits de lecture sur le bucket
gsutil iam ch serviceAccount:$SA_EMAIL:roles/storage.objectViewer \
gs://$BUCKET_NAME
# Créer une clé pour le compte de service
gcloud iam service-accounts keys create /tmp/signer-key.json \
--iam-account=$SA_EMAIL
# Générer une URL signée valable 1 heure
gsutil signurl -d 1h /tmp/signer-key.json \
gs://$BUCKET_NAME/fichier-test.txt
# L'URL ressemble à :
# https://storage.googleapis.com/BUCKET/fichier-test.txt?X-Goog-Signature=...Indice : Les URLs signées sont idéales pour donner un accès temporaire à des fichiers privés (factures client, rapports confidentiels). Elles sont signées avec une clé de service account et expirent automatiquement.
Tâche 5 : Nettoyer
# Supprimer toutes les versions et le bucket
gsutil rm -r gs://$BUCKET_NAME
gcloud iam service-accounts delete $SA_EMAIL --quiet
rm /tmp/signer-key.json✅ Vérification du résultat
gcloud storage ls gs://$BUCKET_NAME/liste les fichiers uploadés- Après 3 uploads,
gsutil ls -amontre 3 générations defichier-test.txt - La version 1 est récupérable avec son numéro de génération
- L'URL signée donne accès au fichier pendant 1 heure
💡 À retenir
Classes de stockage Cloud Storage :
| Classe | Fréquence d'accès | Coût stockage | Frais de récupération |
|---|---|---|---|
| Standard | Fréquent | $$$ | ✅ Aucun |
| Nearline | Mensuel | $$ | $ |
| Coldline | Trimestriel | $ | $$ |
| Archive | Annuel | ¢ | $$$ |
Free Tier Cloud Storage : 5 Go gratuits par mois (classe Standard, région US) + 1 Go d'operations A, 10 Go d'operations B.
✨ Solution Complète
BUCKET="gs://mon-bucket-unique"
# Commandes essentielles
gcloud storage cp fichier.txt $BUCKET/ # Upload
gcloud storage cp $BUCKET/fichier.txt ./local/ # Download
gcloud storage ls -r $BUCKET/ # Lister récursivement
gcloud storage rm $BUCKET/fichier.txt # Supprimer
gcloud storage rsync ./local/ $BUCKET/dossier/ # Synchroniser