Łukasz Bielak

Łukasz Bielak

Optymalizacja kosztów w chmurze Azure – wyłączaj usługi, z których nie korzystasz

Wielką zaletą usług w chmurze jest możliwość ich wyłączenia lub zeskalowania, w momencie, kiedy z nich nie korzystamy. Taki zabieg pozwala zaoszczędzić koszty i przeznaczyć je na bardziej potrzebne rzeczy. Samo skalowanie można wykonać z poziomu portalu czy Powershell’a. Oczywiście – aby wszystko działało zgodnie ze sztuką, powinniśmy zautomatyzować zarówno włączanie/wyłącznie, jak i skalowanie usług. Do tego celu można wykorzystać Runbooki. I to właśnie o nich opowiem w dzisiejszym artykule!

Określ czego potrzebujesz

Zwykle, podczas rozwijania systemu BI, będziemy wykorzystywać co najmniej 2 środowiska – deweloperskie i produkcyjne. Jeśli chodzi o środowisko produkcyjne, to ono najprawdopodobniej powinno być uruchomione cały czas. Natomiast środowisko deweloperskie jest wykorzystywane jedynie w godzinach pracy zespołu. Rzadko spotykamy się z tym, że deweloperzy pracują 24/7, zwykle są to określone godziny, 5 dni w tygodniu. Spójrzmy teraz na to od strony kosztów i dla uproszczenia przyjmijmy, że środowisko deweloperskie ma dokładnie takie same parametry, jak produkcyjne.

Jeśli za produkcję płacimy miesięcznie 1000 €, to całościowy koszt samego systemu wynosi nas 2000 €. I tutaj pojawia się pole do optymalizacji kosztowej. Skoro nasi deweloperzy pracują 5 dni w tygodniu, w godz. 7:00-19:00, to możemy całe środowisko włączać o 7:00, a włączać o 19:00. Oszczędzimy dzięki temu połowę funduszy. Biorąc pod uwagę wolne weekendy – będzie to jeszcze więcej! Oprócz tego możemy także rozważyć odpowiednie skalowanie zasobów. Na przykład jeśli produkcyjna hurtowania danych, oparta o Azure Synapse Analytics, ma być dostępna przez cały czas, ale intensywnie korzystać z niej będziemy tylko w godzinach biznesowych, to również możemy rozważyć wyskalowanie w dół (na czas, w którym użycie jest niższe).

Czy to rozwiązanie jest idealne?

Jak pewnie się domyślasz, skalowanie oraz ciągłe włączanie i wyłączanie usługi ma pewne wady. Po pierwsze, podczas skalowania wertykalnego (scale-up) zasoby są niedostępne. Zwykle taka niedostępność trwa około 10-15 minut, ale jednak może to być problematyczne. Mogą zdarzyć się także sytuacje, w których ktoś będzie jednak pracował dłużej i nagłe wyłączenie zasobu przerwie mu pracę. Dlatego ważne jest aby cały zespół miał świadomość, kiedy zasoby są skalowane/wyłączane.

Jak zautomatyzować włączanie i wyłączanie usług?

Najprostszym sposobem jest skorzystanie z Automation Account i utworzenie w Runbooka, w którym uruchomimy kod Powershell’owy. Takie rozwiązanie ma dużo zalet. Przede wszystkim do tak prostego zadania, jak wyłączanie i włączanie usług, sprawdzi się idealnie. Nie musimy martwić się o autoryzację, jest ona realizowane przez Automation Account. Po drugie, jednym poleceniem w Powershell’u możemy wykonać wszystkie niezbędne czynności administracyjne. W przypadku tak prostych rzeczy jak włączenie czy wyłączenie usługi, ogarniemy to jedną komendą. Trzecim powodem jest możliwość wybrania czasu, w którym nasz Runbook będzie się uruchamiał. Jeśli chcemy codziennie o 19:00 wyłączać usługę, nie ma problemu! Kolejna zaleta to ogromna galeria gotowych skryptów, które wystarczy zaimportować. Całość można bardzo szybko przygotować. Jak? Zapraszam do dalszej części artykułu.

Do dzieła!

  1. Pierwszym krokiem jest utworzenie Automation Account. Nie jest to skomplikowane, ale należy pamiętać o zaznaczeniu opcji  Create Azure Run As account.

2. Aby nasze skrypty Powershell’owe zadziałały, potrzebujemy kilku modułów. Musimy je więc doinstalować. Mi będą potrzebne dwa – Az.Accounts i Az.AnalysisServices. W zależności od operacji jakie chcemy wykonywać, może być potrzeba doinstalowania innych modułów. 

3. Teraz utworzymy Runbooka. Kod źródłowy dostępny jest tutaj. Skrypt przyjmuje 3 parametry:
– nazwę RG, w której znajduje się Analysis Services,
– nazwę instancji AS,
– typ akcji którą chcemy wykonać (będzie to włączenie lub wyłączenie usługi).
Oczywiście, na potrzeby demonstracyjne, skrypt jest bardzo uproszony. Już w tym momencie możemy Runbooka odpalić ręcznie, ale nie to jest naszym celem.  

4. Dodajmy harmonogram. Dzięki temu nasz skrypt będzie uruchamiany codziennie o konkretnej godzinie. Najpierw skonfigurujmy opcję Schedule, a następnie podajmy parametry. 

Potrzebujesz więcej?

W galerii mamy znacznie więcej Runbooków, które można wykorzystywać do wyłączania maszyn wirtualnych, skalowania baz itd. Dokumentacja dostępna jest tutaj. Warto pamiętać, że podane przeze mnie rozwiązanie to tylko przykład. W zależności od projektu, podejście do wyłączania nieużywanych zasobów może być różne. W mojej opinii wykorzystanie Runbooków jest proste i skuteczne, ale to tylko punkt widzenia dewelopera BI.

Udostępnij post

Share on facebook
Share on twitter
Share on linkedin
Share on print
Share on email

Pozostańmy w kontakcie

Jeżeli chcesz być na bieżąco informowany o nowych wpisach oraz dostawać materiały, których nie publikuję na blogu - zapisz się do newslettera!