Skip to content
Learni
View all tutorials
Cloud Computing

How to Optimize Cloud Cost Allocation in 2026

18 minADVANCED
Lire en français

Introduction

Cloud cost allocation has become critical for multi-account organizations. Poor visibility leads to 30-40% overspending. This advanced tutorial guides you through building a complete system: strategic tagging, AWS SDK automation, and real-time reporting. You will learn how to map every resource to cost centers, projects, or teams with granular precision. The approach combines infrastructure as code with analytical scripts for robust financial governance.

Prerequisites

  • AWS account with Cost Explorer and Billing permissions
  • Terraform 1.7+
  • Python 3.11 with boto3
  • Advanced knowledge of tagging and IAM
  • Node.js optional for dashboards

Base Tag Configuration

tags.tf
variable "cost_center" {
  type = string
}

locals {
  common_tags = {
    Environment   = "production"
    CostCenter    = var.cost_center
    Project       = "api-v2"
    Owner         = "finance-team"
    CreatedBy     = "terraform"
    AllocationKey = "${var.cost_center}-${var.environment}"
  }
}

This Terraform module defines mandatory standard tags for allocation. Every resource inherits these tags, enabling precise filtering in Cost Explorer.

Deploy Tagged Resources

main.tf
resource "aws_lambda_function" "api_handler" {
  function_name = "cost-allocated-api"
  role          = aws_iam_role.lambda_role.arn
  handler       = "index.handler"
  runtime       = "python3.11"

  tags = merge(local.common_tags, {
    Service = "api"
  })
}

Practical application of tags on a Lambda function. The AllocationKey tags enable cost grouping by cost center in monthly reports.

Advanced Allocation Script

cost_allocator.py
import boto3
from datetime import datetime, timedelta

def allocate_costs(cost_center: str):
    ce = boto3.client('ce')
    end = datetime.now().strftime('%Y-%m-%d')
    start = (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d')
    
    response = ce.get_cost_and_usage(
        TimePeriod={'Start': start, 'End': end},
        Granularity='DAILY',
        Metrics=['BlendedCost'],
        Filter={'Tags': {'Key': 'CostCenter', 'Values': [cost_center]}},
        GroupBy=[{'Type': 'TAG', 'Key': 'Project'}]
    )
    return response['ResultsByTime']

Functional Python script that queries Cost Explorer and filters by CostCenter. Returns daily costs broken down by project for automated reporting.

CSV Report Generation

report_generator.py
import csv
from cost_allocator import allocate_costs

def export_to_csv(cost_center: str, filename: str):
    data = allocate_costs(cost_center)
    with open(filename, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['Date', 'Project', 'Cost'])
        for day in data:
            for group in day['Groups']:
                writer.writerow([
                    day['TimePeriod']['Start'],
                    group['Keys'][0],
                    group['Metrics']['BlendedCost']['Amount']
                ])

Complete function that exports results to CSV. Can be scheduled via EventBridge for automatic weekly reports.

Minimal IAM Configuration

cost-reporting-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ce:GetCostAndUsage",
        "ce:GetCostAndUsageWithResources",
        "ce:GetTags"
      ],
      "Resource": "*"
    }
  ]
}

Minimal IAM policy allowing scripts to access cost data only, with no modification rights.

Best Practices

  • Always enforce AllocationKey and CostCenter tags via SCP
  • Use distinct technical and business tags
  • Automate tag validation with Lambda
  • Export reports to S3 and Athena for SQL queries
  • Review allocation rules monthly with finance teams

Common Mistakes to Avoid

  • Forgetting to tag manually created resources
  • Using inconsistent tag values across environments
  • Ignoring shared service costs (support, management)
  • Not versioning allocation scripts

Go Further

Deepen these concepts with our FinOps and cloud optimization training: https://learni-group.com/formations