AWS'de veri aktarım maliyetlerini büyük ölçüde düşürmek
(bitsand.cloud)- AWS'de aynı region içindeki availability zone'lar arası aktarımda, gönderim ve alım taraflarının her biri için GB başına $0.01 ücret alınır; bu da 1TB'lık doğrudan aktarımın yaklaşık $20 tutmasına yol açar. Ancak S3 geçici bir ara durak olarak kullanılırsa maliyet cent seviyesine kadar indirilebilir.
- Standart S3 bucket'ları region düzeyinde çalışır ve AWS veriyi region içinde en az 3 availability zone'a çoğalttığı için, aynı region'daki birden fazla AZ'den aynı şekilde erişilebilir.
- Bir EC2 aynı region'daki S3'e yükleme yapıp başka bir AZ'de indirme yaparsa veri aktarım ücreti alınmaz; gerçek maliyet kısa saklama süresine ait S3 depolama maliyeti ve API istek ücretleriyle sınırlı kalır.
us-east-1içinde 1TB veriyi 1 saatten kısa süre tutmak, S3 Standard'ın TB-ay başına $23 ücretinin 1/720'i olan yaklaşık $0.03 tutar; 1PB veri için de doğrudan aktarımda $20,000 yerine yaklaşık $32 seviyesine iner.- Bu yöntem ağ aktarım kodu için drop-in bir alternatif değildir ve gecikmeyi artırabilir; ancak maliyetin birinci öncelik olduğu büyük hacimli cross-AZ aktarımlarda %99'dan fazla tasarruf sağlayabilir.
AWS veri aktarım maliyetlerinin büyüdüğü nokta
- AWS'de veriyi dikkatsizce taşımak aktarım maliyetlerinin hızla birikmesine neden olabilir.
- Yazının kaleme alındığı andaki başlıca veri aktarım ücretleri şöyle:
- AWS'den genel internete çıkan aktarım
us-east-1için GB başına $0.09,af-south-1için ise GB başına $0.154'e kadar çıkıyor; 1TB aktarım maliyeti $90~$154 arasında. - Bir AWS region'ından başka bir region'a giden aktarım
us-east-1için GB başına $0.02,af-south-1için ise GB başına $0.147'e kadar çıkıyor; AWS ağı dışına çıkmasa bile 1TB için $20~$147 ödenebiliyor. - Aynı region içindeki farklı availability zone'lar arasındaki aktarım yön başına GB başına $0.01; 1TB veriyi
us-east-1a'danus-east-1b'ye göndermek gönderim için $10 ve alım için $10 olmak üzere toplam $20 ediyor.
- AWS'den genel internete çıkan aktarım
- İnternete aktarım ve region'lar arası aktarımda yalnızca dışarı çıkan veri için egress ücreti ödenirken, aynı region içindeki AZ'ler arası aktarımda ücret her iki yönde de alınır.
- Kaynakları birden fazla availability zone'a dağıtan yapılandırmalar dayanıklılık ve erişilebilirliği artırır; ancak farklı AZ'lerdeki kaynaklar veri alışverişi yaptığında cross-AZ maliyeti oluşur.
PrivateLink ve VPC endpoint'lerinde dikkat edilmesi gerekenler
- Bir EC2 instance'ından başka bir region'daki herkese açık bir S3 bucket'ına 1TB veri aktarılırsa, beklenen $20'lık region'lar arası aktarım maliyeti yerine internet egress maliyeti olan $90 çıkabilir.
- AWS PrivateLink ve VPC endpoint'leri, region'lar arası verinin AWS ağından çıkmamasını garanti ederek fiyat ve güvenlik açısından fayda sağlar.
- Ancak bu özellikler ücretsiz değildir ve kendilerine özgü kısıtlar ile ücret detayları vardır.
- İlgili kaynaklar
S3 ile cross-AZ aktarım maliyetini dolanmak
- S3'ün çoğu depolama sınıfı bucket'ları availability zone bazında değil, region düzeyinde tutar.
- Kullanıcı
us-east-1aveyaus-east-1bbucket'ına değil,us-east-1bucket'ına yükleme yapar. - AWS veriyi kendi içinde region içinde en az 3 availability zone'a çoğaltır.
- Kullanıcı
- Standart bir S3 bucket'ındaki veriye aynı region'daki tüm AWS availability zone'larından aynı şekilde erişilebilir;
us-east-1a'dan indirmekleus-east-1b'den indirmek arasında S3 açısından fark yoktur. - S3 Standard'da aynı region içindeki indirme ücretsizdir; başka bir region'a ya da genel internete indirme yapıldığında normal veri aktarım ücretleri uygulanır.
- S3'e yükleme, tüm depolama sınıflarında veri aktarım maliyeti açısından ücretsizdir.
- Ancak S3 API istek ücretleri oluşur.
- İstek maliyetleri görece küçüktür.
1TB ve 1PB maliyet hesabı
us-east-1aiçindeki bir EC2 instance'ındanus-east-1biçindeki başka bir EC2 instance'ına 1TB veriyi doğrudan göndermek $20 tutar.- Aynı veri önce S3'e yüklenip ardından diğer AZ'deki instance tarafından indirilirse, yükleme ve indirmenin veri aktarım maliyeti ücretsiz olur.
- Geriye kalan maliyet S3 depolama maliyetidir.
us-east-1içindeki S3 Standard depolama, GB başına aylık $0.023, yani TB başına aylık $23'tür.- Ücretlendirme saatlik olarak hesaplanır.
- Veri S3'te 1 saatten az kalacak şekilde tasarlanırsa, 720 saat üzerinden $23'ün 1/720'i olan yaklaşık $0.03 eder.
- Aktarım tamamlandıktan sonra S3 nesnesinin silinmesi gerekir.
- Bu hesapta aktarım maliyeti GB başına $0.02'den $0.000032/GB seviyesine düşer; bu da orijinal ücretin yaklaşık %0.15'idir.
- Uç bir örnek olarak, 1PB aktarım standart yöntemde $20,000 yerine bu yöntemle yaklaşık $32 tutar.
Ölçeklenebilirlik ve kısıtlar
- S3 yüksek ölçeklenebilirliğe sahiptir; bir AZ'de yüklenen bir nesnenin başka bir AZ'deki çok sayıda instance tarafından aynı anda indirilmesi gibi senaryolara da uygundur.
- İkinci AZ'deki binlerce instance aynı S3 nesnesini indirebilir.
- S3 depolama maliyeti aynı kalır.
- İndirme maliyeti de ücretsiz kalır.
- S3 nesne boyutunda sınırlamalar vardır.
- Tek bir nesne 5TB'ı aşamaz.
- 5TB'tan büyük dosyalar bölünmelidir.
- Tek seferlik yükleme 5GB'ı aşamaz; bu yüzden daha büyük dosyalar için multipart upload gerekir.
aws s3 cp, multipart upload işlemini kendi içinde yönetir.
- S3 One Zone-Infrequent Access ve S3 Express One Zone, veriyi yalnızca tek bir availability zone'da depolar.
- Depolama maliyeti daha düşüktür, ancak bunun erişilebilirlik açısından bir bedeli vardır.
us-east-1içinde S3 One Zone-Infrequent Access GB başına $0.01, S3 Infrequent Access ise GB başına $0.0125'tir.- S3 One Zone-Infrequent Access %99.5 erişilebilirlik, S3 Infrequent Access ise %99.99 erişilebilirlik hedefiyle tasarlanmıştır.
Deney düzeni ve doğrulanan maliyetler
- Deneyde maliyet gürültüsünü azaltmak için her bölümde 2 yeni AWS hesabı kullanıldı.
- Her hesapta
us-east-1aveus-east-1biçinde 2 EC2 instance yer aldı veus-east-1ainstance'ında rastgele 1TB'lık bir dosya oluşturuldu. - İki yöntem karşılaştırıldı.
- İlkinde, iki AZ'nin private subnet'lerini içeren bir VPC içinde
us-east-1binstance'ında bir netcat sunucusu çalıştırıldı veus-east-1ainstance'ı 1TB dosyayı doğrudan aktardı. - İkincisinde, S3 Gateway endpoint bulunan bir VPC içinde bir S3 bucket oluşturuldu; ardından
us-east-1ainstance'ı 1TB dosyayı yükledi,us-east-1binstance'ı indirdi ve sildi.
- İlkinde, iki AZ'nin private subnet'lerini içeren bir VPC içinde
- AWS free tier deney sonuçlarını bir miktar etkilemiş olabilir.
- S3 free tier 12 ay boyunca 5GB-months sağlar.
- 5GB-months, 1TB-hours'tan küçüktür ama aradaki fark büyük değildir.
- Cost Explorer güncellendikten sonra doğrudan aktarım deneyinde beklenen $20'ye yakın $21.49 görüldü.
- Aktarımın bir kez durdurulup yeniden başlatılmış olması ek maliyetin bir kısmını açıklıyor.
- Oluşturulan dosya teknik olarak 1024GB olduğundan temel maliyet $20.48'dir.
- S3 tabanlı aktarım deneyinde ilk etapta $0.08 görüldü ve veri aktarım maliyeti görünmedi.
- Daha sonra S3 depolama maliyetinin bucket bazında günlük olarak raporlandığı ve Cost Explorer'a diğer maliyetlerden daha geç yansıdığı doğrulandı.
- Beklendiği gibi raporlanan depolama maliyeti birkaç cent düzeyindeydi.
- S3 depolama free tier tamamen tüketildi.
- Bu olasılığa FinOps topluluğundan Dieter Matzion dikkat çekti.
Ne zaman mantıklı olabilir?
- AWS, S3 verisini kendi içinde availability zone'lar arasında çoğaltır ve bunun maliyeti kullanıcının ödediği S3 depolama maliyetine dahildir.
- S3 üzerinden yapılan yaklaşım, yükleme anında cross-AZ maliyetinin dolaylı olarak zaten ödenmiş olmasından yararlanır.
- Veri S3'te uzun süre tutulursa, doğrudan cross-AZ aktarımından çok daha pahalı hale gelebilir.
- Nesne aktarımın hemen ardından silinirse hedeflenen %99 maliyet tasarrufu mümkün olur.
- Dezavantajları da açıktır.
- Mevcut veri aktarım kodu için drop-in bir alternatif değildir.
- Doğrudan ağ bağlantısına göre gecikme çok daha yüksek olabilir.
- Maliyetin en önemli öncelik olduğu durumlarda, bu yöntem AWS'de cross-AZ veri aktarım maliyetlerini %99'dan fazla azaltmak için pratik bir seçenek olabilir.
1 yorum
Hacker News yorumları
Kendi numaramı paylaşayım: Lightsail instance'larını, EC2 instance'ları veya S3 bucket'larındaki veriler gibi başka AWS kaynaklarını “proxy”lemek için kullanabilirsiniz.
Her Lightsail instance'ı fiyata dahil bir veri aktarım kotasıyla geliyor; $3,5'lık instance 1TB, $5'lık 2TB, $10'lık 3TB, $20'lık 4TB, $40'lık ise 5TB sunuyor.
Aktarım miktarı başına fiyat açısından en iyisi $10'lık instance'ın 3TB kotası.
Yazıdaki verilere göre EC2'den 3TB trafik us-east-1'de $276,48, S3 bucket'tan ise $69 tutuyor.
Dezavantajı, Lightsail'de hem inbound hem outbound trafiğin “trafik” olarak sayılması.
AWS şartlarının 51.3 maddesine göre, başka hizmetlerin veri ücretlerinden kaçınmak amacıyla Amazon Lightsail kullanılmamalı.
Örneğin başka hizmetlerden genel internete veya başka hedeflere ağ trafiğini proxy'lemek ya da load balancing/CDN hizmetleri üzerinden aşırı veri işlemek buna giriyor; ihlal halinde veri hizmetleri kısıtlanabilir veya hesap askıya alınabilir.
S3'ü veya istediğiniz HTTP sunucusunu origin olarak belirlemeniz yeterli.
Eskiden ilk 12 ay için ayda 50GB idi, ancak Cloudflare https://blog.cloudflare.com/aws-egregious-egress yazısını yayımladıktan kısa süre sonra kalıcı ücretsiz 1TB'ye dönüştü.
GCP de 2023'te benzer bir açığı kapattı; muhtemelen bazı müşteriler bunu kötüye kullandığı içindir.
Bu yöntem yeterince yaygınlaşırsa AWS'nin de aynısını yapacağını düşünüyorum.
https://cloud.google.com/storage/pricing-announce#network
GCP'nin kapattığı “açık”, GCS ile aynı kıta içindeki bölgeler arasında veri aktarımının ücretsiz yapılabilmesiydi; AWS'de bu zaten ücretli.
Orijinal yazıda söylenen şey, aynı bölge içindeki availability zone'lar arası aktarımın bile GB başına $0,02 tuttuğu ve bunun aşılabileceği.
Bu bilgiyi satın alacak bir alıcı bulabilir miyim merak ediyorum.
Ancak onu bir aktarım kanalı olarak kullanmak istemiyor olabilir; daha çok veriyi oraya koyup orada tutmanızı bekliyor gibi.
Maliyeti düşürüp kaynakları bedavaya getiren böyle numaralar çok fazla.
Zekice ama güvenilir değil.
OSS depoları üzerinden GitHub Actions'ta kripto para madenciliği yaptıran hack'lerle aynı türden.
İlginç bir hack alıştırması olarak ele alın, ama bu tür çözümleri production'a dağıtmamak daha iyi.
En azından hesap yöneticinizden onay almalısınız; yoksa bir gün AWS hesabınız kapatılmış halde uyanma riskiniz var.
S3 üzerinden geçirmek, veriyi birden fazla hedefe dağıtırken senkronizasyon süreçleri çalıştırmaktan genelde daha verimli de oluyor.
S3 depolama maliyeti GB-ay bazında ücretlendirildiği için 1TB × GB başına $0,023 ÷ ayda 730 saat hesabıyla, bucket'ta bir saat tutulduysa yaklaşık 3 sent olmalı.
Ancak neredeyse hemen silinmiş gibi göründüğünden, veri yaklaşık 1 dakika kaldıysa 0,03 ÷ 60 civarında olabilir.
Genelde AWS'nin bunu $0,01'e yuvarlamasını beklerim.
Maliyet ve kullanım raporundaki TimedByteStorage değeri nihai ölçüt olur.
https://handbook.vantage.sh/aws/services/s3-pricing/
S3 de iyi bir numara; ayrıca başka şeyler de var.
Büyük bir AWS müşterisiyseniz, örneğin yılda $1 milyonun üzerinde harcıyorsanız indirim isteyebilirsiniz.
Bir dönem availability zone'lar arası aktarım indirimi çok büyüktü.
Mümkün olduğunca tek bir availability zone'da toplamak da bir yöntem.
DB'nin “b” zone'unda, tek sunucunun ise “a” zone'unda olduğu yapılandırma, her şeyi tek bir zone'da standartlaştırmaktan bile kötü.
Birden fazla availability zone kullanırken yükü dikkate alan availability zone dengelemesi yapmak gerekir.
Maliyet yüzünden mi? Ama maliyet tasarrufu da değil gibi.
Bu, teknolojik vergiden kaçınma gibi hissettiriyor.
Çok fazla kişi böyle yaparsa AWS “açığı kapatıp geçer.”
AWS tek bir yapı değil; kendi KPI'ları olan onlarca, hatta yüzlerce AWS'ye daha yakın.
Bazı ekipler harcamaları azaltmanızı ister ama bunu gerçekten nasıl yapacağınızı söylemez.
AWS kadar karmaşık bir şey yaptığınızda her şey birbirine bağlanır; müşterinin yalnızca tek bir unsuru optimize etmesi imkânsız hale gelir.
AWS belirli hizmetlerin belirli şekillerde kullanılmasını istiyor; bu yüzden o şekilde kullanıldığında çok ucuz olacak biçimde tasarlıyor.
S3 endpoint kullanmak da AWS'nin S3 hizmetinin kullanılmasını istediği yollardan biri.
CloudFront da başka bir örnek.
AWS CloudFront kullanılmasını istediği için CloudFront'u diğer veri outbound seçeneklerinden daha ucuz yapıyor.
Karmaşık bulut maliyeti minimizasyon sistemlerinin alternatifi basitçe bulutu kullanmamaktır
Kendiniz barındırırsınız ya da GB başına çıkış ücreti 0 cent olan Cloudflare kullanırsınız
Ya da çok daha ucuz pek çok VPS hosting sağlayıcısından bulut sunucusu kiralar, GB başına 9 cent, 12 cent, 17 cent para emip lock-in’e teşvik eden pahalı ve karmaşık bulut servislerini kullanmazsınız
Ciddiyim, bulut maliyetlerini ince ince analiz etmeniz gereken noktaya geldiyseniz bulutu bırakmayı düşünmelisiniz
Çünkü başka yerlerde böyle bir analizin kendisi tamamen imkânsızdır
On-premise’e geçin diyenler, veri merkezini home lab gibi ele almayacak birinin iş gücü maliyetinin ne kadar tuttuğunu bilmiyor gibi
Apple iCloud’un bile AWS ve GCP kullanmasının nedeni ekonomik olmasıdır
Ya bulutu kullanamayıp on-premise’e dönmek gerektiğini düşünüyorlar ya da güvenilirlikle pek ilgilenmiyorlar
10G üzeri DDoS koruması maliyetini hesaplayıp yine de bulut daha pahalı diyebilmelerini isterim
Biz AWS bant genişliğine 100 bin dolardan fazla harcıyoruz, ama 3 availability zone’u yönetecek network engineer maliyetini ödemediğimiz için dedicated internet hattından hâlâ daha ucuz
Birçok organizasyonun bulut tabanlı hosting’e geçmesinin nedeni, diğer birçok avantajın yanında FinOps ve maliyet kontrolünü çok daha derin yapabilmesidir
Altyapıya bağlı olarak, depolama veya compute talebi değişkense bulut tabanlı çözümler iyi uyabilir
Sonuçta bu sadece bir araç
Production bare-metal sunuculara SSH ile girip yazılım güncellediğim, firewall yönettiğim ve storage kontrol ettiğim yerlerde de çalıştım; hosting’in çoğunu bulut sağlayıcılarıyla yürüten yerlerde de çalıştım; bir taraftan diğerine geçiş de yaptım
“Bulut”, bare-metal sunuculardan veya VPS’lerden daha iyi ya da daha kötü değildir; kullanım senaryosuna bağlıdır
Neden bir tarafın daha uygun olduğuna dair due diligence yapar, ortam değiştikçe yeniden değerlendirirsiniz
Bu “bulut kötü” tavrı çocukça
Zaten AWS’e lock-in olmuşsanız çıkmanın maliyeti epey yüksek olur; bazı durumlarda bu yöntem iyi bir orta yol olabilir
Bu maliyet çoğu durumda tasarrufu kolayca dengeleyebilir ya da aşabilir
Şirketlerin bulutu seçmesinin bu kadar bariz bir karar hâline gelmesinin büyük nedenlerinden biri de bu
AWS bu örnekte zararla çalışıyor gibi görünüyor
Yazar AWS fiyatlandırma yapısında bir açık bulmuş; bu yüzden bu kadar ucuz
Kendisi yapsaydı muhtemelen daha pahalı olurdu
AWS fiyatlarının neden böyle olduğu ancak tahmin edilebilir, ama büyük olasılıkla bir servisin diğerinden daha fazla kullanılmasını sağlamak amaçlanıyor
Çok bant genişliği kullanan biriyseniz Leaseweb, PhoenixNAP, Hetzner, OVH gibi yerlere bakmaya değer
Bant genişliği fiyatları gülünç derecede daha ucuz
Eskiden, standart fiyatlarla şirketin ayakta kalamayacağı bir durumda bile AWS satış temsilcilerinin bant genişliği fiyatını hiç düşürmediği tuhaf bir durum yaşamıştık
Transfer maliyetleri çoğunlukla pazarlığa açık kalemler gibi duruyor
Bir başka numara da ECR kullanmak
Her ay internete 5TB ücretsiz transfer yapabilirsiniz
Container image’ların herkese açık olması gerekir, ama içerik şifrelenebilir
Glacier’da medya arşivi saklarken işe yarar
AWS’in bu saçma veri transfer ücretleriyle insanlardan nasıl hâlâ para koparabildiğini anlamıyorum
Hemen yanında Cloudflare R2 100 kat daha iyi şartlar sunuyor
Veriyi bulunduğu yere bağlar; yerçekiminden kurtulmak için para gerektiği gibi veriyi taşımak için de para harcamak gerekir
R2’de veri kaybı veya yavaş transfer gibi sorunlar olursa suçlanan ben olurum ya da en azından benden yardım istenir
Buna karşılık S3 veri kaybederse veya belirli durumlarda yavaşsa insanlar bizim bir şeyi yanlış kullandığımızı düşünür ve iyileştirme yollarını bulur
Kimse suçlanmaz
Açıkçası iş herhangi bir değer üretiyorsa veri transfer ücretleri göz ardı edilebilir düzeydedir ve özellikle optimize etmeye gerek yoktur
Tasarruf da gerçekten büyük
AWS-SDK(Node.js)’yi aynen kullanıp sadece R2 endpoint’ini kullanıyoruz
Veri AWS’e girdiğinde aynı region’daki tüm uygulamalar transfer maliyeti olmadan veriyi kullanabilir
Ayrıca yazıda alıntılanan fiyat liste fiyatı; müşteri sözleşmeyle bant genişliğini önceden satın alırsa çok daha ucuza gelir
Gerçek üretim ortamında performansı ve erişilebilirliği ne kadar iyi, pek bilmiyorum
Özellikle durability’yi değerlendirmek zor ya da neredeyse imkânsız
S3’ün çok daha uzun bir geçmişi ve sicili olduğu için avantajı var
Zaten her şey AWS içindeyse veriyi yakında tutmanın da avantajı var
Verinin kullanım şekline bağlı olarak outbound maliyeti her zaman o kadar büyük bir gider olmayabilir
Ancak gerçekten kayda değer outbound trafik üretmeye başladığınızda akıl almaz derecede pahalılaşıyor
R2 gibi rakipler makul ölçüde rekabetçi güvenilirlik ve performans sunabilirse pazar paylarını artırmalarını beklerim