- AWS VPC ağ iletişimi ve NAT Gateway yapılandırma hatası nedeniyle S3 veri aktarım maliyetinin bir gün içinde yaklaşık 900 dolar olduğu, aylık birikimli toplamda ise 1.000 doları aştığı bir örnek
- EC2'den S3'e aktarımın ücretsiz olduğu bilinse de, VPC içindeki NAT Gateway üzerinden geçerse ücretli veri işleme ücreti oluşuyor
- Sorunun nedeni S3 için VPC Gateway Endpoint eksikliği; yani NAT Gateway'den geçmeden S3'e doğrudan bağlanan bir yapılandırmanın olmaması
- Gateway Endpoint ücretsizdir ve veri aktarım ücreti oluşturmaz; Terraform gibi araçlarla kolayca yapılandırılabilir
- AWS altyapısı işletirken maliyet izleme ve VPC Endpoint yapılandırmasını denetlemenin önemini gösteren bir örnek
Sorunun arka planı
- Geocodio, büyük dahili coğrafi veri dosyalarını S3'e yansıtmak için AWS kullanıyordu
- Veriler adres noktaları, sınır verileri, nüfus sayımı bilgileri gibi içeriklerden oluşuyor ve boyutları birkaç GB'dan yüzlerce GB'a kadar çıkıyor
- Hetzner'de barındırılan ETL platformundan AWS işlem altyapısına düzenli senkronizasyon gerekiyordu
- AWS'nin veri aktarım maliyetlerinin yüksek olması, sektör genelinde yaygın bir şikayet; Cloudflare ve Corey Quinn de ilgili sorunlara dikkat çekmişti
- Yazar, projeye başlamadan önce maliyet yapısını inceleyip şunları doğrulamıştı:
- Aynı region içindeki EC2–S3 aktarımı ücretsiz
- S3'e yükleme (ingress) ücretsiz
ve buna göre maliyet tahmini yapmıştı
Beklenmeyen maliyetin ortaya çıkması
- S3 senkronizasyon süreci dağıtıldıktan sonra AWS Cost Anomaly Detection üzerinden anomali uyarısı alındı
- Bir günde NAT Gateway veri aktarımı 20,167.32GB olmuş, bunun maliyeti $907.53 olarak yansımıştı
- Aylık birikimli maliyet zaten 1.000 doları aşmıştı
- EC2–S3 aktarımının ücretsiz olduğu sanılırken neden NAT Gateway ücretinin kesildiği araştırıldı
Kök neden analizi: NAT Gateway üzerinden geçiş
- VPC içinde NAT Gateway kullanıldığında, S3 trafiği de varsayılan olarak NAT Gateway üzerinden yönlendirilir
- Aynı region içindeki AWS servislerine giden isteklerde bile NAT kullanılırsa GB başına $0.045 veri işleme ücreti alınır
- Bu yüzden EC2–S3 arasındaki aktarım ücretsiz olsa bile NAT Gateway maliyeti yansıtıldı
- Çözüm ise S3 için VPC Gateway Endpoint oluşturmak
- NAT Gateway veya Internet Gateway üzerinden geçmeden VPC'den S3'e doğrudan bağlantı sağlar
- Tamamen ücretsizdir; saatlik ücret veya aktarım ücreti yoktur
Çözüm süreci
- Altyapı Terraform ile yönetildiği için, Gateway Endpoint kaynağı eklendi ve route table'a bağlandı
- AWS yönlendirmeyi otomatik güncelleyerek S3 trafiğini NAT Gateway yerine Endpoint'e göndermeye başladı
- Bunun ardından NAT Gateway ile ilgili ücretlendirme durdu
Çıkarılan dersler ve öneriler
- Uzun süredir AWS kullanılıyor olmasına rağmen S3 için VPC Endpoint yapılandırmasının atlanması maliyete yol açtı
- AWS ağ yapısı karmaşık; maliyet yapısı da yapılandırma biçimine göre büyük ölçüde değişebilir
- Tekrarını önlemek için öneriler
- AWS Cost Anomaly Detection'ı etkinleştirin: anormal maliyetler erken tespit edilebilir
- VPC Endpoint kullanın: NAT Gateway kullanan VPC'lerde S3 ve DynamoDB erişimi için gerekli
- Varsayımları doğrulayın: “EC2–S3 aktarımı ücretsizdir” ön kabulüne güvenmek yerine, küçük ölçekli test yapıp maliyeti izlemek gerekir
- Bulut karmaşıktır: uzun süreli kullanıcılar için bile sürekli dikkat gerekir
- Benzer bir örnek olarak, Recall.ai'nin WebSocket veri işleme maliyetleri için yılda 1 milyon dolar ödediği olay da anılıyor
Sonraki adımlar
- Geocodio, tüm VPC'lerdeki S3 iletişim yollarını gözden geçirip Gateway Endpoint yapılandırmasını tamamladı
- AWS kullanıcılarına VPC Endpoint ayarlarını kontrol etmeleri öneriliyor
- Özet: NAT Gateway, AWS servislerine giden trafiği de ücretlendirir; VPC Endpoint kullanılarak bu maliyetten kaçınılabilir
Ek kaynaklar
1 yorum
Hacker News görüşleri
Bulutla ilgili üç büyük subreddit'te bu tür maliyet patlaması vakalarının neredeyse her gün paylaşıldığını sık sık görüyorum
Bulut sağlayıcıları her zaman gecikmeli uyarılar veriyor ve kullanıcıların elinden sadece dua etmek ve af dilemek geliyor
Üstelik bazıları “teknik olarak hard-cap hesap sunmak imkansız” diyor ama aslında Azure'da böyle hesaplar zaten var
10 yılı aşkın süredir AWS kullanıyorum; servisler arası tasarım kopuklukları ve kurum içi silo yapısı çok ciddiydi
Büyük organizasyonlarda KPI'ları bozacak sorunları çözmek isteyen yönetici çıkmıyor; onun yerine AI ya da blockchain gibi moda servisler çıkarıp terfi puanı toplamaya odaklanıyorlar
Aylık $0, $15 ve $200 planları arasından seçim yapabiliyorsunuz; bu da beklenmeyen istekler veya veri aktarımı artışlarından kaynaklanan maliyet patlamalarını önleyebiliyor
AWS resmi blog bağlantısı
İlgili HN başlığı
Maliyet tavanı koyarken hizmet kararlılığını korumak zor olsa da, bu örnek bunun teknik olarak mümkün olduğunu kanıtlıyor
Bunun nedeni, hizmet kesintisi ya da altyapı arızasından doğacak itibar riskinden kaçınmak istemesi
Ama sorun bulutun kendisi de olabilir. Öngörülebilir bir maliyet yapısına ihtiyaç duyan küçük işletmeler için bulut uygun olmayabilir
Bu o kadar sık oluyor ki, S3 VPC endpoint'lerinin VPC oluşturulurken varsayılan olarak ayarlanması gerektiğini düşünüyorum
Ayrıca NAT gateway yerine fck-nat gibi alternatifler kullanılırsa GB başına trafik ücretinden tasarruf edilebilir
Varsayılan durum erişimi reddetmek olmalı ve internet erişimi açıkça izin verilerek açılmalı; aksi halde saldırganlar veriyi dışarı sızdırabilir
Ben de benzer bir hata yapmıştım
AWS tavsiye algoritmasına test verisi yükleyip unutmuştum; birkaç ay sonra bankadan yetersiz bakiye bildirimi geldi
Algoritma çalışmaya devam etmiş ve her ay 1.000 doların üzerinde ücret çıkarmıştı; sonuçta 5.000 dolar gitmiş oldu
Bakiyemi her gün kontrol ederim ve tüm fatura e-postalarını önemli olarak işaretlerim
Ayrıca her servis için sanal kart limiti belirleme alışkanlığı edindim
Ben de aynı hatayı yapıp 60 bin dolar kaybetmiştim
S3 endpoint'lerinin neden varsayılan olarak dağıtılmadığını anlayamıyorum
Bana sık sık “AWS faturası neden patladı?” diye soruluyor; çoğu zaman sebep NAT + S3 + yanlış varsayımlar kombinasyonu oluyor
EC2→S3 aktarımı ücretsiz ama NAT üzerinden geçerse ücretli oluyor
Bu yüzden şu kontrol listesini veriyorum
Cost Anomaly Detection'ın zamanında devreye girmesi sevindirici. 1.000 dolarlık kayıp da acıtır ama 20 bin dolardan iyidir
AWS'den veri indirirken GB başına $0.09 ödendiğini görünce şaşırdım
Veriyi yüklemek ücretsiz ama geri almak için para mı ödemek gerekiyor?
Bu olay, NAT yapılandırma hatası yüzünden iç aktarımın dış aktarım gibi ücretlendirilmesiyle oluşan sıra dışı bir örnek
Amazon'un bu tür hatalarda geri ödeme yapıp yapmadığını merak ediyorum
VPC NAT Gateway kötü bir üne sahip
Eskiden Amazon'da çalışırken benzer bir sorun yaşamıştım ama şirket hesabı olduğu için parayı ben ödemedim
Gerçekten cebinden ödemek zorunda kalanlara üzülüyorum
Bu olaya doğrudan yardımcı olmaz ama AWS dün CDN için sabit fiyatlı planlar çıkardı
S3 depolama ve bant genişliği içeren bir $0 katmanı da var
İlgili bağlantı
Umarım ileride başka servislere de genişler
Ben de 22 yaşımdayken altyapıyla ilk kez uğraşırken iki günde 300 dolarlık fatura yemiştim
AWS harika ama yeni başlayanlar için maliyet hesaplaması fazla opak