# Fichier: python_cheats/cheatsheets/S3.txt
# Cheatsheet AWS S3 - Guide Complet pour Débutants

═══════════════════════════════════════════════════════════════════════════════
[OK] S3 (SIMPLE STORAGE SERVICE) - C'EST QUOI?
═══════════════════════════════════════════════════════════════════════════════

S3 = "Disque dur infini dans le cloud"

Imaginez un immense entrepôt gratuit:
- Vous pouvez y ranger des fichiers (photos, vidéos, documents, etc.)
- L'espace est illimité
- Vous payez seulement pour ce que vous utilisez
- Très fiable (99.999999999% de durabilité - 11 nines!)
- Accessible de n'importe où sur Internet

ANALOGIE: C'est comme une boîte de stockage virtuelle
- Au lieu de stocker des disques durs chez vous
- Vous stocker dans un immense cloud
- Vous payez par GB utilisé
- Vos fichiers sont protégés (AWS gère les backups)

TERMINOLOGIE DE BASE:
- Bucket = Dossier racine (conteneur pour vos fichiers)
- Object = Fichier (n'importe quel type: txt, jpg, mp4, zip, etc.)
- Key = Chemin/nom du fichier (ex: "folder/document.pdf")
- Prefix = Dossier virtuel (S3 n'a pas de vrais dossiers)
- ACL = Permissions (qui peut accéder)
- Bucket Policy = Règles d'accès avancées (JSON)
- Storage Class = Type de stockage (Standard, Archive, etc.)

CAS D'USAGE COURANTS:
- Héberger un site web statique
- Sauvegarder des fichiers
- Stocker des photos d'applications
- Archive de données à long terme
- Logs de serveurs
- Distribution de fichiers publics


═══════════════════════════════════════════════════════════════════════════════
[OK] TARIFICATION S3 (CE QUE VOUS ALLEZ PAYER)
═══════════════════════════════════════════════════════════════════════════════

GRATUIT (Free Tier):
- 5 GB de stockage S3 Standard par mois
- 20 000 requêtes GET par mois
- 2 000 requêtes PUT/COPY/POST/DELETE par mois
- 100 GB de sortie données par mois

APRÈS LE FREE TIER:
- Stockage: ~$0.023 par GB/mois (très bon marché!)
- Requêtes GET: ~$0.0004 par 10 000 requêtes
- Requêtes PUT: ~$0.005 par 1 000 requêtes
- Transfert données OUT: ~$0.09 par GB

EXEMPLE:
- 1 GB de photos: $0.023/mois
- 100 GB de backup: $2.30/mois
- 1 TB d'archive: $23/mois (super pas cher!)

CONSEIL: S3 est TRÈS bon marché pour du stockage


═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 1 - CRÉER UN BUCKET
═══════════════════════════════════════════════════════════════════════════════

BUCKET = Conteneur principal (comme un disque dur)

# Créer bucket
aws s3 mb s3://my-unique-bucket-name-12345

# EXPLICATION DÉTAILLÉE:
# "aws s3 mb" = "make bucket" (créer un bucket)
# "s3://" = Protocole S3 (c'est le standard AWS)
# "my-unique-bucket-name-12345" = Nom du bucket
#
# RÈGLES DE NOMMAGE:
# [OK] Doit être UNIQUE mondialement (personne d'autre ne peut l'avoir)
# [OK] 3-63 caractères
# [OK] Minuscules (a-z)
# [OK] Chiffres (0-9)
# [OK] Hyphens (-)
# [OK] Commencer et finir par lettre ou chiffre
#
# [X] NON AUTORISÉ:
# [X] Majuscules (BUCKET, Bucket = erreur!)
# [X] Underscore (_) = mon_bucket ERREUR
# [X] Points consécutifs (..)
# [X] IP format (192.168.1.1 = erreur)
# [X] Noms de domaine (même pas besoin!)
#
# BON EXEMPLE: my-bucket-2024
# MAUVAIS EXEMPLE: my_bucket, MyBucket, 192.168.1.1
#
# RÉSULTAT: Si ça marche, rien n'est affiché (c'est normal!)
# Si le nom existe déjà: "BucketAlreadyOwnedByYou" ou "BucketAlreadyExists"

# Créer bucket dans région spécifique
aws s3 mb s3://my-bucket --region eu-west-1

# EXPLICATION:
# "--region eu-west-1" = Où stocker le bucket (Europe)
# Si vous ne spécifiez pas, AWS utilise votre région par défaut
#
# RÉGIONS COURANTES:
# - us-east-1 = États-Unis (Virginie)
# - us-west-1 = États-Unis (Californie)
# - eu-west-1 = Europe (Irlande)
# - eu-central-1 = Europe (Francfort)
# - ap-northeast-1 = Japon (Tokyo)
# - ap-southeast-1 = Asie du Sud-Est (Singapour)
#
# CONSEIL: Choisissez une région PROCHE de vos utilisateurs!

# Lister tous vos buckets
aws s3 ls

# EXPLICATION:
# "ls" = "list" (lister)
# Affiche TOUS vos buckets S3
#
# Résultat:
# 2024-01-15 14:32:45 my-first-bucket
# 2024-01-15 15:10:22 my-second-bucket
# 2024-01-15 15:45:01 backup-bucket
#
# Colonnes: Date de création, Heure, Nom du bucket

# Lister contenu d'un bucket (fichiers dans le bucket)
aws s3 ls s3://my-bucket

# EXPLICATION:
# "aws s3 ls s3://my-bucket" = Lister les fichiers du bucket "my-bucket"
# Affiche SEULEMENT les fichiers/dossiers au premier niveau (pas récursif)
#
# Résultat:
# 2024-01-15 10:00:00    1234 document.pdf
# 2024-01-15 11:30:00 DIR                 photos/
# 2024-01-15 12:45:00    5678 video.mp4
#
# "DIR" = C'est un dossier (prefix)
# Les nombres = Taille en bytes

# Lister contenu d'un sous-dossier
aws s3 ls s3://my-bucket/photos/

# EXPLICATION:
# "s3://my-bucket/photos/" = Lister le contenu du dossier "photos"
# "/photos/" = Dossier virtuel (S3 simule les dossiers)
#
# Résultat: Fichiers dans photos/
# 2024-01-15 09:00:00 2345678 vacation-1.jpg
# 2024-01-15 09:15:00 3456789 vacation-2.jpg

# Lister TOUT le contenu (récursivement, tous les niveaux)
aws s3 ls s3://my-bucket --recursive

# EXPLICATION:
# "--recursive" = Descendre dans tous les dossiers
# Affiche TOUS les fichiers (peut être très long!)
#
# Résultat: Toute la structure
# 2024-01-15 10:00:00    1234 document.pdf
# 2024-01-15 09:00:00 2345678 photos/vacation-1.jpg
# 2024-01-15 09:15:00 3456789 photos/vacation-2.jpg
# 2024-01-15 12:45:00    5678 videos/clip.mp4

# Lister avec formatage lisible
aws s3 ls s3://my-bucket --recursive --human-readable --summarize

# EXPLICATION:
# "--human-readable" = Afficher les tailles en KB, MB, GB (pas bytes)
# "--summarize" = Afficher un résumé total
#
# Résultat:
# 2024-01-15 10:00:00    1.2 KiB document.pdf
# 2024-01-15 09:00:00    2.3 MiB photos/vacation-1.jpg
# Total Size: 15.4 MiB
# Total Objects: 42

# Supprimer bucket (doit être VIDE)
aws s3 rb s3://my-bucket

# EXPLICATION:
# "rb" = "remove bucket" (supprimer bucket)
# ATTENTION: Le bucket DOIT être complètement vide!
# Si des fichiers dedans, vous aurez une erreur
#
# Erreur possible:
# "An error occurred (BucketNotEmpty) when calling the RemoveBucket"
# = Le bucket n'est pas vide!

# Supprimer bucket ET TOUT SON CONTENU ([ATTENTION] TRÈS DANGEREUX!)
aws s3 rb s3://my-bucket --force

# EXPLICATION:
# "--force" = Supprimer même s'il y a des fichiers
# [ATTENTION] ATTENTION: C'EST IRRÉVERSIBLE!
# TOUS les fichiers seront supprimés définitivement
# À moins d'avoir des snapshots/backups ailleurs, c'est fini
#
# CONSEIL: N'utilisez jamais --force sauf si vous ÊTES SÛR!


═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 2 - UPLOADER DES FICHIERS
═══════════════════════════════════════════════════════════════════════════════

UPLOAD = Envoyer des fichiers de votre ordinateur vers S3

# Upload un seul fichier
aws s3 cp file.txt s3://my-bucket/

# EXPLICATION DÉTAILLÉE:
# "aws s3 cp" = "copy" (copier un fichier)
# "file.txt" = Fichier LOCAL (sur votre ordinateur)
# "s3://my-bucket/" = Destination S3
#
# RÉSULTAT:
# - Le fichier est envoyé vers S3
# - Il porte le même nom: "file.txt"
# - Vous le retrouverez à: s3://my-bucket/file.txt
#
# Résultat console:
# upload: ./file.txt to s3://my-bucket/file.txt
# Completed 1 of 1
#
# EXEMPLE RÉEL:
# Fichier local: /home/user/documents/rapport.pdf
# Commande: aws s3 cp /home/user/documents/rapport.pdf s3://my-bucket/
# Résultat: Le fichier est maintenant à s3://my-bucket/rapport.pdf

# Upload un fichier avec nouveau nom
aws s3 cp file.txt s3://my-bucket/my-new-name.txt

# EXPLICATION:
# "my-new-name.txt" = Nouveau nom du fichier
# Le fichier sera stocké sous ce nom (pas "file.txt")
# Vous le retrouverez à: s3://my-bucket/my-new-name.txt

# Upload dans un sous-dossier (prefix)
aws s3 cp file.txt s3://my-bucket/folder/subfolder/file.txt

# EXPLICATION:
# "folder/subfolder/" = Chemin complet (s3 simule les dossiers)
# Le fichier sera organisé comme: bucket > folder > subfolder > file.txt
# Les dossiers sont créés automatiquement
#
# À l'accès: s3://my-bucket/folder/subfolder/file.txt

# Upload un dossier entier
aws s3 cp mydir/ s3://my-bucket/mydir/ --recursive

# EXPLICATION:
# "mydir/" = Dossier LOCAL (avec slash final)
# "s3://my-bucket/mydir/" = Destination S3
# "--recursive" = Copier TOUS les fichiers dedans (y compris sous-dossiers)
#
# RÉSULTAT:
# Si mydir/ contient:
#   - file1.txt
#   - file2.txt
#   - subfolder/
#     - file3.txt
#
# Ils seront uploadés comme:
#   - s3://my-bucket/mydir/file1.txt
#   - s3://my-bucket/mydir/file2.txt
#   - s3://my-bucket/mydir/subfolder/file3.txt
#
# Structure préservée!

# Upload avec métadonnées (informations supplémentaires)
aws s3 cp file.txt s3://my-bucket/ \
  --metadata key1=value1,key2=value2

# EXPLICATION:
# "--metadata" = Ajouter des données sur le fichier
# "key1=value1,key2=value2" = Paires clé-valeur
#
# Utilité: Informations pour l'application
# Exemple: author=john, department=engineering
#
# Plus tard, vous pourrez récupérer ces métadonnées
# aws s3api head-object --bucket my-bucket --key file.txt

# Upload avec type de contenu (Content-Type)
aws s3 cp index.html s3://my-bucket/ --content-type text/html

# EXPLICATION:
# "--content-type text/html" = Type MIME du fichier
# C'est important pour le navigateur (comment afficher le fichier)
#
# Types MIME courants:
# - text/html = Page HTML
# - text/plain = Fichier texte
# - image/jpeg = Image JPG
# - image/png = Image PNG
# - application/json = Fichier JSON
# - application/pdf = Fichier PDF
# - video/mp4 = Vidéo MP4
#
# Sans Content-Type correct, le navigateur peut:
# - Télécharger au lieu d'afficher
# - Afficher mal le contenu
#
# Utilité: Si vous hébergez un site web statique!

# Upload avec cache control
aws s3 cp image.jpg s3://my-bucket/ --cache-control max-age=86400

# EXPLICATION:
# "--cache-control" = Combien de temps garder en cache
# "max-age=86400" = 86400 secondes = 1 jour
#
# Utilité:
# - Moins de requêtes à S3 = Moins cher
# - Plus rapide (fichier en cache localement)
#
# Valeurs courantes:
# - max-age=3600 = 1 heure
# - max-age=86400 = 1 jour
# - max-age=604800 = 1 semaine
# - max-age=31536000 = 1 an
#
# Pour fichiers qui changent peu: cache long
# Pour fichiers qui changent souvent: cache court (ou 0)

═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 3 - TÉLÉCHARGER DES FICHIERS
═══════════════════════════════════════════════════════════════════════════════

DOWNLOAD = Récupérer des fichiers de S3 vers votre ordinateur

# Télécharger un fichier
aws s3 cp s3://my-bucket/file.txt ./

# EXPLICATION:
# "s3://my-bucket/file.txt" = Fichier S3 (source)
# "./" = Dossier LOCAL courant (destination)
#
# RÉSULTAT:
# - Le fichier "file.txt" est téléchargé
# - Il est mis dans le dossier où vous êtes
#
# Résultat console:
# download: s3://my-bucket/file.txt to ./file.txt
#
# EXEMPLE:
# Vous êtes dans /home/user/downloads/
# Commande: aws s3 cp s3://my-bucket/photo.jpg ./
# Résultat: Le fichier est maintenant en /home/user/downloads/photo.jpg

# Télécharger avec nouveau nom
aws s3 cp s3://my-bucket/file.txt ./downloaded-file.txt

# EXPLICATION:
# "./downloaded-file.txt" = Nouveau nom LOCAL
# Le fichier sera renommé en téléchargeant

# Télécharger un dossier entier
aws s3 cp s3://my-bucket/mydir/ ./mydir/ --recursive

# EXPLICATION:
# "s3://my-bucket/mydir/" = Dossier S3 (source)
# "./mydir/" = Dossier LOCAL (destination)
# "--recursive" = Télécharger tous les fichiers dedans
#
# Structure préservée!
#
# Si S3 contient:
#   - s3://my-bucket/mydir/file1.txt
#   - s3://my-bucket/mydir/subfolder/file2.txt
#
# Votre disque aura:
#   - ./mydir/file1.txt
#   - ./mydir/subfolder/file2.txt


═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 4 - SYNCHRONISER DES DOSSIERS (SYNC)
═══════════════════════════════════════════════════════════════════════════════

SYNC = Copier SEULEMENT ce qui a changé (très intelligent!)

# Synchroniser dossier local -> S3
aws s3 sync ./local-folder s3://my-bucket/remote-folder

# EXPLICATION:
# "aws s3 sync" = Synchroniser intelligemment
# "./local-folder" = Dossier LOCAL (source)
# "s3://my-bucket/remote-folder" = Dossier S3 (destination)
#
# COMMENT ÇA MARCHE:
# - AWS compare les fichiers locaux et S3
# - Envoie SEULEMENT les fichiers nouveaux/modifiés
# - Très efficient!
#
# EXEMPLE:
# Première fois: sync 10 fichiers (envoie les 10)
# Deuxième fois (1 fichier modifié, 1 nouveau):
#   - sync envoie SEULEMENT 2 fichiers
#   - Les 9 autres ne sont pas touchés
#
# Résultat console:
# upload: local-folder/file1.txt to s3://my-bucket/remote-folder/file1.txt
# upload: local-folder/file2.txt to s3://my-bucket/remote-folder/file2.txt
# upload: local-folder/subfolder/file3.txt to s3://my-bucket/remote-folder/subfolder/file3.txt

# Synchroniser S3 -> dossier local
aws s3 sync s3://my-bucket/remote-folder ./local-folder

# EXPLICATION:
# Fait l'inverse: télécharge depuis S3 vers votre ordinateur
# Pratique pour récupérer les modifications

# Synchroniser AVEC suppression
aws s3 sync ./local-folder s3://my-bucket/remote-folder --delete

# EXPLICATION:
# "--delete" = Supprimer sur S3 ce qui a été supprimé localement
#
# DANGER! Exemple:
# Vous avez 5 fichiers sur S3
# Vous supprimez 2 fichiers localement
# Vous lancez sync --delete
# -> Les 2 fichiers seront AUSSI supprimés de S3!
#
# Utilité: Synchronisation complète (S3 = miroir exact du local)

# Synchroniser AVEC exclusions (ignorer certains fichiers)
aws s3 sync ./local-folder s3://my-bucket/ --exclude "*.tmp" --exclude ".git/*"

# EXPLICATION:
# "--exclude" = Ne pas copier ces fichiers
# "*.tmp" = Tous les fichiers .tmp
# ".git/*" = Tout ce qui est dans .git/
#
# Utilité: Ne pas envoyer les fichiers inutiles
# - Fichiers temporaires
# - Dossiers .git (trop lourds)
# - Fichiers de compilation
# - Fichiers secrets
#
# Vous pouvez ajouter plusieurs --exclude

# Synchroniser SEULEMENT certains fichiers
aws s3 sync ./local-folder s3://my-bucket/ --include "*.jpg" --exclude "*"

# EXPLICATION:
# "--include" = SEULEMENT ces fichiers
# "--exclude '*'" = Exclure tout le reste
#
# Ici: Envoyer SEULEMENT les fichiers .jpg
# Les .png, .txt, etc. ne seront pas envoyés

═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 5 - DÉPLACER ET SUPPRIMER
═══════════════════════════════════════════════════════════════════════════════

# Déplacer/renommer un fichier
aws s3 mv s3://my-bucket/old.txt s3://my-bucket/new.txt

# EXPLICATION:
# "aws s3 mv" = "move" (déplacer)
# "old.txt" = Nom actuel
# "new.txt" = Nouveau nom
#
# RÉSULTAT:
# - Le fichier est renommé
# - L'ancien nom disparaît
# - Le nouveau nom apparaît
#
# C'est équivalent à: delete old.txt + create new.txt

# Déplacer entre buckets
aws s3 mv s3://source-bucket/file.txt s3://dest-bucket/file.txt

# EXPLICATION:
# Déplace un fichier d'un bucket à l'autre
# Le fichier disparaît du source-bucket
# Le fichier apparaît dans dest-bucket

# Supprimer un fichier
aws s3 rm s3://my-bucket/file.txt

# EXPLICATION:
# "aws s3 rm" = "remove" (supprimer)
# "file.txt" = Fichier à supprimer
#
# [ATTENTION] ATTENTION: C'EST PERMANENT!
# Le fichier est supprimé définitivement
# Sauf si vous avez la versioning activée (voir plus loin)

# Supprimer un dossier entier
aws s3 rm s3://my-bucket/folder/ --recursive

# EXPLICATION:
# "--recursive" = Supprimer TOUT dedans
# Le dossier et tous les sous-dossiers/fichiers seront supprimés
#
# [ATTENTION] ATTENTION: IRRÉVERSIBLE!
# Vérifiez que c'est vraiment ce que vous voulez supprimer!

# Supprimer plusieurs fichiers (wildcards)
aws s3 rm s3://my-bucket/ --recursive --exclude "*" --include "*.tmp"

# EXPLICATION:
# "--include '*.tmp'" = Seulement fichiers .tmp
# "--exclude '*'" = Exclure tout le reste
# Résultat: Supprime SEULEMENT les fichiers .tmp


═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 6 - PARTAGER DES FICHIERS (PERMISSIONS)
═══════════════════════════════════════════════════════════════════════════════

PERMISSIONS = Contrôler qui peut voir/télécharger vos fichiers

# Rendre un fichier PUBLIC (tout le monde peut le télécharger)
aws s3 cp file.txt s3://my-bucket/ --acl public-read

# EXPLICATION:
# "--acl public-read" = ACL (Access Control List)
# "public-read" = N'importe qui peut LIRE (télécharger)
#
# QU'EST-CE QUE ACL:
# ACL = Liste de qui peut faire quoi
# Les valeurs possibles:
# - private = Propriétaire SEULEMENT (défaut)
# - public-read = Tout le monde peut LIRE
# - public-read-write = Tout le monde peut LIRE + ÉCRIRE (très dangereux!)
# - authenticated-read = Utilisateurs AWS authentifiés seulement
#
# EXEMPLE:
# Vous uploadez une image publique:
# aws s3 cp image.jpg s3://my-bucket/ --acl public-read
#
# Maintenant, vous pouvez partager le lien:
# https://my-bucket.s3.amazonaws.com/image.jpg
# N'importe qui peut voir l'image!

# [ATTENTION] ATTENTION: Ne jamais utiliser public-read-write!
# aws s3 cp file.txt s3://my-bucket/ --acl public-read-write
# Cela signifie: N'importe qui peut MODIFIER/SUPPRIMER vos fichiers!
# Dangereux!

# Uploader avec ACL par défaut (private = sécurisé)
aws s3 cp file.txt s3://my-bucket/
# Sans --acl, c'est "private" (seulement vous)

# Rendre un fichier privé après l'avoir uploadé
aws s3api put-object-acl \
  --bucket my-bucket \
  --key file.txt \
  --acl private

# EXPLICATION:
# "aws s3api" = API plus bas niveau (plus d'options)
# "put-object-acl" = Changer les ACL d'un objet
# "--bucket my-bucket" = Quel bucket
# "--key file.txt" = Quel fichier
# "--acl private" = Nouveau ACL (privé)

═══════════════════════════════════════════════════════════════════════════════
[OK] ÉTAPE 7 - URLS TEMPORAIRES (PRESIGNED URLS)
═══════════════════════════════════════════════════════════════════════════════

PRESIGNED URL = Lien temporaire pour accéder à un fichier privé

# Générer une URL temporaire (expire après 1 heure)
aws s3 presign s3://my-bucket/private-file.pdf --expires-in 3600

# EXPLICATION DÉTAILLÉE:
# "aws s3 presign" = Créer une URL temporaire
# "s3://my-bucket/private-file.pdf" = Fichier privé
# "--expires-in 3600" = Valide pendant 3600 secondes (1 heure)
#
# RÉSULTAT:
# https://my-bucket.s3.amazonaws.com/private-file.pdf?
# X-Amz-Algorithm=AWS4-HMAC-SHA256&
# X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F...
# ... (beaucoup de caractères)
#
# C'est une longue URL avec un token (clé) dedans
#
# UTILITÉ:
# - Vous avez un fichier PRIVÉ dans S3
# - Vous voulez donner l'accès À QUELQU'UN D'AUTRE
# - Vous générez une URL temporaire
# - Vous lui envoyez ce lien
# - Il peut télécharger pendant 1 heure
# - Après 1 heure, le lien ne fonctionne plus
#
# EXEMPLE RÉEL:
# Cas d'usage: Partage de factures PDF avec clients
# 1. Facture est PRIVÉE (clients ne voient pas autres factures)
# 2. Vous générez presigned URL pour la facture de Jean
# 3. Vous envoyez le lien par email à Jean
# 4. Jean peut la télécharger
# 5. Après 24h, le lien expire (plus d'accès)

# URL valide pendant 7 jours
aws s3 presign s3://my-bucket/file.txt --expires-in 604800

# EXPLICATION:
# "604800" = 7 jours en secondes (60*60*24*7)
#
# Vous pouvez adapter la durée:
# - 1 minute: 60
# - 1 heure: 3600
# - 1 jour: 86400
# - 7 jours: 604800
# - 30 jours: 2592000
#
# CONSEIL:
# - Temps court (1h) = Sécurité maximale
# - Temps long (7j) = Flexibilité maximale
# - Choisissez selon votre besoin

# UTILITÉ DANS UNE APP:
# Cas: App web avec téléchargement de fichiers
# 1. L'utilisateur clique sur "télécharger"
# 2. Votre backend génère presigned URL
# 3. Votre frontend redirige vers cette URL
# 4. Le navigateur télécharge le fichier
# 5. Vous n'avez pas besoin de serveur pour ça!
# (Économie de bande passante!)


═══════════════════════════════════════════════════════════════════════════════
[OK] STORAGE CLASSES (TYPES DE STOCKAGE)
═══════════════════════════════════════════════════════════════════════════════

STORAGE CLASS = Où et comment stocker les données (affecte le prix!)

CLASSES DISPONIBLES:

S3 Standard (par défaut)
- Utilité: Fichiers accédés SOUVENT
- Latence: Très basse (immédiat)
- Prix: Plus cher
- Durabilité: 99.999999999%
- Cas d'usage: Sites web, applications, photos récentes

S3 Intelligent-Tiering
- Utilité: Usage imprévisible
- Latence: Automatique selon accès
- Prix: AWS choisit automatiquement
- Cas d'usage: Données mixtes, pas sûr du pattern

S3 Standard-IA (Infrequent Access)
- Utilité: Fichiers accédés RAREMENT
- Latence: Basse mais pas immédiate
- Prix: Moins cher, mais coûts accès
- Cas d'usage: Backups, archives de travail, 30j+

S3 One Zone-IA
- Utilité: Fichiers accédés rarement + UNE zone seulement
- Latence: Basse
- Prix: Très bon marché
- Cas d'usage: Backups locaux, données reproductibles

S3 Glacier Instant
- Utilité: Archive, accès en millisecondes
- Latence: Millisecondes
- Prix: Moins cher que IA
- Cas d'usage: Compliance (loi 7 ans), données anciennes

S3 Glacier Flexible
- Utilité: Archive, accès en minutes/heures
- Latence: 1 minute à 12 heures
- Prix: Très bon marché
- Cas d'usage: Très bonnes archives, données vieilles

S3 Glacier Deep Archive
- Utilité: Archive très longue durée
- Latence: 12 heures garanties
- Prix: TRÈS bon marché
- Cas d'usage: Compliance 30 ans, données jamais accédées

COMPARAISON DE PRIX (par GB/mois):
- S3 Standard: $0.023
- S3 Standard-IA: $0.0125
- S3 Glacier Instant: $0.004
- S3 Glacier Flexible: $0.0036
- S3 Glacier Deep: $0.00099

EXEMPLE: 100 GB de backups à garder 1 an
- Avec Standard: $0.023 × 100 × 12 = $27.60
- Avec Glacier Deep: $0.00099 × 100 × 12 = $1.19
- Économie: $26.41!

# Upload avec storage class spécifique
aws s3 cp file.txt s3://my-bucket/ --storage-class GLACIER

# EXPLICATION:
# "--storage-class GLACIER" = Type de stockage
# Le fichier sera archivé (excellent pour longue durée)
#
# Valeurs possibles:
# - STANDARD (défaut)
# - INTELLIGENT_TIERING
# - STANDARD_IA
# - ONE_ZONE_IA
# - GLACIER_IR (Instant Retrieval)
# - GLACIER (Flexible, défaut pour Glacier)
# - DEEP_ARCHIVE

# CONSEIL:
# - Photos/docs courants: Standard
# - Backups 30 jours: Standard-IA
# - Backups 1 an: Glacier
# - Compliance 7+ ans: Deep Archive# Pour fichiers qui changent peu: cache long
# Pour fichiers qui changent souvent: cache court (ou 0)