Cloudflare devant ma Cloud Function, et pourtant zéro cache — le piège des en-têtes
Une Cloud Function qui sert des images Cloud Storage paie invocation + egress à chaque vue. Le CDN ne cache rien sans Cache-Control — la chaîne complète en 6 étapes.
Cloudflare devant ma Cloud Function, et pourtant zéro cache. Le piège coûte cher, et il n'est pas où on le cherche.
Le contexte : une Cloud Function (Gen 2) lit des images dans Cloud Storage et les renvoie. Ça fonctionne… mais chaque requête déclenche la function et paie l'egress GCP. Pour des images consultées en boucle, c'est de l'argent perdu.
Cloudflare en proxy DNS ajoute un CDN devant la function : les images sont mises en cache au plus près des utilisateurs. Les requêtes répétées ne touchent plus GCP.

1️⃣ Ajoute un domaine custom à la function
Les URL .run.app ou .cloudfunctions.net ne se proxifient pas directement. Mappe un domaine via Cloud Run (ou un Load Balancer) pour obtenir par exemple img.tondomaine.com.
2️⃣ Configure Cloudflare
Crée un CNAME vers la cible GCP et laisse le nuage orange activé. Nuage gris = pas de proxy, donc pas de cache.
3️⃣ Passe le SSL en Full (strict)
GCP fournit déjà un certificat valide. Le trafic reste chiffré jusqu'à l'origine, certificat vérifié.
4️⃣ Ajoute les bons en-têtes de cache (l'étape que tout le monde oublie)
Renvoie Cache-Control: public, max-age=86400 (ou plus). Sans ça, Cloudflare revient systématiquement à l'origine et tu continues de payer invocation + egress.
5️⃣ Force le cache si nécessaire
Si tes URLs ressemblent à /image/123 au lieu de photo.jpg, crée une Cache Rule avec Eligible for cache. Vérifie ensuite cf-cache-status : tu veux voir MISS, puis HIT.
6️⃣ Bloque l'accès direct à l'origine
Sinon, n'importe qui peut contourner Cloudflare et relancer les coûts. Vérifie un en-tête secret ou filtre les IP Cloudflare au niveau du Load Balancer.
Le résultat ?
La première requête est servie par GCP. Les suivantes viennent du cache Cloudflare : moins d'invocations, moins d'egress, une latence plus faible… et une facture qui descend.
💡 Le vrai gain ne vient pas du DNS, mais des en-têtes Cache-Control. Sans eux, ton CDN ne cache rien.