Guide
Créer un kill switch Firebase : désactiver la facturation automatiquement
21 octobre 2026 · 7 min de lecture
Pas à pas : une Cloud Function sur le sujet Pub/Sub de votre budget qui dissocie la facturation au-delà de votre limite, avec le code, le rôle IAM nécessaire et ses limites.
Ce que vous allez construire
Une Cloud Function abonnée au sujet Pub/Sub de votre budget. Chaque fois que Google publie l'état du budget, la fonction vérifie les dépenses et, au-delà de votre limite, retire le compte de facturation du projet. Google documente exactement ce modèle dans Disable billing usage with notifications, et Firebase y renvoie depuis sa page éviter les factures surprises.
Lisez d'abord les conséquences. L'avertissement de Google lui-même : "This tutorial removes Cloud Billing from your project, shutting down all resources." (« ce tutoriel retire Cloud Billing de votre projet, ce qui arrête toutes les ressources ») et "Resources might be irretrievably deleted." (« des ressources pourraient être supprimées de façon irréversible »). Voir ce qui se passe quand la facturation s'arrête.
1. Relier le budget à Pub/Sub
Dans la console Google Cloud, ouvrez Billing → Budgets & alerts, modifiez votre budget et, dans les notifications, reliez un sujet Pub/Sub (par exemple billing-alerts). Google y publie alors l'état du budget "multiple times per day" (« plusieurs fois par jour »), même en l'absence d'utilisation.
Chaque message est un JSON encodé en base64, avec des champs comme ceux-ci :
{
"budgetDisplayName": "my-project budget",
"costAmount": 142.37,
"costIntervalStart": "2026-10-01T07:00:00Z",
"budgetAmount": 100,
"budgetAmountType": "SPECIFIED_AMOUNT",
"alertThresholdExceeded": 1.0,
"currencyCode": "USD"
}2. Donner au compte de service de la fonction des droits de facturation
La fonction s'exécute sous un compte de service qui doit pouvoir modifier la facturation du projet. Le tutoriel de Google lui accorde roles/billing.admin (Billing Account Administrator) sur le compte de facturation. C'est un rôle puissant : utilisez un compte de service dédié à cette seule fonction.
3. La fonction
import { onMessagePublished } from "firebase-functions/v2/pubsub";
import { GoogleAuth } from "google-auth-library";
const PROJECT_ID = process.env.GCLOUD_PROJECT!;
export const killSwitch = onMessagePublished(
{ topic: "billing-alerts", serviceAccount: "billing-kill@YOUR_PROJECT.iam.gserviceaccount.com" },
async (event) => {
const data = event.data.message.json as { costAmount: number; budgetAmount: number };
if (data.costAmount < data.budgetAmount) return; // still under budget
const auth = new GoogleAuth({ scopes: ["https://www.googleapis.com/auth/cloud-billing"] });
const client = await auth.getClient();
const url = `https://cloudbilling.googleapis.com/v1/projects/${PROJECT_ID}/billingInfo`;
const { data: info } = await client.request<{ billingEnabled?: boolean }>({ url });
if (!info.billingEnabled) return; // already disabled
// An empty billing account name detaches billing from the project.
await client.request({ url, method: "PUT", data: { billingAccountName: "" } });
console.log(`Billing disabled: ${data.costAmount} of ${data.budgetAmount}`);
},
);Testez-la sur un projet jetable avec un budget minuscule avant de lui confier un vrai projet.
Les limites de la version faite maison
- C'est tout ou rien. Il n'y a pas d'étape entre « continuer à dépenser » et « tout couper », alors la plupart des gens fixent la limite haut et croisent les doigts.
- Elle hérite du délai de remontée. Google lui-même dit que suivre ces étapes "doesn't guarantee that you won't spend more than your budget" (« ne garantit pas que vous ne dépasserez pas votre budget »).
- Personne ne surveille le surveillant. Si le sujet, le budget ou l'autorisation casse, la fonction ne s'exécute jamais, sans un bruit.
- Un projet à la fois. Chaque projet a besoin de son propre budget, sujet, fonction et configuration IAM.
FireShield, c'est ce kill switch en tant que service : budgets synchronisés pour vous, un webhook Soft Kill avant le Hard Kill, des alertes par e-mail, Slack et Telegram, un journal d'audit de chaque action et la détection de pics d'utilisation sur la formule Pro.
