Back to Blog
    Multi-Cloud

    Multi-Cloud Cost Optimization: Beyond AWS

    Kostiantyn DementievJuly 15, 20259 min read

    Scope of this article

    We deliver on AWS. This is technical commentary on how the cost model differs across the three major providers, written for teams who already run more than one. If your Azure or GCP estate needs hands-on work, you want a specialist in that platform, not us.

    Running more than one cloud spreads your risk and gives you room to negotiate at renewal. It also splits your cost data across three billing models that do not agree on what a unit of compute is, how a discount gets applied, or when a month ends. The optimization techniques transfer between providers. The tooling does not.

    Where multi-cloud cost work gets hard

    Billing complexity

    Different billing cycles, currencies, and invoice formats. Comparing two providers means normalizing the data before you can start.

    Tool fragmentation

    Each provider ships its own cost APIs and recommendation engine, and none of them know the others exist.

    Resource sprawl

    Orphaned resources are harder to spot when no single console shows everything you are paying for.

    Patterns that carry across providers

    1. Standardize tagging across clouds

    One schema, applied everywhere. Azure calls them tags, GCP calls them labels and enforces lowercase keys, so choose names that survive the strictest of the three.

    Universal tag schema

    {
      "CostCenter": "CC-1001",           // Same across all clouds
      "Project": "CustomerPortal",      // Consistent naming
      "Environment": "production",      // Standardized values
      "Team": "WebDev",                // Same team structure
      "CloudProvider": "aws|azure|gcp", // Track provider
      "Region": "us-east-1",           // Normalized regions
      "Application": "customer-portal"  // App identifier
    }

    2. Aggregate cost data in one place

    Whether you buy a platform or write the collector yourself, the target is one table with a provider column. The shape of the query is much the same in all three SDKs:

    Cost aggregation sketch

    import boto3
    from azure.mgmt.consumption import ConsumptionManagementClient
    from google.cloud import billing
    
    def get_multi_cloud_costs(date_range):
        costs = {}
    
        # AWS Costs
        aws_ce = boto3.client('ce')
        aws_response = aws_ce.get_cost_and_usage(
            TimePeriod=date_range,
            Granularity='MONTHLY',
            Metrics=['UnblendedCost']
        )
        costs['aws'] = extract_aws_costs(aws_response)
    
        # Azure Costs
        azure_client = ConsumptionManagementClient(credential, subscription_id)
        azure_costs = azure_client.usage_details.list(
            filter=f"properties/usageStart ge '{date_range['Start']}'"
        )
        costs['azure'] = extract_azure_costs(azure_costs)
    
        # GCP Costs
        gcp_client = billing.CloudBillingClient()
        gcp_costs = gcp_client.list_billing_accounts()
        costs['gcp'] = extract_gcp_costs(gcp_costs)
    
        return costs

    3. Buy committed capacity on each platform

    Every provider sells the same trade: a term commitment in exchange for a discount. The published ceilings differ, and so does how much flexibility you keep.

    ProviderCommitment typePublished ceilingFlexibility
    AWSReserved Instances and Savings Plans75%High with Convertible
    AzureReserved VM Instances72%Medium
    GCPCommitted Use Discounts57%Medium

    Those ceilings are vendor headline numbers, quoted for the longest term on the least flexible option. Treat them as an upper bound, not a forecast.

    4. Watch data transfer between providers

    Egress is where multi-cloud architectures quietly get expensive. Anything chatty that spans two providers deserves a second look:

    Dedicated interconnects

    For sustained volume, Direct Connect paired with ExpressRoute or Cloud Interconnect beats public internet egress rates.

    Compression and protocol choice

    Compress before transfer, and prefer a binary protocol such as gRPC over verbose JSON for high-frequency traffic.

    Colocate what talks

    Keep services that exchange a lot of data on the same provider and in the same region. Cheapest optimization available, and the one most often missed.

    Workload placement

    Each provider has areas where its pricing model is genuinely better. Worth knowing when you decide where a new workload lands:

    AWS

    • Spot capacity, up to 90% off
    • Mature reserved capacity market
    • Widest regional footprint
    • Deep cost tooling out of the box

    Azure

    • Hybrid and on-prem integration
    • Windows and SQL Server licensing benefits
    • Enterprise agreement discounts
    • Dev and test subscription pricing

    GCP

    • Sustained use discounts, applied automatically
    • BigQuery for analytics workloads
    • Per-second billing
    • Spot VMs, formerly preemptible

    Tooling

    Platforms worth evaluating

    Flexera One, formerly RightScale Optima

    Cross-cloud cost analytics and recommendations.

    Apptio Cloudability

    Cost management and chargeback reporting across multiple providers.

    OpenCost and Kubecost

    Open source, container-level cost attribution if most of your spend sits inside Kubernetes.

    Build or buy

    Build your own when

    • You have engineers who will still own it in a year
    • Your allocation rules do not fit an off-the-shelf model
    • The licence costs more than the build plus the maintenance
    • It has to feed an internal system that already exists

    For most teams the answer is buy. A cost platform you never finish is worse than a spreadsheet you actually update.

    A sensible order of work

    Most teams have one dominant provider and a smaller footprint elsewhere. Fix the dominant one first: that is where the money is, and the habits transfer. On the AWS side, our AWS cost audit surfaces the quick wins first, at a fixed price.

    Phase 1: visibility

    One tag schema, one aggregated cost view. Until spend is attributable, nothing else can be prioritized.

    Phase 2: optimization

    Right-size, delete orphans, and buy commitments on the platform carrying the most spend.

    Phase 3: automation

    Alerts, scheduled shutdowns, and policy enforcement so the accounts do not drift back.

    Phase 4: governance

    A monthly review with named owners. This is the part everyone skips, and it is why the savings do not last.

    One thing worth saying plainly

    Multi-cloud is a strategic choice with a real operational cost. If you are on more than one provider because of an acquisition, or because of a single service you could not get elsewhere, the cheapest optimization is often consolidation rather than better tooling across all three.