AWS Savings Plans ve Reserved Instance Karşılaştırması: Hangisi Size Uygun?
AWS faturanıza bakıp “bu kadar mı olacaktı?” diye düşündüğünüz anlar mutlaka olmuştur. On-demand fiyatlandırmasıyla çalışan bir EC2 filosu, özellikle production ortamında, ayın sonunda ciddi rakamlar üretebiliyor. İşte tam bu noktada AWS’nin iki büyük maliyet optimizasyon silahı devreye giriyor: Savings Plans ve Reserved Instances. İkisi de indirim vadediyor, ikisi de commitment gerektiriyor, ama birbirinden önemli farkları var. Hangi senaryoda hangisini seçeceğinizi bilmek, yıllık bütçenizde ciddi fark yaratabilir.
Temel Fark Nedir?
Önce şunu netleştirelim: her iki seçenek de AWS’ye “ben bu kadar kaynak kullanacağım, taahhüt ediyorum” demeniz karşılığında size indirim veriyor. Ama bu taahhüdün şekli ve esnekliği tamamen farklı.
Reserved Instances (RI): Belirli bir EC2 instance tipine, bölgeye ve platforma bağlı kalıyorsunuz. “Ben us-east-1’de m5.xlarge, Linux işletim sistemi ile çalışacağım” diyorsunuz ve bu instance’a özel indirim alıyorsunuz.
Savings Plans: Saatlik dolar cinsinden harcama taahhüdü veriyorsunuz. “Ben saatte en az 10 dolar compute harcayacağım” diyorsunuz ve bu eşiğe kadar olan kullanımınız otomatik olarak indirimli fiyatlandırmaya tabi oluyor. EC2’den Lambda’ya, Fargate’e kadar geniş bir yelpazede geçerli olabiliyor.
Bu esneklik farkı her şeyi değiştiriyor.
Reserved Instances Derinlemesine
Reserved Instances, AWS’nin çok daha eski ve köklü maliyet optimizasyon mekanizması. 2009’dan bu yana var ve milyonlarca AWS müşterisi tarafından kullanılıyor.
RI Türleri
Standard RI: En yüksek indirimi veriyor (on-demand’e göre %72’ye kadar), ama en az esneklik sunuyor. Instance ailesi, boyut, bölge ve platform sabit kalıyor. Bir yıllık veya üç yıllık taahhüt seçenekleri mevcut.
Convertible RI: Biraz daha az indirim (%54’e kadar), ama instance ailesini, boyutunu ve işletim sistemini değiştirebiliyorsunuz. Teknoloji değişiklikleriniz öngörülemeyen ortamlar için daha uygun.
Scheduled RI: Artık yeni satın alma için mevcut değil, ama eski hesaplarda hala kullanılıyor. Belirli zaman dilimlerinde kapasiteye ihtiyacınız varsa (örneğin her gün 09:00-18:00 arası) tasarlanmıştı.
RI Ödeme Seçenekleri
- All Upfront: Tüm tutarı peşin ödüyorsunuz, maksimum indirim
- Partial Upfront: Bir kısmını peşin, kalanını aylık ödüyorsunuz
- No Upfront: Aylık ödeme, en az indirim ama nakit akışı açısından daha esnek
AWS CLI ile RI Araştırması
Mevcut Reserved Instance’larınızı ve kullanım durumlarını CLI üzerinden takip edebilirsiniz:
# Aktif Reserved Instance'larınızı listeleyin
aws ec2 describe-reserved-instances
--filters "Name=state,Values=active"
--query 'ReservedInstances[*].{ID:ReservedInstancesId,Type:InstanceType,Count:InstanceCount,End:End,State:State}'
--output table
# Bölge bazlı RI'larınızı görün
aws ec2 describe-reserved-instances
--filters "Name=state,Values=active" "Name=scope,Values=Region"
--output json
# RI kullanım yüzdenizi son 30 gün için çekin
aws cloudwatch get-metric-statistics
--namespace AWS/EC2
--metric-name ReservedInstanceUtilization
--start-time $(date -d '30 days ago' +%Y-%m-%dT%H:%M:%S)
--end-time $(date +%Y-%m-%dT%H:%M:%S)
--period 86400
--statistics Average
--dimensions Name=ReservedInstanceId,Value=YOUR_RI_ID
RI Kullanım Analizi için Python Script
Hangi instance’larınızın RI kapsamında, hangilerinin on-demand çalıştığını görmek kritik önem taşıyor:
# Boto3 ile RI coverage raporunu çekme
python3 << 'EOF'
import boto3
import json
from datetime import datetime, timedelta
ce_client = boto3.client('ce', region_name='us-east-1')
# Son 30 günün RI coverage'ını al
end_date = datetime.now().strftime('%Y-%m-%d')
start_date = (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d')
response = ce_client.get_reservation_coverage(
TimePeriod={
'Start': start_date,
'End': end_date
},
GroupBy=[
{'Type': 'DIMENSION', 'Key': 'INSTANCE_TYPE'},
{'Type': 'DIMENSION', 'Key': 'REGION'}
],
Metrics=['Hour']
)
for group in response['Total']['CoverageHours']:
print(f"RI Coverage: {group}")
print(json.dumps(response['CoveragesByTime'][0]['Groups'][:5], indent=2))
EOF
Savings Plans Derinlemesine
Savings Plans, AWS’nin 2019 yılında duyurduğu ve Reserved Instances’ın yerini büyük ölçüde almaya başlayan yeni nesil taahhüt mekanizması.
Savings Plans Türleri
Compute Savings Plans: En esnek seçenek. EC2, Lambda ve Fargate üzerinde çalışıyor. Instance ailesi, boyut, bölge, işletim sistemi fark etmeksizin geçerli. On-demand’e göre %66’ya kadar indirim.
EC2 Instance Savings Plans: Belirli bir instance ailesine ve bölgeye bağlısınız, ama boyut ve işletim sistemi özgürlüğünüz var. Standard RI’ya yakın (%72’ye kadar) indirim sunuyor, ama biraz daha esnek.
SageMaker Savings Plans: Özellikle ML workload’ları için tasarlanmış, SageMaker kullanımına özgü.
Savings Plans CLI Komutları
# Mevcut Savings Plans'larınızı listeleyin
aws savingsplans describe-savings-plans
--states active
--query 'savingsPlans[*].{ID:savingsPlanId,Type:savingsPlanType,Commitment:commitment,Status:state,End:end}'
--output json
# Savings Plans coverage'ınızı kontrol edin
aws ce get-savings-plans-coverage
--time-period Start=$(date -d '30 days ago' +%Y-%m-%d),End=$(date +%Y-%m-%d)
--granularity MONTHLY
--group-by Type=DIMENSION,Key=SERVICE
# Savings Plans önerilerini çekin
aws ce get-savings-plans-purchase-recommendation
--savings-plans-type COMPUTE_SP
--term-in-years ONE_YEAR
--payment-option NO_UPFRONT
--lookback-period-in-days THIRTY_DAYS
--query 'SavingsPlansPurchaseRecommendation.{EstimatedSavings:SavingsPlansPurchaseRecommendationSummary.EstimatedMonthlySavingsAmount,RecommendedCommitment:SavingsPlansPurchaseRecommendationSummary.HourlyCommitmentToDeploy}'
Gerçek Dünya Senaryoları
Senaryo 1: Stabil Monolitik Uygulama
Bir e-ticaret şirketinin production backend’i düşünün. 20 adet m5.2xlarge, us-east-1, Linux, 7/24 çalışıyor. Bu uygulama 3 yıldır aynı instance tipinde, değişmesi pek öngörülmüyor.
Bu senaryo için Standard Reserved Instance mükemmel seçim. Sabit altyapı, öngörülebilir kullanım, maksimum indirim önceliği. 3 yıllık All Upfront ile %72 civarında tasarruf elde edebilirsiniz.
# Bu senaryo için tavsiye edilen RI satın alma analizi
aws ec2 describe-spot-price-history
--instance-types m5.2xlarge
--product-descriptions "Linux/UNIX"
--start-time $(date -d '1 hour ago' +%Y-%m-%dT%H:%M:%S)
--query 'SpotPriceHistory[0].SpotPrice'
# Karşılaştırma için on-demand fiyatını çek
aws pricing get-products
--service-code AmazonEC2
--filters
"Type=TERM_MATCH,Field=instanceType,Value=m5.2xlarge"
"Type=TERM_MATCH,Field=operatingSystem,Value=Linux"
"Type=TERM_MATCH,Field=location,Value=US East (N. Virginia)"
"Type=TERM_MATCH,Field=preInstalledSw,Value=NA"
"Type=TERM_MATCH,Field=tenancy,Value=Shared"
--region us-east-1
--query 'PriceList[0]' | python3 -c "import json,sys; d=json.loads(json.load(sys.stdin)); print(list(list(d['terms']['OnDemand'].values())[0]['priceDimensions'].values())[0]['pricePerUnit'])"
Senaryo 2: Çok Bölgeli, Dinamik Mikroservis Mimarisi
Modern bir SaaS ürünü düşünelim. Kubernetes üzerinde çalışan onlarca mikroservis, us-east-1, eu-west-1 ve ap-southeast-1 bölgelerinde dağıtılmış. Instance tipleri sürekli değişiyor (m5, c5, r5 aileleri arası geçiş yapılıyor), container boyutları scaling ile dinamik değişiyor.
Bu senaryo için Compute Savings Plans açık ara kazanıyor. Hangi bölgede, hangi instance tipinde, hangi boyutta çalışırsanız çalışın, taahhüdünüz geçerli kalıyor. Fargate ve Lambda da bu planın kapsamına giriyor, yani container ve serverless workload’larınızda da tasarruf sağlıyorsunuz.
Senaryo 3: Hibrit Yaklaşım
En akıllıca strateji çoğu zaman hibrit kullanım. Stabil, öngörülebilir baseline yükünüz için RI kullanırken, dinamik veya büyüme beklentisi olan kısmınız için Savings Plans tercih edebilirsiniz. Peak yükler için ise Spot Instance ekleyebilirsiniz.
# Mevcut kullanım analizinizi çekerek hibrit strateji planlaması yapın
python3 << 'EOF'
import boto3
from datetime import datetime, timedelta
ce = boto3.client('ce', region_name='us-east-1')
end = datetime.now().strftime('%Y-%m-%d')
start = (datetime.now() - timedelta(days=90)).strftime('%Y-%m-%d')
# Son 90 günlük instance kullanımını analiz et
response = ce.get_cost_and_usage(
TimePeriod={'Start': start, 'End': end},
Granularity='MONTHLY',
Filter={
'Dimensions': {
'Key': 'SERVICE',
'Values': ['Amazon Elastic Compute Cloud - Compute']
}
},
GroupBy=[
{'Type': 'DIMENSION', 'Key': 'INSTANCE_TYPE'}
],
Metrics=['UsageQuantity', 'UnblendedCost']
)
print("Son 90 gun instance kullanim ozeti:")
for period in response['ResultsByTime']:
print(f"nDonem: {period['TimePeriod']['Start']}")
for group in sorted(period['Groups'],
key=lambda x: float(x['Metrics']['UnblendedCost']['Amount']),
reverse=True)[:5]:
instance_type = group['Keys'][0]
cost = float(group['Metrics']['UnblendedCost']['Amount'])
print(f" {instance_type}: ${cost:.2f}")
EOF
Hangi Durumda Hangisi?
Reserved Instances tercih edin:
- Sabit instance tipi ve bölge: Yıllardır aynı altyapıda çalışıyorsanız ve değişim planı yoksa
- Maksimum indirim önceliği: Esneklikten taviz verip en yüksek tasarrufu hedefliyorsanız
- RI Marketplace avantajı: İhtiyaç olmayan RI’ları ikincil piyasada satabilmek önemli bir esneklik
- Database workload’ları: RDS Reserved Instances, Savings Plans kapsamında değil. RDS için zorunlu olarak RI kullanmanız gerekiyor
- ElastiCache, Redshift, OpenSearch: Bu servisler Savings Plans kapsamı dışında, dolayısıyla RI tek seçenek
Savings Plans tercih edin:
- Çoklu bölge stratejisi: Workload’larınız bölgeler arası kayıyor
- Lambda ve Fargate kullanımı: Compute Savings Plans bu servisleri de kapsıyor
- Instance ailesi değişikliği beklentisi: Önümüzdeki yıl m5’ten m6i’ya geçmeyi planlıyorsanız
- Kubernetes veya ECS: Container orkestrasyon platformlarında instance tipi öngörülmesi zor
- Yeni nesil instance geçişleri: AWS sürekli yeni nesil instance’lar çıkarıyor, Compute SP ile bağsız kalıyorsunuz
Maliyet Optimizasyon Script’i
Her iki seçenek için de kapsamlı bir analiz yapabilmek için şu script’i kullanabilirsiniz:
#!/bin/bash
# AWS Savings Analiz Script'i
# Mevcut on-demand harcamanızı ve potansiyel tasarrufu hesaplar
echo "=== AWS Maliyet Optimizasyon Analizi ==="
echo "Son 30 gunluk on-demand harcama ozeti:"
aws ce get-cost-and-usage
--time-period Start=$(date -d '30 days ago' +%Y-%m-%d),End=$(date +%Y-%m-%d)
--granularity MONTHLY
--filter '{
"And": [
{
"Dimensions": {
"Key": "PURCHASE_TYPE",
"Values": ["On Demand"]
}
},
{
"Dimensions": {
"Key": "SERVICE",
"Values": [
"Amazon Elastic Compute Cloud - Compute",
"AWS Lambda",
"AWS Fargate"
]
}
}
]
}'
--metrics UnblendedCost
--query 'ResultsByTime[*].Total.UnblendedCost.Amount'
--output text
echo ""
echo "Savings Plans onerileri aliniyor..."
aws ce get-savings-plans-purchase-recommendation
--savings-plans-type COMPUTE_SP
--term-in-years ONE_YEAR
--payment-option NO_UPFRONT
--lookback-period-in-days THIRTY_DAYS
--query '{
OnerilenSaatlikTaahhut: SavingsPlansPurchaseRecommendationSummary.HourlyCommitmentToDeploy,
TahminiAylikTasarruf: SavingsPlansPurchaseRecommendationSummary.EstimatedMonthlySavingsAmount,
TasarrufOrani: SavingsPlansPurchaseRecommendationSummary.EstimatedSavingsPercentage
}'
--output json
echo ""
echo "RI onerileri aliniyor..."
aws ce get-reservation-purchase-recommendation
--service "Amazon Elastic Compute Cloud - Compute"
--term-in-years ONE_YEAR
--payment-option NO_UPFRONT
--lookback-period-in-days THIRTY_DAYS
--query 'Recommendations[0].RecommendationSummary.{TasarrufOrani:TotalEstimatedMonthlySavingsPercentage,AylikTasarruf:TotalEstimatedMonthlySavingsAmount}'
--output json
Unutulan Kritik Detaylar
RI Marketplace
Standard RI satın aldınız ama artık ihtiyacınız yok mu? AWS Marketplace’te diğer kullanıcılara satabilirsiniz. Bu özellik Savings Plans’ta mevcut değil. Eğer planlarınızın değişme ihtimali varsa bu faktörü göz önünde bulundurun.
Normalize Factor ve Instance Size Flexibility
Regional RI’larda “Instance Size Flexibility” özelliği devreye giriyor. Örneğin m5.xlarge için RI aldıysanız, bu aynı zamanda iki adet m5.large veya dört adet m5.medium’u da kapsıyor. Bu kural aynı instance ailesinde, aynı bölgede geçerli.
# Instance size flexibility'yi kontrol etmek için
aws ec2 describe-reserved-instances
--filters "Name=state,Values=active"
--query 'ReservedInstances[*].{Type:InstanceType,Scope:Scope,InstanceCount:InstanceCount}'
--output json
Savings Plans Uygulama Önceliği
AWS, Savings Plans’ı şu sırayla uyguluyor:
- Önce en yüksek indirim sağlayan kaynağa uygular
- EC2 Instance Savings Plans, Compute Savings Plans’tan önce işlenir
- Taahhüt eşiğiniz aşıldıktan sonra kalan kullanım on-demand fiyatıyla faturalandırılır
Bu sıralamayı bilmek, birden fazla planınız varsa optimum konfigürasyonu ayarlamanıza yardımcı olur.
AWS Cost Explorer ile Görselleştirme
AWS konsol üzerinden Cost Explorer’ı kullanmak en pratik yol, ama CLI üzerinden de aynı verilere ulaşabilirsiniz:
# Savings Plans utilization raporunu çek
aws ce get-savings-plans-utilization
--time-period Start=$(date -d '7 days ago' +%Y-%m-%d),End=$(date +%Y-%m-%d)
--granularity DAILY
--query 'SavingsPlansUtilizationsByTime[*].{Date:TimePeriod.Start,Kullanim:Utilization.UtilizationPercentage,Tasarruf:Savings.TotalSavings}'
--output table
# Hangi kaynakların Savings Plans'tan yararlandığını gör
aws ce get-savings-plans-utilization-details
--time-period Start=$(date -d '30 days ago' +%Y-%m-%d),End=$(date +%Y-%m-%d)
--query 'SavingsPlansUtilizationDetails[*].{PlanId:SavingsPlanArn,Kullanim:Utilization.UtilizationPercentage}'
--output json
Pratik Karar Matrisi
Kararınızı basitleştirmek için şu soruları kendinize sorun:
- Altyapınız önümüzdeki 1-3 yılda değişecek mi? Evet ise Savings Plans, Hayır ise RI değerlendirin
- Lambda veya Fargate kullanıyor musunuz? Evet ise mutlaka Compute Savings Plans dahil edin
- RDS, ElastiCache, Redshift var mı? Bunlar için tek seçenek RI
- Çoklu AWS bölgesi mi? Evet ise Compute Savings Plans çok daha avantajlı
- RI satma esnekliği önemli mi? Evet ise Standard RI tercih edin
- Kubernetes veya ECS kullanıyor musunuz? Instance tahminlemesi zor olduğu için Savings Plans avantajlı
Sonuç
Reserved Instances ile Savings Plans arasındaki seçim, tek boyutlu bir doğru-yanlış meselesi değil. İkisi de aynı amaca hizmet ediyor, farklı senaryolarda farklı avantajlar sunuyor.
Genel pratik önerim şu yönde: yeni başlayanlar için Compute Savings Plans daha güvenli bir başlangıç noktası. Daha az hata yapma ihtimali var, esneklik yüksek ve modern cloud native mimarilere daha uygun. Stabil, geleneksel altyapınız varsa ve maksimum tasarruf peşindeyseniz, RI’ya yönelin. En akıllıca strateji ise genellikle hibrit: baseline kapasite için RI, dinamik ve değişken kısım için Savings Plans.
Her iki seçeneği de satın almadan önce en az 30 günlük kullanım verinizi analiz edin. AWS Cost Explorer’daki “Recommendations” bölümü ve CLI üzerinden çektiğiniz öneriler, hangi taahhüt miktarının sizin için optimum olduğunu gösteriyor. Asla tahmine dayalı taahhüt vermeyin; veri görünce alın.
Son olarak: bu planları aldıktan sonra unutmayın. Her ay utilization oranınızı takip edin. %70’in altında RI veya Savings Plans kullanımı, tasarruf yerine para kaybettiğinizin işareti olabilir.
