GCP FinOps Guide: Automated Cost Optimization for Google Cloud
FinOps — short for Cloud Financial Operations — is the practice of bringing financial accountability to cloud spending. It is not about cutting costs at all costs. It is about making informed trade-offs between speed, quality, and cost so that every dollar of cloud spend delivers value.
On Google Cloud Platform, FinOps has unique characteristics. GCP's pricing models, resource types, and tooling differ from AWS and Azure in ways that matter for cost optimization. This guide covers GCP-specific FinOps principles, the biggest cost drivers, and how to build an automated optimization pipeline that scales with your infrastructure.
The Three Phases of FinOps
The FinOps Foundation defines three iterative phases: Inform, Optimize, and Operate. On GCP, each phase maps to specific tools and processes.
Phase 1: Inform — Visibility Into Your GCP Spend
You cannot optimize what you cannot see. The first phase is about building comprehensive visibility into where your money goes. On GCP, this starts with the Billing Export to BigQuery, which provides granular, row-level cost data for every resource in every project.
Enable billing export early. Retroactive data is not available — you only get cost data from the day you enable the export forward. Export to a dedicated billing project with restricted access so that cost data is available to finance and engineering teams without exposing production infrastructure.
Layer on labels. GCP supports resource labels on most services, and these labels appear in billing data. Establish a labeling convention early: at minimum, use labels forteam,environment, and service. Without labels, you can see that a project costs $5,000/month but not which team or service is responsible.
Beyond billing data, instrument your services with utilization metrics. GCP Cloud Monitoring provides built-in metrics for Cloud Run (request count, CPU utilization, memory utilization, instance count), Compute Engine (CPU, disk, network), and most other services. These metrics are the foundation for right-sizing decisions.
Cloud Guardian Approach
Cloud Guardian acts as the Inform layer by scanning your GCP projects every 6 hours. It collects resource configurations, utilization metrics, and cost data, then presents them in a unified dashboard with per-project and per-service breakdowns. No BigQuery setup required — connect your project and see results on the first scan.
Phase 2: Optimize — Identifying and Acting on Waste
With visibility in place, the next phase is identifying optimization opportunities and acting on them. On GCP, the most common sources of waste fall into predictable categories:
Idle resources: Cloud Run services with min_instances holding warm containers that receive no traffic. Compute Engine VMs running 24/7 for workloads that only need daytime hours. Cloud SQL instances sized for peak load that runs at 5% utilization overnight.
Over-provisioned resources: Services allocated 4 vCPUs that peak at 0.8 vCPU. Memory allocations of 4 GiB for services that use 600 MiB. Cloud SQL instances on db-custom-8-32768 when db-custom-2-8192 would suffice.
Storage sprawl: Artifact Registry repositories with thousands of old container images. GCS buckets with no lifecycle policies. Persistent disks attached to deleted VMs. Snapshot schedules creating daily snapshots with no retention limit.
Architectural waste: Services that should be Cloud Functions deployed as Cloud Run services. Synchronous processing that should be asynchronous with Pub/Sub. Multiple small services that could be consolidated.
The optimization phase is where most organizations stall. Identifying waste is straightforward; getting it fixed is hard. Engineering teams are busy shipping features. Cost optimization tickets sit in backlogs for months. The key insight of mature FinOps practices is that optimization must be automated — not delegated to humans who will deprioritize it.
Cloud Guardian Approach
Cloud Guardian bridges the gap between detection and action. When it identifies a misconfiguration — cpu_idle disabled, excessive min_instances, bloated Artifact Registry — it does not just create a ticket. It generates a Terraform PR with the exact fix, or applies it directly via the GCP API. The remediation engine supports dry-run mode for teams that want approval before changes are applied.
Phase 3: Operate — Sustaining Optimization Over Time
One-time optimization is not FinOps. The Operate phase is about building guardrails and processes that prevent waste from recurring. On GCP, this means:
Budget alerts: Set budgets at the project or billing account level with alerts at 50%, 80%, and 100% thresholds. GCP billing budgets can trigger Pub/Sub notifications for automated responses.
Policy enforcement: Use Organization Policies and custom constraints to prevent over-provisioning at deploy time. For example, restrict Cloud Run services to a maximum of 2 vCPUs unless explicitly exempted.
Continuous scanning: Run cost optimization scans on a schedule — not quarterly, not monthly, but continuously. New deployments happen daily. A service that was right-sized last month may be over-provisioned today after a traffic pattern change.
Cost reviews: Establish a regular cadence (weekly or biweekly) where engineering leads review their team's cloud spend. The goal is not micromanagement; it is building cost awareness as a cultural norm.
Cloud Guardian Approach
Cloud Guardian operates continuously with 6-hour scan cycles. It tracks savings over time with a configurable verification window, so you can see not just what was fixed but whether the fix actually reduced costs. Cost alerts notify you when spending exceeds thresholds. The guardian rules engine lets you define custom policies that are enforced on every scan.
GCP-Specific Cost Drivers to Watch
While the FinOps framework is cloud-agnostic, the specific cost drivers vary by provider. On GCP, these are the areas that most consistently generate unexpected costs:
Cloud Run: The Silent Accumulator
Cloud Run's per-second billing model is efficient for well-configured services but punishing for misconfigured ones. The biggest cost traps are always-on CPU allocation (cpu_idle disabled), unnecessary minimum instances, and over-provisioned memory. A single misconfigured service can cost $100-500/month more than it should. Across 20+ services, that adds up fast.
Artifact Registry: Death by a Thousand Images
Container image storage costs are individually small but collectively significant. At $0.10/GB/month, a 100 GB Artifact Registry repository costs $10/month. Most organizations have 5-20 repositories, and without cleanup automation, each grows indefinitely. We regularly see organizations spending $50-200/month on container images they will never use again.
Networking: Egress is Expensive
GCP network egress pricing starts at $0.12/GB for internet-bound traffic. Cross-region traffic is $0.01-0.08/GB depending on the regions. Services that communicate across regions or serve large responses to external clients can generate surprising network bills. The fix is often architectural: co-locate services in the same region, use Cloud CDN for cacheable responses, and compress payloads.
Cloud SQL and AlloyDB: Over-Provisioning is the Default
Database instances are typically the largest single line item in a GCP bill. Teams provision for peak load and never revisit the sizing. Cloud SQL supports storage auto-resize, but it only grows — it never shrinks. Review CPU and memory utilization quarterly and downsize aggressively during non-peak periods.
Building an Automated FinOps Pipeline
A mature GCP FinOps pipeline has four components:
- Discovery: Automatically inventory all resources across all projects. This is more complex than it sounds because GCP organizations can have hundreds of projects, and resources are spread across different APIs (Cloud Run, Compute, Storage, Secret Manager, Artifact Registry, etc.).
- Assessment: Compare each resource's configuration and utilization against optimization best practices. This requires both static analysis (is cpu_idle enabled?) and dynamic analysis (what is the 95th percentile CPU utilization?).
- Remediation: Generate and apply fixes. The gold standard is Infrastructure as Code integration — generate a Terraform PR so the fix goes through your normal review process. For urgent fixes or non-IaC managed resources, direct API calls are an acceptable alternative.
- Verification: Confirm that the fix actually reduced costs. This closes the loop and builds confidence in the automation. Without verification, you are optimizing on faith.
Building this pipeline from scratch is a significant engineering investment. You need GCP API integrations, a rules engine, a scheduling system, GitHub/GitLab integration for PR generation, and a monitoring layer. Most organizations either build a partial solution that covers 20% of their resources, or they rely on manual processes that drift over time.
Getting Started with GCP FinOps
If you are starting from zero, here is a practical roadmap:
- Week 1: Enable billing export to BigQuery. Set up budget alerts on your top 5 projects. Get baseline visibility.
- Week 2: Audit Cloud Run services across all projects. Enable cpu_idle on every request-driven service. Set min_instances to zero where appropriate.
- Week 3: Implement Artifact Registry cleanup. Review Secret Manager for unused secrets. Right-size your top 10 services by spend.
- Week 4: Establish a recurring cost review cadence. Set up automated scanning so new waste is caught before it accumulates.
Alternatively, connect your GCP projects to an automated platform that handles discovery, assessment, remediation, and verification out of the box. The economics are straightforward: if the platform saves you more than it costs, it is worth it. If it saves you engineering time on top of cloud costs, it is a clear win.
Start Your GCP FinOps Practice Today
Cloud Guardian automates the entire FinOps pipeline for GCP: discover resources, assess configurations, remediate waste, and verify savings. Connect your first project in under 5 minutes — no billing export setup required.
Get Started Free