Wprowadzenie
W ostatnim czasie na blogu pojawiły się dwa artykuły o Azure Logic App. Pokazałem w nich, jak utworzyć aplikację w tej usłudze, jakie są mniej więcej możliwości oraz problemy, na jakie można natrafić. W tym artykule zobaczysz, jaki jest faktyczny koszt działania takiej aplikacji. Przy okazji porównamy sobie to do kosztu innych usług Azure.
Cennik Azure Logic App
Na stronie Microsoftu poświęconej kosztom Azure Logic App znajdziemy taką oto tabelkę:

Jak widać płacimy generalnie za trzy aktywności: wykonanie akcji (np. instrukcji typu switch, wykonanie żądania HTTP), wykonanie jakiejś operacji poprzez łącznik/connector (np. pobranie pliku z Azure Storage, wysłanie maila). W zależności od typu łącznika/connectora (standard/enterprice) płacimy odpowiednią kwotę.
Pod tabelką mamy jeszcze informacje o koszcie przechowywania danych. Tutaj głównie mowa o samej aplikacji, która jest zapisana w Azure Storage, w tym informacjach o wykonaniach aplikacji.
Osobiście mam pewien problem z tym cennikiem. Ponieważ z jednej strony, patrząc na powyższy cennik, możemy dojść do wniosku, że koszt działania aplikacji w Azure Logic App nie powinien być duży. A jak za chwilę zauważysz, potrafi być znaczny.
Dlatego osobiście staram się sprawdzić w praktyce, ile faktycznie będzie kosztowało działanie aplikacji, co sprowadza się do jej przygotowania. To na ogół nie zajmuje dużo czasu, co mam nadzieję było widać w poprzednich wpisach.
Później uruchamiam tę aplikację z jakimś małym interwałem czasowym na kilka dni, aby sprawdzić koszt, co pozwoli mi obliczyć jednostkowy koszt działania aplikacji. A z tego to już w miarę łatwo oszacować koszt w środowisku produkcyjnym.
Poniżej zobaczysz koszty działania trzech różnych aplikacji. Niestety z przyczyn oczywistych, nie mogę pokazać realnych kosztów aplikacji. Dlatego zobaczymy koszty działania aplikacji z dwóch wcześniejszych wpisów. Dodatkowo pokażę Ci jeszcze koszt działania jednej prostej aplikacji, którą wykorzystuję prywatnie.
Koszt aplikacji GetWeather
W pierwszym wpisie o Azure Logic App utworzyliśmy prostą aplikację, która służyła do pobierania danych o pogodzie i zapisywała je w Azure Storage. Poniżej znajduje się wykres prezentujący koszt działania tej aplikacji przez kilkanaście dni. Do testów użyłem wersję bez obsługi Key Vault, czyli wersję, gdzie było tylko żądanie HTTP oraz zapis pliku.
Koszt działania aplikacji prezentuje się następująco (możesz kliknąć w obrazek, aby go powiększyć):

Na wykresie widzimy dwie wielkości słupków. Od 24 do 27 lipca niższe i później od 28 lipca do 4 sierpnia wyższe. Jest to spowodowane tym, że pierwotnie aplikacja była wykonywana co 5 minut. Natomiast 28 lipca około 6 rano zmieniłem jej konfigurację i od tego momentu wykonywała się co 1 minutę.
Średni dzienny koszt działania aplikacji w pierwszym okresie wynosił około €0,03-0,04, natomiast w drugim był pięć razy większy, czyli €0,15-0,18. Co w efekcie daje około €0,000104-0,000125 za jedno wykonanie aplikacji. Czyli mniej więcej tyle, ile wynika z cennika (0,000128).
Z drugiej strony miesięczny koszt (31 dni) w przypadku pierwszej wersji €0,93. Natomiast w drugiej wersji to €4,65-5,58. Z drugiej strony nie jest to też mało.
GetWeather – Azure Function
Dla porównania przygotowałem również podobnie działającą aplikację stworzoną w Azure Function. Funkcja również była uruchamiana co jakiś czas, wykonywała żądanie pod ten sam adres. Do funkcji skonfigurowałem wyjściowy parametr, za pomocą którego treść odpowiedzi z serwera była zapisywana w Azure Storage, podobnie jak to robiła aplikacja w Azure Logic App.
Kod funkcji wygląda tak:
using System; | |
using System.Threading.Tasks; | |
using System.Net.Http; | |
private static HttpClient httpClient = new HttpClient(); | |
public static void Run(TimerInfo myTimer, ILogger log, out string outputBlob) | |
{ | |
var response = httpClient.GetAsync("http://api.openweathermap.org/data/2.5/weather?q=olsztyn,pl&APPID=4e61d7e7f40f9c3205722f24ebd3c2ac").Result; | |
outputBlob = response.Content.ReadAsStringAsync().Result; | |
} |
Jak widać, w tym przypadku kod funkcji nie jest jakoś mocno skomplikowany i jej utworzenie nie zajęło jakoś dużo więcej czasu niż aplikacji w Azure Logic App.
A jak wyglądają koszty działania takiej funkcji? Funkcja działała w tym samym czasie co aplikacja w Azure Logic App. W tym samym momencie również zmieniłem częstotliwość jej wykonywania z 5 minut na 1 minutę. Koszt działania wygląda tak:

Jak widać łączny koszt działania w tym okresie wynosi €0,01, czyli tak naprawdę funkcja działała cały czas w darmowym przydziale zasobów. Co w tym przypadku powoduje, że wypada ona dużo lepiej niż aplikacja w Azure Logic App. Szczególnie, że czas tworzenia obu aplikacji jest podobny. Ale oczywiście w niektórych sytuacjach utworzenie aplikacji w Azure Logic App może zająć dużo mniej czasu niż utworzenie funkcji.
Łączny koszt działania funkcji od 24 lipca do 29 września (prawie w całym tym okresie funkcja wykonywała się co 1 minutę) w momencie pisanie tego tekstu wyniósł €0,04. Czyli w praktyce mniej więcej tyle samo co jeden dzień działania aplikacji Azure Logic App i w wersji uruchamianej co 5 minut, a nie co jedną.

Warto jeszcze porównać czasy wykonywania aplikacji i funkcji. W przypadku aplikacji Azure Logic App średni czas wykonywania to dobre kilkaset milisekund:

Natomiast w przypadku Azure Function czas pojedynczego wykonania jest sporo niższy i oscyluje w okolicach kilkudziesięciu milisekund:

Jak widać różnica jest spora, a to też później tak naprawdę przekłada się na koszt jednej i drugiej usługi.
Koszt aplikacji RandomImages
W drugim wpisie o Azure Logic App – przykład pokazałem Ci aplikację, która pobierała obrazki, a następnie dokonywała ich analizy oraz w przypadku, gdy na obrazku był ocean, aplikacja wysyłała wiadomość email. Zobaczmy, jaki jest koszt działania tej aplikacji:

Jak widać na wykresie, średni dzienny koszt działania aplikacji to około €0,13. Dla przypomnienia aplikacja była uruchamiana co 5 minut. Co daje średnio €0,000451 za jedno wywołanie.
Oczywiście w tym przypadku średni jednostkowy koszt jest zaniżony, ponieważ w znacznej części wywołań aplikacja swoje działanie kończyła wcześniej. Bo nie na każdym obrazku był ocean, a następnie generowanie linku SAS oraz wysyłka wiadomości email. Co widoczne jest w tym, że wysokość poszczególnych słupków na wykresie jest różna.
Ten przykład traktuje jako symulację PoC. Czyli szybko możemy przygotować prostą aplikację, aby zobaczyć w praktyce działanie jakiejś usługi. Tutaj Cognitive Services. Dzięki czemu możemy ocenić przydatność jakieś usługi – jakość opisu obrazków. A z drugiej strony również koszt takiej usługi. Wszystko po to, aby móc podjąć lepszą decyzję.
Jako ciekawostkę napiszę, że w przypadku tej aplikacji, to koszt usługi do analizy obrazków wyszedł sporo większy niż sam koszt działania aplikacji. Dokładny koszt wygląda tak:

Dzienny koszt wynosił około €0,6, czyli przeszło 4,5 raza więcej niż działanie aplikacji w Azure Logic App. W takiej sytuacji można dość mocno się zastanawiać, czy warto przepisać aplikację na coś tańszego. Ale bez takiego PoC, po pierwsze nie wiedzielibyśmy, czy usługa do analizy obrazków jest dla nas ok oraz jaki byłby jej faktycznie koszt.
Kopiowanie plików
Ostatnim przykładem, jaki Ci pokażę, jest aplikacja, którą wykorzystuję prywatnie do kopiowania plików. Pokażę Ci kilka ciekawych rzeczy.
Na blogu wykorzystuję plugin, który raz dziennie przygotowuje mi dodatkowy backup wordpressa (plik zip o rozmiarze około 500MB), który następnie jest wysyłany i zapisywany w Azure Storage. Prywatnie wykupiłem większą powierzchnię w OneDrive, więc postanowiłem, że backup będę dodatkowo zapisywał właśnie w ramach OneDrive i wykorzystam do tego Azure Logic App.
Koszt działania takiej aplikacji przedstawia poniższa grafika.

Na wykresie widać dwie wysokości słupków. Jest to spowodowane tym, że pierwotnie aplikacja sprawdzała co 5 minut, czy na Azure Storage został dodany nowy plik. Później zmieniłem to na 5 godzin, aby zobaczyć, jaki jest koszt samego sprawdzania nowych plików w Azure Storage, a jaki przesłania pliku o rozmiarze około 500MB.
Jak widać, koszt sprawdzania zmian kosztuje około €0,05 dziennie (12×24=288 sprawdzeń). Natomiast koszt przekopiowania pliku 500MB około €0,14 (dziennie jest tworzony jeden pliku backupu i jest on raz kopiowany). W tym jest również około 5 sprawdzeń Azure Storage, ale ten koszt już jest pomijany.
Miesięczny koszt działania takiej aplikacji to około €4.22. Z jednej strony nie jest to mało, ale z drugiej koszt przygotowania i utrzymania jakieś prostej aplikacji w .NET Core prawdopodobnie pozwoliłby na wielomiesięczne działanie tej aplikacji w Azure Logic App.
Dodatkowo na tym przykładzie widać, jak bardzo istotna jest konfiguracja aplikacji i jej częstotliwość wykonywania. Tak jak w tym przypadku wykonywanie jej zbyt często dość mocno wpływa na końcowy koszt.
Podsumowanie
Mam nadzieję, że tym wpisem udało mi się pokazać Ci, jaki jest faktyczny koszt działania aplikacji Azure Logic App oraz na co zwrócić uwagę i co może ostatecznie dość znacząco wpłynąć na koszt.
Na bazie przykładów widać, że Azure Logic App fajnie sprawdza się w sytuacji tworzenia PoC i testowania jakichś istniejących usług.
Drugim miejscem, gdzie według mnie warto pomyśleć o Azure Logic App, są aplikacje, które wykonują się dość rzadko. Dzięki wbudowanym łącznikom do różnych usług, jesteśmy w stanie bardzo szybko przygotować taką aplikację. Na przykład po to, aby raz dziennie pobrać jakieś dane z zewnętrznego systemu, które następnie importujemy do naszej właściwej aplikacji.
Co sądzisz o kosztach Azure Logic App?
Uważam, że mimo wszystko koszty nie są wygórowane jeśli przyjmiemy odpowiednie kryteria. Tworząc aplikację, która będzie obsługiwana raz na jakiś czas nie stracimy fortuny, a tylko zyskamy. Świetne podsumowanie.