GCP Singapore Account Google Cloud Billing Management
Google Cloud Billing Management: Stop Guessing, Start Governing
Let’s be honest: cloud billing feels like trying to assemble IKEA furniture without the instruction manual—except the furniture is your monthly $47,823 invoice, and the missing screw is a forgotten g1-small instance running since 2021 in us-central1-b. Google Cloud Billing isn’t just about paying the bill—it’s about understanding why you’re paying it, who caused it, and how to stop writing checks that double as cryptic poetry. This guide cuts through the console clutter, CLI confusion, and billing report rabbit holes. No fluff. No marketing jargon. Just clear, battle-tested strategies—built from actual production fires we’ve helped extinguish (and sometimes accidentally lit ourselves).
Your First Line of Defense: Enable Billing Export—Like, Yesterday
Before you even glance at a budget alert or assign a label, export your billing data to BigQuery. Not ‘someday.’ Not ‘after the sprint.’ Now. Why? Because the Cloud Console’s built-in reports are like reading tea leaves—suggestive, ambiguous, and occasionally wrong. BigQuery gives you SQL, joins, window functions, and the power to ask: “Which team’s Terraform module spun up 87 preemptible GPUs last Tuesday and forgot to destroy them?”
Enable it in Billing → Billing Account → Export to BigQuery. Choose daily export, include credits, and yes—pay the $0.01/GB (it’s cheaper than one overprovisioned Redis instance). Once live, run this sanity-check query:
SELECT
service.description,
sku.description,
SUM(cost) AS total_cost,
COUNT(*) AS line_items
FROM `your-project.your_dataset.gcp_billing_export_v1_XXXXXX`
WHERE DATE(usage_start_time) >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
GROUP BY 1, 2
ORDER BY total_cost DESC
LIMIT 10;
If Cloud Storage API or BigQuery Slot Commitment tops that list—and you didn’t order either—you’ve already found your first leak.
Budgets Are Not Suggestions—They’re Tripwires
Google’s budget alerts aren’t passive notifications. They’re emergency flares. Set them at 75%, 90%, and 100% of your expected spend—not just “$10k/month.” Why three tiers? Because 75% gives you time to investigate (“Huh, BigQuery costs spiked—did someone run SELECT * FROM petabytes_of_logs?”). 90% triggers escalation (“Ops lead, please pause non-essential batch jobs”). 100% means something breaks automatically—like a Cloud Function that disables unused VMs or emails the CFO with a GIF of a burning wallet.
Pro tip: Tie budgets to projects, not just the billing account. A shared billing account with 42 projects is a liability. Use project-level budgets + hierarchical organization policies to enforce guardrails. And never set an email alert without also enabling Pub/Sub—because if your Slack bot goes down, your budget alert shouldn’t vanish into the void.
Labels: Your Secret Weapon (and Your Team’s Accountability Lifeline)
Labels aren’t metadata—they’re accountability infrastructure. Every resource must have at minimum: team=backend, env=prod, cost-center=marketing. No exceptions. Not even for ‘quick test clusters.’ Especially not for quick test clusters. Enforce this via Terraform default_tags, GCP Organization Policy (constraints/resourcemanager.allowedResourceTypes), or a pre-commit hook that rejects PRs missing labels.
GCP Singapore Account Then use them. In BigQuery:
SELECT
labels.team,
labels.env,
SUM(cost) AS monthly_cost
FROM `your-project.your_dataset.gcp_billing_export_v1_XXXXXX`,
UNNEST(labels) AS labels
WHERE DATE(usage_start_time) = '2024-06-01'
GROUP BY 1, 2
ORDER BY monthly_cost DESC;
When Finance asks, “Why did dev spend $12k on GPUs last month?” You reply: “Because ‘dev’ doesn’t exist as a label—only ‘ml-research’ and ‘qa-sandbox’. Here’s the breakdown.” No blame. Just clarity.
Invoices, Taxes, and the Art of Not Panicking
Your GCP invoice arrives monthly—but it’s not final until ~5 days after month-end. Why? Because usage data streams in asynchronously (hello, global edge caches and async logging). Don’t reconcile on the 1st. Wait until the 7th. Also: VAT/GST isn’t auto-calculated unless you’ve verified your tax ID in Billing → Manage Tax Settings. Skipping this turns your EU invoice into a surprise audit invitation.
Need PDFs for AP? Don’t screenshot the console. Use the gcloud CLI:
gcloud beta billing accounts invoices list --account=012345-678901-ABCDEF
# Then fetch details:
gcloud beta billing accounts invoices describe \
--account=012345-678901-ABCDEF \
--invoice-id=2024-06-0123456789
Yes, it outputs JSON. Pipe it to jq and generate clean PDFs with a tiny Python script—or just copy-paste into Notion if your AP team tolerates that level of chaos.
The Five Most Common (and Costly) Billing Blunders
- Zombie Instances: An idle
e2-standard-16costs $137/month. Multiply by 12 forgotten Rungcloud compute instances list --format="table(name,zone,status,machineType)" --filter="status!=RUNNING"weekly. Delete or stop. - Unreserved GPUs: A single A100 on-demand? $2.92/hour. Reserve for 1 year? $1.41/hour. That’s $13,100 saved. Reservations require commitment—but so does your rent.
- Public IPs You Didn’t Ask For: Each static external IP costs $0.004/hr (~$3/month) if unused. Check with
gcloud compute addresses list --filter="status=RESERVED". - BigQuery On-Demand Overkill: If your queries average >10 TB/month, switch to flat-rate slots. Yes, it’s $10k/month—but beats $22k in on-demand scans.
- Cloud Storage Class Confusion: Storing logs in
STANDARDwhen they belong inNEARLINE(or better,ARCHIVE) adds 3–10x cost. Automate class transitions with lifecycle rules.
Final Thought: Billing Is Culture, Not Configuration
No tool fixes bad habits. The most elegant budget alert won’t help if developers treat gcloud projects create like confetti. So bake cost awareness into your rituals: add cost impact to PR descriptions (“This change adds 2 new Cloud Functions → +$18/mo”), discuss spend trends in sprint retros, and celebrate teams that reduce costs—not just ship features. Because in the cloud, every line of code has a price tag. Your job isn’t to ignore it. It’s to read it closely, question it loudly, and pay it wisely.

