Çoklu Bulut Maliyet Karşılaştırma Araçları: En İyi Seçenekler

Bulut faturanıza her ay baktığınızda “bu ay neden bu kadar?” diye düşünüyorsanız, yalnız değilsiniz. Çoklu bulut ortamlarında maliyet kontrolü, birçok şirketin en büyük baş ağrılarından biri haline geldi. AWS, Azure ve GCP arasında workload’ları dağıtırken hangi servisin ne kadar tuttuğunu anlamak, doğru araçlar olmadan neredeyse imkansız. Bu yazıda gerçek dünya senaryoları üzerinden çoklu bulut maliyet karşılaştırma araçlarını, bunları nasıl kurup kullanacağınızı ve otomasyona nasıl taşıyacağınızı ele alacağım.

Neden Çoklu Bulut Maliyet Yönetimi Bu Kadar Zor?

Her bulut sağlayıcısının kendi fiyatlandırma modeli, kendi terminolojisi ve kendi dashboard’u var. AWS’de “EC2 instance” derken, Azure’da “Virtual Machine”, GCP’de “Compute Engine” diyorsunuz. Aynı workload için üç farklı sağlayıcıda fiyat karşılaştırması yapmaya çalışırsanız, elma ile portakalı karşılaştırır gibi olabilirsiniz.

Buna ek olarak şu sorunlarla karşılaşırsınız:

  • Gizli maliyetler: Egress trafiği, API çağrıları, snapshot depolama gibi kalemler faturanızı sessizce şişirir
  • Reserved/Spot instance karmaşası: Hangi workload’ın ne tür instance kullandığını takip etmek zorlaşır
  • Tag tutarsızlıkları: Ekipler farklı tag stratejileri kullanırsa maliyet allocation imkansızlaşır
  • Kur farkı: Özellikle Türkiye’deki şirketler için dolar bazlı faturalar TL’ye çevrilirken ek karmaşıklık yaratır

Temel Araçlar ve Kurulum

1. Infracost

Infracost, Infrastructure as Code dosyalarınızı (Terraform, Pulumi) okuyarak tahmini maliyeti hesaplayan açık kaynaklı bir araç. CI/CD pipeline’ınıza entegre ederek “bu değişiklik maliyeti ne kadar artırır?” sorusunu deploy öncesinde cevaplayabilirsiniz.

Kurulum:

# Linux/macOS kurulumu
curl -fsSL https://raw.githubusercontent.com/infracost/infracost/master/scripts/install.sh | sh

# Doğrulama
infracost --version

# API key alma (ücretsiz)
infracost auth login

# Terraform dizininde kullanım
cd /path/to/terraform/project
infracost breakdown --path .

Gerçek dünya örneği: Bir e-ticaret şirketinde Terraform ile yönetilen AWS altyapısını Azure’a taşıma kararı almadan önce Infracost ile her iki ortamın tahmini maliyetini karşılaştırdık. Sonuç oldukça sürprizdi; Azure’un başlangıçta ucuz görünen VM’leri, egress trafiği ve managed database maliyetleriyle birlikte AWS’den %23 daha pahalıya çıkıyordu.

# JSON çıktı alarak karşılaştırma
infracost breakdown --path . --format json --out-file infracost-base.json

# Değişiklik sonrası karşılaştırma
infracost diff --path . --compare-to infracost-base.json

# HTML raporu oluşturma
infracost output --path infracost-base.json --format html --out-file report.html

2. CloudHealth (VMware Aria Cost)

CloudHealth, enterprise düzeyinde çoklu bulut maliyet yönetimi için en kapsamlı araçlardan biri. Ücretsiz değil ama büyük organizasyonlar için sunduğu otomasyon ve reporting özellikleri parasını çıkarıyor. API üzerinden maliyet verilerini çekebilir ve kendi dashboard’larınıza entegre edebilirsiniz.

# CloudHealth API ile maliyet raporu çekme
curl -H "Authorization: Bearer YOUR_API_TOKEN" 
     -H "Content-Type: application/json" 
     "https://apps.cloudhealthtech.com/api/reports/v2/cost?time=monthly&filters=aws" 
     | jq '.data[] | {service: .name, cost: .total}'

3. OpenCost (Kubernetes Maliyet Analizi)

Kubernetes üzerinde koşan workload’larınızın maliyetini namespace, deployment ve hatta pod bazında görmek istiyorsanız OpenCost tam size göre. CNCF bünyesindeki bu açık kaynak araç, Prometheus ile entegre çalışıyor.

# Helm ile OpenCost kurulumu
helm repo add opencost https://opencost.github.io/opencost-helm-chart
helm repo update

kubectl create namespace opencost

helm install opencost opencost/opencost 
  --namespace opencost 
  --set opencost.exporter.defaultClusterId="production-cluster" 
  --set opencost.ui.enabled=true

# Port-forward ile UI'a erişim
kubectl port-forward -n opencost svc/opencost-ui 9090:9090

# API üzerinden namespace maliyeti sorgulama
curl "http://localhost:9003/allocation?window=7d&aggregate=namespace" 
  | jq '.data[0] | to_entries[] | {namespace: .key, cost: .value.totalCost}'

Bir SaaS şirketinde bu kurulumu yaptıktan sonra discovery aşamasında şaşırtıcı bir bulgumuz oldu: “default” namespace’inde unutulmuş test deployment’ları aylık 400 dolarlık kaynak tüketiyordu. Kimse farkında değildi.

AWS Maliyet Araçları

AWS Cost Explorer API

AWS’nin kendi maliyet analiz servisi oldukça güçlü. Python ile basit bir script yazarak aylık servise göre maliyet raporunu otomatize edebilirsiniz.

# AWS CLI ile servis bazında maliyet sorgulama
aws ce get-cost-and-usage 
  --time-period Start=2024-01-01,End=2024-01-31 
  --granularity MONTHLY 
  --metrics "BlendedCost" "UsageQuantity" 
  --group-by Type=DIMENSION,Key=SERVICE 
  --output json | jq '.ResultsByTime[].Groups[] | {service: .Keys[0], cost: .Metrics.BlendedCost.Amount}'
# Tag bazında maliyet breakdown (environment tag'ine göre)
aws ce get-cost-and-usage 
  --time-period Start=2024-01-01,End=2024-02-01 
  --granularity MONTHLY 
  --metrics "BlendedCost" 
  --group-by Type=TAG,Key=environment 
  --filter '{
    "Tags": {
      "Key": "environment",
      "Values": ["production", "staging", "development"],
      "MatchOptions": ["EQUALS"]
    }
  }' 
  --output json | jq '.ResultsByTime[].Groups[] | {env: .Keys[0], cost: .Metrics.BlendedCost.Amount}'

AWS Trusted Advisor ve Savings Plans Analizi

# Savings Plans önerilerini çekme
aws savingsplans describe-savings-plans-offering-rates 
  --savings-plan-offering-filters 
    '[{"name":"region","values":["eu-west-1"]},{"name":"instanceFamily","values":["m5"]}]' 
  --query 'searchResults[].{InstanceType:properties[?name==`instanceType`].value|[0], Rate:rate}' 
  --output json | head -20

Azure Maliyet Araçları

Azure Cost Management API’si oldukça yetenekli ama dökümantasyonu AWS’e kıyasla biraz dağınık. Resource group bazında maliyet çekmek için şu yaklaşımı kullanıyorum:

# Azure CLI ile subscription maliyet analizi
az consumption usage list 
  --start-date 2024-01-01 
  --end-date 2024-01-31 
  --query "[].{ResourceGroup:resourceGroup, Service:consumedService, Cost:pretaxCost, Currency:currency}" 
  --output json | jq 'group_by(.ResourceGroup) | map({rg: .[0].ResourceGroup, total_cost: map(.Cost | tonumber) | add})'

# Belirli resource group için detaylı maliyet
az consumption usage list 
  --start-date 2024-01-01 
  --end-date 2024-01-31 
  --query "[?resourceGroup=='production-rg'] | sort_by(@, &pretaxCost) | reverse(@) | [:10].{Resource:instanceName, Cost:pretaxCost}" 
  --output table

GCP Maliyet Araçları

GCP’nin BigQuery billing export özelliği, diğer sağlayıcılara kıyasla en güçlü sorgulama imkanı sunuyor. Fatura verilerinizi BigQuery’ye export edip SQL ile dilediğiniz gibi analiz edebilirsiniz.

# BigQuery billing export sorgusu (bq CLI ile)
bq query --use_legacy_sql=false 
'SELECT
  service.description as service_name,
  SUM(cost) as total_cost,
  currency
FROM `your-project.billing_dataset.gcp_billing_export_v1_XXXXXX`
WHERE
  DATE(usage_start_time) BETWEEN "2024-01-01" AND "2024-01-31"
GROUP BY
  service_name, currency
ORDER BY
  total_cost DESC
LIMIT 20'

Çoklu Bulut Maliyet Normalizasyon Script’i

Farklı sağlayıcılardan gelen maliyet verilerini tek bir formatta birleştirmek için kullandığım bash script’i paylaşıyorum. Bu script üç sağlayıcıdan veri çekip CSV olarak birleştiriyor:

#!/bin/bash
# multi_cloud_cost_report.sh
# Çalıştırmadan önce: AWS CLI, Azure CLI ve gcloud CLI konfigüre edilmeli

set -euo pipefail

START_DATE="${1:-$(date -d 'last month' +%Y-%m-01)}"
END_DATE="${2:-$(date +%Y-%m-01)}"
OUTPUT_FILE="multi_cloud_costs_$(date +%Y%m).csv"

echo "Provider,Service,Cost_USD,Period" > "$OUTPUT_FILE"

echo "[*] AWS maliyetleri aliniyor..."
aws ce get-cost-and-usage 
  --time-period "Start=${START_DATE},End=${END_DATE}" 
  --granularity MONTHLY 
  --metrics "BlendedCost" 
  --group-by Type=DIMENSION,Key=SERVICE 
  --output json | 
  jq -r '.ResultsByTime[].Groups[] | 
    ["AWS", .Keys[0], (.Metrics.BlendedCost.Amount | tonumber | . * 100 | round / 100), "'"${START_DATE}"'"] | 
    @csv' >> "$OUTPUT_FILE"

echo "[*] Azure maliyetleri aliniyor..."
az consumption usage list 
  --start-date "$START_DATE" 
  --end-date "$END_DATE" 
  --output json 2>/dev/null | 
  jq -r 'group_by(.consumedService)[] | 
    ["Azure", .[0].consumedService, ([.[].pretaxCost | tonumber] | add | . * 100 | round / 100), "'"${START_DATE}"'"] | 
    @csv' >> "$OUTPUT_FILE"

echo "[*] GCP maliyetleri aliniyor..."
bq query --use_legacy_sql=false --format=csv --quiet 
"SELECT 'GCP', service.description, ROUND(SUM(cost), 2), '${START_DATE}'
 FROM `$(gcloud config get-value project).billing_dataset.gcp_billing_export_v1_*`
 WHERE DATE(usage_start_time) >= '${START_DATE}'
   AND DATE(usage_start_time) < '${END_DATE}'
 GROUP BY service.description" 2>/dev/null | 
  tail -n +2 >> "$OUTPUT_FILE"

echo "[+] Rapor olusturuldu: $OUTPUT_FILE"
echo "[+] Toplam kayit: $(wc -l < "$OUTPUT_FILE")"

# Sağlayıcı bazında özet
echo ""
echo "=== OZET ==="
awk -F',' 'NR>1 {provider[$1]+=$3} END {for (p in provider) print p": $"provider[p]}' "$OUTPUT_FILE"

Bu script’i cron job olarak ayarlamak için:

# Her ayın 2'sinde sabah 8'de çalıştır
echo "0 8 2 * * /opt/scripts/multi_cloud_cost_report.sh >> /var/log/cloud_costs.log 2>&1" | crontab -

Anomali Tespiti ve Alerting

Maliyetleri takip etmek yetmez, anormal artışları erkenden tespit etmek gerekir. AWS’de bu için basit bir CloudWatch alarm kurulumu:

# AWS maliyet anomali tespiti için SNS topic oluşturma
aws sns create-topic --name cloud-cost-alerts --output json | jq -r '.TopicArn'

# Email subscription ekleme
aws sns subscribe 
  --topic-arn "arn:aws:sns:eu-west-1:XXXXXXXXXXXX:cloud-cost-alerts" 
  --protocol email 
  --notification-endpoint "[email protected]"

# Cost Anomaly Detector oluşturma
aws ce create-anomaly-monitor 
  --anomaly-monitor '{
    "MonitorName": "Servis Anomali Monitoru",
    "MonitorType": "DIMENSIONAL",
    "MonitorDimension": "SERVICE"
  }' 
  --output json

# Alert threshold ayarlama (100 dolar veya %20 artış)
aws ce create-anomaly-subscription 
  --anomaly-subscription '{
    "SubscriptionName": "Gunluk Maliyet Alarmı",
    "MonitorArnList": ["arn:aws:ce::XXXXXXXXXXXX:anomalymonitor/XXXXX"],
    "Subscribers": [{
      "Address": "arn:aws:sns:eu-west-1:XXXXXXXXXXXX:cloud-cost-alerts",
      "Type": "SNS"
    }],
    "Threshold": 100,
    "Frequency": "DAILY"
  }'

Pratik Maliyet Optimizasyon Stratejileri

Araçları kurduktan sonra asıl iş başlıyor. Yıllar içinde farklı şirketlerde topladığım en etkili optimizasyon stratejileri:

Sağ boyutlandırma (Right-sizing):

  • AWS Compute Optimizer önerilerini haftalık olarak inceleyin
  • Ortalama CPU kullanımı %10’un altında kalan instance’ları bir sonraki küçük tipe geçirin
  • Memory bazlı workload’lar için ARM tabanlı instance’ları (Graviton, Azure Dv4) değerlendirin

Boşta kaynakları temizleme:

  • Kullanılmayan EBS volume’ları, “available” statüsündeki Elastic IP’ler, orphaned snapshot’lar para yakar
  • Load balancer’ların arkasında sıfır health check geçmeyen target yoksa o LB büyük ihtimalle gereksizdir

Rezervasyon stratejisi:

  • Production workload’larının en az %60’ını Reserved Instance veya Savings Plans ile karşılayın
  • Dev/test ortamları için Spot Instance kullanın, workload buna uygunsa
  • Azure Hybrid Benefit’ten yararlanın; Windows lisanslarınız varsa ciddi tasarruf sağlar

Multi-region maliyet farkı:

  • AWS’de us-east-1, eu-west-1’den genellikle %10-15 ucuzdur
  • Latency gereksinimi olmayan batch workload’ları daha ucuz region’lara taşıyabilirsiniz

Finops Kültürü: Araçlardan Öte

Araçlar sizi ancak buraya kadar götürür. Gerçek maliyet optimizasyonu kültürel bir değişim gerektiriyor. “FinOps” kavramını kurumunuza yerleştirmek için şu adımları öneririm:

  • Her ekibin kendi cloud maliyetini görebildiği şeffaf bir dashboard kurun
  • Sprint review’larına maliyet metriği ekleyin; “bu sprint’te ne deploy ettik ve maliyeti ne kadar değişti?”
  • Mühendislere cloud faturaları hakkında temel eğitim verin; çoğu developer egress ücretlerinin var olduğundan bile haberdar değil
  • Maliyet tasarrufu sağlayan ekipleri görünür kılın; gamification işe yarıyor

Bir startup’ta mühendislere her ay kendi servislerinin maliyetini içeren kişisel dashboard erişimi verdikten sonra, 3 ay içinde toplam cloud harcamasında %18’lik düşüş gördük. Kimse kuralı yaptırmadı, sadece görünürlük sağladık.

Sonuç

Çoklu bulut maliyet yönetimi tek bir araçla çözülecek bir sorun değil. Infracost gibi araçlarla deploy öncesi maliyet tahminini pipeline’ınıza entegre edin, OpenCost ile Kubernetes workload’larınızı izleyin, her sağlayıcının native API’sini kullanarak kendi normalleştirme script’lerinizi yazın ve anomali alerting’i mutlaka kurun. Araçlar yerli yerine oturduğunda asıl zorlu kısım başlıyor: ekip kültürünü değiştirmek ve “cloud sonsuz kaynaktır” zihniyetinin önüne geçmek.

Fatura şoku yaşamamanın en iyi yolu, onu beklemeden hazırlıklı olmak. Bu araçları kurmak için harcayacağınız birkaç saatlik efor, ilk anormal faturada kendini katbekat geri ödeyecek.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir