Changer le thème

Frais de trafic S3 à 1 000 $/mois ? Migrer vers R2 en 3 étapes et économiser 90 % (cas réels)

Easton editorial illustration: security-and-delivery gateway

En ouvrant la facture AWS : stockage 230 $, trafic 4 500 $ — 50 To de trafic, et le budget fond. Des amis en vidéo et hébergement d’images subissent les mêmes frais de trafic S3. Un SaaS : 10 To/mois, facture 891 $, stockage 15 $ — le trafic représente 98 %.

Avec Cloudflare R2 ? Zéro frais de trafic sortant : mêmes 10 To, seulement 15 $ de stockage. Cet article partage calculs de coûts réels, tests de compatibilité API, tutoriel en 30 minutes et pièges vécus. Si votre trafic dépasse 500 Go/mois, vous pouvez économiser des milliers à des dizaines de milliers de dollars par an.

10 896 $
Économie annuelle
Cas application SaaS
90 %
Réduction des coûts
Zéro frais de trafic
80-90 %
Compatibilité API
Fonctions essentielles
Source: Données mesurées

Pourquoi migrer de S3 vers R2 ? Les chiffres

Le piège des coûts cachés S3

La tarification AWS est trompeuse. Stockage à 0,023 $/Go semble bon marché — jusqu’à ce que le trafic sortant à 0,09 $/Go prenne le dessus.

Exemple : site vidéo, 10 To stockés, 50 To de trafic mensuel :

  • Stockage : 10 To × 23 $/To = 230 $/mois
  • Trafic : 50 To × 90 $/To = 4 500 $/mois
  • Total : 4 730 $/mois

Le trafic représente ~95 %. Et c’est au tarif 0,09 $/Go ; les petits volumes n’ont pas toujours de remise.

Un ami en hébergement d’images : 20 To/mois, ~20 676 $/an sur S3. « Stockage 276 $, le reste c’est du trafic — on travaille pour AWS. »

L’avantage coût de R2

L’atout majeur de Cloudflare R2 : zéro frais de trafic sortant.

Pas une réduction — gratuit. Que ce soit 1 To ou 100 To de trafic : 0 $.

Détail :

  • Stockage : 0,015 $/Go, soit 15 $/To (-35 % vs S3)
  • Trafic sortant : 0 $ (S3 : 90 $/To)
  • Opérations : Class A 4,50 $/million, Class B 0,36 $/million

Quota gratuit R2 :

  • 10 Go de stockage
  • 1 million d’opérations Class A (écriture, listes)
  • 10 millions d’opérations Class B (lectures)

Pour un blog perso ou petit projet, tout peut tenir dans le gratuit.

Comparaison de cas réels

ScénarioStockageTrafic/moisS3/moisR2/moisÉconomie/an
Blog perso50 Go500 Go50 $0,75 $591 $
Application SaaS1 To10 To923 $15 $10 896 $
Plateforme vidéo10 To50 To4 730 $150 $54 960 $

Même besoin SaaS : 10 896 $/an en moins — l’équivalent d’un junior. Plateforme vidéo : 54 960 $/an à réinvestir.

54 960 $
Économie annuelle
Source: Cas plateforme vidéo (10 To stockage, 50 To trafic)

Quand ne pas migrer

R2 n’est pas universel :

  1. Écosystème AWS profond : Lambda, Athena, EMR — refonte coûteuse.
  2. Conformité avancée : Object Lock, Legal Hold — R2 ne les offre pas encore.
  3. Trafic très faible : < 100 Go/mois — économies négligeables.
  4. Localisation stricte : S3 a 33 régions ; R2 moins de choix — vérifier les contraintes pays.

Mon critère : trafic > 500 Go/mois → migration rentable. En dessous, selon votre sensibilité au coût.

Compatibilité API R2 et S3 (pièges)

Jusqu’où R2 est compatible

Question clé : l’app va-t-elle casser ? Combien de code à changer ?

R2 couvre 80-90 % de l’API S3 — les opérations du quotidien passent.

Cloudflare a implémenté l’essentiel :

  • Base : PutObject, GetObject, DeleteObject, ListObjects (~99 % des usages)
  • Avancé : Multipart Upload, Presigned URLs, CORS
  • Droits : Bucket policies, clés type IAM

Souvent : changer endpoint et credentials suffit.

Exemple AWS SDK JavaScript — 3 lignes modifiées :

// Config S3 d'origine
const s3 = new AWS.S3({
  region: 'us-east-1'
});
// Migration R2 (endpoint + credentials)
const r2 = new AWS.S3({
  endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,
  accessKeyId: R2_ACCESS_KEY_ID,
  secretAccessKey: R2_SECRET_ACCESS_KEY,
  signatureVersion: 'v4',
});

Upload, download, delete : inchangés. Deux semaines de tests sans souci de compatibilité.

Fonctions non supportées

Avant migration, vérifier si vous utilisez :

1. S3 Select (SQL sur objets)
Non sur R2 — télécharger puis traiter, ou autre solution.

2. Object Lock / Legal Hold (WORM)
Finance, santé : R2 ne les a pas — ne migrez pas si l’audit l’exige.

3. Versioning
Support limité sur R2 — tester si vous dépendez du rollback de versions.

4. S3 Inventory, S3 Object Lambda
Non disponibles sur R2.

Conseil : lister les API S3 utilisées et les comparer à la doc officielle Cloudflare. La plupart des apps n’utilisent que le socle.

Outils testés

OutilCompatibilitéNote
AWS CLI✅ ParfaitConfigurer l’endpoint
rclone✅ Parfaitv1.59+, support R2 natif
s3cmd✅ ParfaitFichier de config
AWS SDK (JS/Python/Go)✅ ParfaitEndpoint + credentials
Cyberduck✅ ParfaitInterface graphique

rclone ≥ 1.59 — les anciennes versions ont des soucis d’authentification.

Piège vécu

Une app utilisait ListObjectsV2 avec StartAfter pour la pagination. Après migration, comportement légèrement différent — données manquantes.

Correction : passer à ContinuationToken. Tester largement après migration, y compris les cas limites.

3 méthodes de migration : laquelle choisir ?

Cloudflare propose Super Slurper et Sippy ; la communauté utilise rclone.

Méthode 1 : Super Slurper (débutants, ponctuel)

Outil officiel « tout migrer d’un coup ».

Avantages :

  • Quelques formulaires
  • Métadonnées conservées (metadata, content-type)
  • Source intacte — zéro risque de perte
  • Gratuit (frais Class A R2 minimes)
  • Depuis 2024 : vitesse ×5

Limites :

  • Migration unique, pas de sync incrémentale
  • Nouveaux fichiers sur S3 pendant la migration non copiés automatiquement
  • Objets < 50 Go recommandés (gros fichiers parfois problématiques)

Pour qui : < 10 To, courte maintenance acceptable, bascule totale vers R2.

Mon premier projet : 100 Go en ~30 min. Fenêtre 3 h du matin — utilisateurs peu impactés.

Méthode 2 : Sippy (sans interruption, progressif)

Zéro downtime.

Principe : l’app pointe vers R2. À la demande d’un fichier :

  1. R2 cherche localement
  2. Si présent → réponse directe
  3. Sinon → fetch S3, copie vers R2, prochaine fois depuis R2

Données chaudes d’abord, froides ensuite.

Avantages :

  • Aucune interruption
  • Baisse des frais S3 (trafic chaud sur R2)
  • Retour S3 possible pendant la transition

Limites :

  • Premier accès à un fichier froid plus lent (pull S3)
  • Config plus complexe
  • Profils d’accès chaud/froid clairs recommandés

Pour qui : production 24/7, > 10 To, test de stabilité avant bascule complète.

Un ami CDN : 50 To via Sippy, deux mois, service intact.

Méthode 3 : rclone (flexible)

Outil open source en ligne de commande.

Avantages :

  • Gratuit
  • Reprise sur erreur
  • Sync planifiée (ex. chaque nuit)
  • Vérification MD5/SHA256
  • Limitation de débit

Limites :

  • Courbe d’apprentissage CLI
  • Scripts de suivi à écrire
  • Trafic sortant S3 pendant le transfert (depuis mars 2024, AWS ne facture plus le trafic de sortie pour migration)

Pour qui : contrôle total, double écriture temporaire S3+R2, intégrité stricte.

Exemple :

rclone copy s3:my-bucket r2:my-bucket \
  --progress \
  --checksum \
  --transfers 32 \
  --s3-chunk-size 64M

--checksum vérifie le MD5 ; --transfers 32 accélère.

Décision rapide

Interruption possible ?
├─ Oui → < 10 To ?
│      ├─ Oui → Super Slurper (le plus simple)
│      └─ Non → rclone (rapide, contrôlé)
└─ Non → Sippy (zéro interruption)
Fort en technique + contrôle → rclone

Pour la majorité : Super Slurper suffit. Sippy ou rclone si pas une minute d’arrêt ou > 50 To.

Migration S3 vers R2 (Super Slurper)

Migration sans risque en 30 minutes — de la préparation à la validation et la bascule

Estimated time: PT30M

  1. 1

    Step 1: Préparation : compte R2 et utilisateur IAM

    Préparation :
  2. 2

    Step 2: • Nom

    r2-migration-readonly
  3. 3

    Step 3: • Permission

    AmazonS3ReadOnlyAccess ou politique bucket ciblé
  4. 4

    Step 4: Exécution : configurer Super Slurper

    Étapes :
  5. 5

    Step 5: • Overwrite existing objects

    recommandé
  6. 6

    Step 6: • Path prefix

    optionnel
  7. 7

    Step 7: Suivi

    Progression :
  8. 8

    Step 8: • 100 Go

    ~30 min
  9. 9

    Step 9: • 1 To

    4-6 h
  10. 10

    Step 10: • 10 To

    2-3 jours
  11. 11

    Step 11: Validation

    Vérifications :
  12. 12

    Step 12: • ETag

    aws s3api head-object
  13. 13

    Step 13: • MD5 R2

    rclone md5sum
  14. 14

    Step 14: Bascule application

    Configuration :

Tutoriel : migration sans risque en 30 minutes (Super Slurper)

Étape 1 : préparation (5 minutes)

1. Compte Cloudflare et R2

Cloudflare Dashboard → R2 Object Storage → activer.

R2 demande une carte ; quota gratuit — petits projets souvent à 0 $.

2. Créer un bucket R2

Create bucket :

  • Nom (aligné sur S3 si possible)
  • Location hint (UE si conformité, sinon Automatic)

⚠️ Location hint et restrictions juridictionnelles non modifiables après création. Automatic suffit en général.

3. Utilisateur IAM lecture seule AWS

Ne pas utiliser les clés du compte principal.

IAM → Users → Add User :

  • Nom : r2-migration-readonly
  • Programmatic access
  • AmazonS3ReadOnlyAccess

Ou politique ciblée :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ]
    }
  ]
}

Copier Access Key ID et Secret — affichage unique.

4. Token API R2

R2 → Manage R2 API Tokens → Create :

  • Nom : migration-token
  • Object Read & Write
  • Bucket concerné

Sauvegarder les clés.

Étape 2 : migration (15 min de config)

1. Data Migration → Migrate Files
2. Super Slurper (pas Sippy pour migration ponctuelle)
3. Source S3 : Provider Amazon S3, nom, région, clés → Verify Connection
4. Cible R2 : bucket, clés R2
5. Options : Overwrite recommandé ; Path prefix si dossier partiel (images/)
6. Review → Start Migration

Progression : débit, fichiers, ETA. Fermer la page possible — tâche en arrière-plan.

Durées : 100 Go ~30 min ; 1 To 4-6 h ; 10 To 2-3 jours.

Étape 3 : validation (10 minutes)

Ne supprimez pas S3 tout de suite.

1. Comparer le nombre d’objets.
2. MD5 échantillon :

aws s3api head-object --bucket my-bucket --key test.jpg --query 'ETag' --output text
rclone md5sum r2:my-bucket/test.jpg

3. Tester téléchargement via URL publique ou API.
4. Vérifier métadonnées :

aws s3api head-object --bucket my-bucket --key test.jpg

Étape 4 : basculer l’application

Déploiement progressif recommandé.

# S3
S3_ENDPOINT=https://s3.amazonaws.com
S3_BUCKET=my-bucket
S3_ACCESS_KEY=xxx
S3_SECRET_KEY=xxx
S3_REGION=us-east-1
# R2
S3_ENDPOINT=https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
S3_BUCKET=my-bucket
S3_ACCESS_KEY=R2_xxx
S3_SECRET_KEY=R2_xxx
S3_REGION=auto

10 % → 50 % → 100 %. Surveiller erreurs, latence, facture.

Garder S3 30 jours. Depuis mars 2024, trafic de sortie migration gratuit côté AWS.

{
  "Rules": [
    {
      "Status": "Enabled",
      "Expiration": {
        "Days": 30
      }
    }
  ]
}

Suppression automatique après 30 jours.

Optimisation et monitoring après migration

Performance

1. CDN Cloudflare

R2 → Public Access → Connect Domain (domaine sur Cloudflare) → cache CDN.

2. Cache-Control

// Statique : 1 an
s3.upload({
  Bucket: 'my-bucket',
  Key: 'image.jpg',
  Body: fileBuffer,
  CacheControl: 'public, max-age=31536000, immutable'
});
// Contenu variable : 1 h
s3.upload({
  // ...
  CacheControl: 'public, max-age=3600'
});

3. Domaine personnalisé

De https://xxx.r2.cloudflarestorage.com/file.jpg à https://cdn.yoursite.com/file.jpg.

Coûts

1. Infrequent Access (IA)
0,01 $/Go stockage vs 0,015 $ standard ; lecture IA 0,01 $/Go — archives, backups.

2. Taille des parts Multipart
Chaque part = une opération Class A :

  • < 100 Mo : upload simple
  • 100 Mo-1 Go : 64 Mo
  • 1 Go : 128 Mo

rclone copy s3:bucket r2:bucket --s3-chunk-size 64M

3. Class A / B
Écriture 4,50 $/M ; lecture 0,36 $/M — surveiller les pics d’écriture.

Monitoring

1. Analytics R2 — requêtes, trafic, erreurs, top fichiers.
2. Alertes — Notifications → R2 storage usage (ex. > 50 $/mois).
3. APM — erreurs < 0,1 %, latence moyenne < 100 ms, P99 < 500 ms.
4. Comparer factures S3 avant / R2 après chaque mois.

Conclusion : migrer vers R2, ça vaut le coup ?

Si trafic > 500 Go/mois, oui.

  1. Économies réelles : zéro egress — facture -50 à -90 %. SaaS : 10 000 $+/an ; vidéo : 50 000 $+ courant.
  2. Migration simple : Super Slurper ~30 min de config ; 80-90 % API ; souvent endpoint seulement.
  3. Risque maîtrisé : source conservée, bascule progressive, rollback possible ; trafic migration AWS gratuit.

Limites : écosystème AWS profond, Object Lock, trafic < 100 Go/mois.

Conseil : quota gratuit R2 pour tester ; Sippy pour migration progressive à faible risque.

Un ami hébergeur d’images : 1 800 $/mois S3 → 18 $ R2. L’économie a financé un designer — optimiser les coûts, c’est réallouer vers ce qui compte.

Actions :

  1. Calculateur R2
  2. Tester avec le quota gratuit
  3. Choisir Super Slurper / Sippy / rclone
  4. Bascule progressive
  5. Profiter de la facture allégée

Questions en commentaires — bonne migration.

FAQ

Combien peut-on économiser en migrant de S3 vers R2 ?
Cas réels :

Application SaaS (1 To stockage, 10 To trafic) :
• S3 : 923 $/mois, R2 : 15 $/mois, économie annuelle 10 896 $

Plateforme vidéo (10 To stockage, 50 To trafic) :
• Économie annuelle 54 960 $

Analyse des coûts :
• Les frais de trafic S3 représentent ~95 % (10 To stockage 230 $/mois, 50 To trafic 4 500 $/mois)
• R2 : zéro frais de trafic sortant, stockage 15 $/To (35 % moins cher que S3)

Critères :
• Migration rentable si trafic mensuel > 500 Go
• ROI faible si trafic < 100 Go/mois
Quelle est la compatibilité API entre R2 et S3 ?
R2 implémente 80 à 90 % des fonctions API S3 essentielles ; les opérations courantes sont prises en charge :

Fonctions supportées :
• Opérations de base (PutObject/GetObject/DeleteObject/ListObjects) : compatibilité complète
• Fonctions avancées (Multipart Upload, Presigned URLs, CORS) : supportées
• Gestion des droits (Bucket policies, clés type IAM) : supportées

Il suffit de modifier l'endpoint et les credentials ; le code change peu.

Non supporté :
• S3 Select
• Object Lock et Legal Hold
• Versioning limité
• S3 Inventory et S3 Object Lambda

Avant migration : lister les fonctions S3 utilisées et vérifier la liste de compatibilité officielle.
Comment choisir une méthode de migration ?
3 méthodes :

1) Super Slurper (recommandé débutants, migration ponctuelle) :
• Données < 10 To, courte interruption acceptable, bascule complète vers R2
• Interface simple, métadonnées conservées, source non supprimée
• ~30 minutes pour 100 Go

2) Sippy (progressif sans interruption) :
• Production sans arrêt, > 10 To, test de stabilité avant bascule
• Zéro interruption, migration à la demande des données chaudes

3) rclone (le plus flexible) :
• Forte compétence technique, synchronisation continue, intégrité stricte
• Reprise sur erreur, sync planifiée, vérification d'intégrité

Arbre de décision :
• Interruption OK et < 10 To → Super Slurper
• Pas d'interruption → Sippy
• Contrôle total → rclone
Comment exécuter une migration Super Slurper ?
Préparation :
• Compte Cloudflare + R2, créer un bucket R2
• Utilisateur IAM AWS en lecture seule (r2-migration-readonly, AmazonS3ReadOnlyAccess)
• Token API R2 (Object Read & Write)

Migration :
1. Console R2 → Data Migration → Migrate Files
2. Choisir Super Slurper
3. Bucket source (Provider: Amazon S3, nom, région, Access Key)
4. Bucket cible (nom, clés R2)
5. Options (Overwrite existing objects recommandé)
6. Review puis Start Migration

Durées estimées :
• 100 Go : ~30 minutes
• 1 To : 4-6 heures
• 10 To : 2-3 jours
Comment valider et basculer après migration ?
Validation :
• Nombre d'objets identique S3/R2
• Échantillon d'intégrité (ETag S3 via aws s3api head-object, MD5 R2 via rclone md5sum)
• Test d'accès et métadonnées

Bascule application :
• S3_ENDPOINT → endpoint R2, clés R2, S3_REGION=auto

Déploiement progressif :
• 10 % → 50 % → 100 %
• Logs, taux d'erreur, retours utilisateurs

Indicateurs :
• Taux d'erreur API, latence, frais de trafic en forte baisse

Conserver S3 30 jours (règle de cycle de vie pour nettoyage automatique).
Quand ne pas migrer vers R2 ?
Cas peu adaptés :

1) Écosystème AWS profond :
• Usage intensif Lambda, Athena, EMR — coût de migration élevé

2) Conformité avancée :
• Object Lock, Legal Hold (finance, santé) — R2 ne les supporte pas encore

3) Trafic très faible :
• < 100 Go/mois — économies minimes

4) Exigences géographiques strictes :
• S3 : 33 régions ; R2 moins de choix — vérifier la localisation des données

Critère : trafic > 500 Go/mois → ROI intéressant ; sinon selon sensibilité au coût. Tester d'abord le quota gratuit R2.
Comment optimiser performances et coûts R2 après migration ?
Performance :

1) CDN Cloudflare :
• Public Access → Connect Domain — cache CDN automatique

2) Cache-Control adapté :
• Ressources statiques : 1 an
• Contenu variable : 1 heure

3) Domaine personnalisé R2 :
• URL plus propre, meilleures perfs CDN

Coûts :

1) Classe Infrequent Access pour données froides :
• 0,01 $/Go vs 0,015 $/Go standard
• Archives, sauvegardes

2) Taille des parts Multipart Upload :
• < 100 Mo : upload simple
• 100 Mo-1 Go : 64 Mo
• > 1 Go : 128 Mo

3) Surveiller opérations Class A/B :
• Class A écriture 4,50 $/million
• Class B lecture 0,36 $/million

Monitoring :
• Analytics Cloudflare, alertes de coût
• Erreurs et latence côté application

9 min de lecture · Publié le: 1 déc. 2025 · Mis à jour le: 27 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog