Milion dolarów to nadal sporo pieniędzy. Mniej niż 20 lat temu, ale przyznasz, że nadal sporo.
A jak pisał Andrzej Sapkowski w Wiedźminie:
“A czy ty wiesz, Dijkstra, że mieć milion i nie mieć miliona to razem dwa miliony?”
Co byś zrobił, gdybym przyszedł do Ciebie i powiedział:
- Słuchaj, przeanalizowałem koszty AWS na Twoim koncie i wiem, jak możesz zaoszczędzić kilkaset tysięcy dolarów rocznie. Mam mówić dalej?
Będę z Tobą szczery, na początku moje szacunki nie przekraczały miliona oszczędności. Ale to też dlatego, że z obietnicami trzeba ostrożnie. Lepiej spektakularnie przekroczyć oczekiwania, niż prosić o wybaczenie, że się nie dowiozło.
Muszę przyznać, że to była najprostsza sprzedaż w moim życiu. W czasie spotkania usłyszałem:
- Paweł, możesz zacząć natychmiast?
😃😃😃😃😃
Czego dotyczył problem?
Klient posiada bardzo dużo (tysiące) wyłączonych maszyn EC2. Nie można było ich, ot tak, skasować, gdyż prędzej czy później będą komuś potrzebne (taki case biznesowy).
Musisz wiedzieć, że wyłączona maszyna EC2 nie generuje kosztów. Niestety tego samego nie można powiedzieć o wolumenach EBS podłączonych do niej. W regionie N. Virginia koszt jednego gigabajto-miesiąca to 8 centów dla dysków typu GP3. W innych regionach jest oczywiście drożej. Przy skali klienta, koszty samych EBSów oscylowały na poziomie 150 tyś. USD miesięcznie. Niemało.
Sporządziłem listę maszyn EC2 (scope projektu). Następnie dla każdej z nich wykonane zostały snapshoty wszystkich wolumenów, a informacja o nich została zapisana w bazie danych. W kolejnym kroku wolumeny EBS zostały skasowane.
Powstań z martwych
EC2 bez dysków EBS to bezużyteczny kadłubek (można jeszcze takich słów używać? 😉).
Aby, móc z niego korzystać, trzeba go jakoś przywrócić do życia. Innymi słowy, trzeba jakoś odwrócić opisany powyżej proces. Zasadniczo jest to prosta rzecz:
- Stwórz wolumeny ze snapshotów
- Przypnij je do EC2
- Skasuj snapshoty
- Uruchom EC2 i voilà.
Step Functions i parę innych usług serverless znakomicie się do tego nadaje. Automat działa jak marzenie :-)
Skąd się wzięły oszczędności?
Technicznie koncepcje już rozumiesz, ale jeszcze nie wyjaśniłem, dlaczego się to kosztowo opłaca.
Wspomniałem powyżej, że 1GB dysku EBS GP3 kosztuje 8 centów. Z kolei 1GB danych w postaci Snapshotu to 5 centów (ceny z N.Virginia). Różnica na pierwszy rzut oka nie robi wrażenia.
Jednak nie każdy wie, że w przypadku snapshotów płaci się za realne użycie danych, a nie zadeklarowane.
Posłużmy się przykładam:
- Dysk EBS GP3 o wielkości 100 GB będzie nasz kosztował 100GB*$0,08 = 8 dolarów za miesiąc.
- Bez różnicy na to ile z tych 100 GB jest używane.
Natomiast w przypadku snapshotów, ich koszt zależy od rzeczywistej ilości bajtów “skonsumowanych”. Do tego jestem pewien, ale nie mam dowodów, że AWS kompresuje snapshoty, więc 1 GB danych na EBS będzie zajmował mniej niż 1GB w postaci snapshotu.
- Zakładając (naiwnie), że dyski EBS są w połowie wypełnione danymi, to koszt snapshotu będzie wynosił 50%*100GB*$0,05 = 2,50 dolara.
No i nagle z oszczędności na poziomie 37,5% (1-0,05/0,08) robi się aż 68,7% (1-2,50/8).
I tym sposobem można dojść do miliona 😉
Rezultaty
Na potrzeby analizy stworzyłem własny wskaźnik KPI, który liczy średni koszt storage’u przypadającego na maszynę EC2.
Zrobiłem to dlatego, iż konto AWS ciągle żyje i tworzone są nowe maszyny, a czasem stare bywają kasowane. Aby móc rzetelnie ocenić wynik optymalizacji kosztowej, potrzebowałem czegoś, co nie będzie mocno zależne od takich zmian.
Dlaczego? Cóż, gdyby nagle w czasie mojej optymalizacji klient stworzył np. 5000 nowych EC2/EBSów to moje oszczędności zostałyby skonsumowane przez nowe koszta. W efekcie trudno by mi było udowodnić, że coś oszczędziłem. 😉 Używanie takich wskaźników zaleca FinOps.
W moim przypadku KPI wygląda tak (365/12 to znormalizowana ilość dni w miesiącu):
Rezultaty per maszyna EC2
- Średni miesięczny koszt storage’u per EC2 znacząco zmalał, spadając z 14,20 USD do 5,82 USD, co stanowi oszczędność w wysokości 59%.
- Średnio, pojedyncza instancja EC2 wcześniej korzystała z 1,92 woluminów EBS, a teraz korzysta z zaledwie 0,46 (bo udział wyłączonych instancji EC2 stanowi spory procent całości).
Rezultaty zbiorcze
- Zostało usuniętych 19 136 woluminów EBS podłączonych do wyłączonych instancji EC2. Suma wielkości skasowanych dysków to aż 43,79 TB.
- Przed usunięciem, dla każdego wolumenu stworzono snapshot. Łączna suma danych nowych snapshotów to tylko 3,4 TB.
- Z grubsza, ponad 40 TB na wolumenach EBS było pustym miejscem. Za które klient dotychczas płacił! (Piszę z grubsza, ponieważ realnie miałem dane w AWSowych gigabajto-miesiącach, a nie w jednoznacznych gigabajtach)
Wynik
Podsumowując, działania optymalizacji kosztów zaowocowały znaczącymi miesięcznymi oszczędnościami w wysokości 109 895 USD, co przekłada się na imponujące oszczędności roczne w wysokości 1 318 745 USD.
Wszystko przy inwestycji będącej minimalnym ułamkiem tej kwoty w ciągu kilku tygodni!
Jeśli chcesz się umówić na bezpłatną konsultację dotyczącą optymalizacji kosztów AWS na Twoim koncie, to wybierze dogodny dla siebie termin spotkania w moim kalendarzu.
Co dalej
Wynik jest imponujący, ale można go jeszcze bardziej podkręcić analizując trendy wskrzeszania maszyn i rozważając przesunięcie snapshtów do poziomu (tier) Archive, który kosztuje tylko $0.0125/GB-month. Jednak jest haczyk. Przywracanie danych kosztuje $0.03 za każdy gigabajt. Na domiar, płacimy za minimum 90 dni przechowywania snapshotu w tym poziomie. Jak widać, wymaga to dogłębnej analizy przypadku.