Cost Estimation Function

def estimate_server_cost(cpu_cores, ram_gb, traffic_tb=1):
    """Estimate monthly cost across major cloud providers."""
    providers = {
        'DigitalOcean':    {'base': 4,   'per_core': 10, 'per_gb_ram': 5,  'per_tb_traffic': 0.01},
        'Vultr':           {'base': 2.5, 'per_core': 8,  'per_gb_ram': 4,  'per_tb_traffic': 0.01},
        'AWS EC2':         {'base': 8,   'per_core': 15, 'per_gb_ram': 6,  'per_tb_traffic': 0.09},
        'Google Cloud':    {'base': 7,   'per_core': 14, 'per_gb_ram': 5.5,'per_tb_traffic': 0.12},
        'Azure':           {'base': 8,   'per_core': 16, 'per_gb_ram': 6,  'per_tb_traffic': 0.08},
        'Alibaba Cloud':   {'base': 5,   'per_core': 12, 'per_gb_ram': 5,  'per_tb_traffic': 0.10},
        'Hetzner':         {'base': 3,   'per_core': 6,  'per_gb_ram': 3,  'per_tb_traffic': 0.01},
        'Linode':          {'base': 5,   'per_core': 9,  'per_gb_ram': 4,  'per_tb_traffic': 0.01},
    }

    results = {}
    for name, p in providers.items():
        cost = (p['base'] + p['per_core'] * cpu_cores + p['per_gb_ram'] * ram_gb
                + p['per_tb_traffic'] * traffic_tb * 1024)
        results[name] = round(cost, 2)

    # Sort by cost ascending
    return dict(sorted(results.items(), key=lambda x: x[1]))

Example Output

# estimate_server_cost(cpu_cores=2, ram_gb=4, traffic_tb=2)
{
    'Hetzner':        '15.48',
    'Vultr':          '23.48',
    'Linode':         '27.48',
    'DigitalOcean':   '34.48',
    'Alibaba Cloud':  '45.48',
    'Google Cloud':   '60.48',
    'AWS EC2':        '62.48',
    'Azure':          '68.48'
}

Usage Notes

  1. Prices are estimates — actual costs vary by region, instance type, and discounts
  2. Add ~20% buffer for data transfer overage and backup storage
  3. Managed databases, load balancers, and static IPs add extra costs
  4. Reserved instances (1-3 year commitment) can save 30-60%
  5. Always check the provider's current pricing page before making a decision