Jak w jeden dzień zbudować proces klasy enterprise z Azure Logic Apps i Azure Functions
Przeglądając internet coraz częściej natykamy się na termin „Serverless”, który śmiało możemy nazwać buzzwordem roku 2018. Czytamy o nim w internecie, sluchamy na konferencjach IT, jednak często słyszymy o przypadkach jego użycia z dokumentacji, a nie z życia. Czas to zmienić! Dzisiaj odpowiemy na pytanie: czym są Azure Logic Apps i Azure Functions oraz gdzie i za ile możemy je wykorzystać?
Mateusz Dudek. Programista w Predica. Pasjonat rozwiązań chmurowych, aplikacji WWW i integracji systemów. Zawsze chętny do dzielenia się wiedzą z innymi.
Spis treści
Definicje
Serverless
Według definicji Martina Fowlera, autorytetu świata IT, serverless jest typem aplikacji uruchamianych zdarzeniami w bezstanowych kontenerach w pełni zarządzanych przez dostawcę. Moim zdaniem jest to jednak coś więcej niż usługa hostingowa. W chmurze Microsoft Azure mamy co najmniej kilka usług klasy serverless, między innymi Azure Logic Apps oraz Azure Functions, o których opowiem w dalszej części artykułu.
Azure Function
Azure Function w dużym skrócie jest usługą typu Function-as-a-Service (FaaS). Wdrażamy do niej napisany przez nas kawałek kodu, który następnie jest wykonywany w odpowiednim kontekście. Jeżeli chodzi o to, co uruchomi naszą funkcję out-of-the-box mamy do wyboru m.in. zapytania HTTP, zdarzenia na kolejkach lub Azure Storage, ale możemy również napisać własny „wyzwalacz” (ang. trigger), którego procedura tworzenia została opisana przez Yuka Abuno, Microsoft MVP na swoim blogu. Azure Function produkcyjnie może wykonywać kod C# oraz JavaScript, natomiast aktualnie wspierane języki można sprawdzić w aktualnej dokumentacji. Idealnym zadaniem dla Azure Function jest integracja z systemami.
Znaczącym atutem Azure Function jest jego cena – pierwszy milion wywołań (trwających 1 sekundę) mamy za free! Za każdy kolejny zapłacimy kwotę 0.17 EUR (według tego cennika).
Azure Logic Apps
Azure Logic Apps jest usługą, w której modelujemy logikę naszego rozwiązania. W znacznym stopniu jest zbliżona do usług firm takich jak Zapier czy IFTTT . Konfiguracja Azure Logic Apps sprowadza się do odpowiedniego zamodelowania jej przepływu (workflow) przy użyciu „klocków” (akcji). Czym są jednak te tajemnicze klocki?
Klockami są akcje konektorów, pozwalające nam w prosty i przyjemny sposób połączyć się z wybranymi przez nas serwisami. Aktualnie mamy ponad 100 dostępnych konektorów (managed APIs), a ich liczba ciągle się powiększa. Zainteresowanych odsyłam do oficjalnej dokumentacji konektorów na stronie Microsoft.
Nie zawsze jednak znajdziemy tam gotowy konektor, którego potrzebujemy. Dlatego paletę konektorów możemy uzupełnić poprzez wywołania HTTP naszego serwisu/API lub napisanie własnego kawałka kodu, uruchomionego jako wspomniane wcześniej Azure Function.
Zbuduj to sam
Zakładając, że mamy już zebrane wszystkie klocki, czas zbudować naszą aplikację! Azure Logic Apps możemy tworzyć w graficznym designerze w Portalu Azure bądź Visual Studio, lub edytować jej szablon, będący plikiem JSON. Poszczególne akcje możemy uzupełnić o pętle, warunki i switch’e i wiele innych. Co ciekawe, oprócz standardowych funkcjonalności mamy do wyboru możliwość wykonywania pętli w sposób równoległy oraz definiowania polityk ponawiania akcji w przypadku ich nieprawidłowego wykonania (np. przy nieprawidłowa odpowiedź wywołania HTTP). W łatwy sposób możemy również sprawdzić, które wywołania Azure Logic Apps zakończyły się sukcesem oraz sprawdzić to samo na poziomie poszczególnych „klocków” wraz ze szczegółami jego wywołania, takimi jak dane wejściowe, wyjściowe, czas wykonania i wiele, wiele innych.
Ekran szczegółów Azure Logic Apps wraz z listą szczegółów wywołań usługi
Przykładowy projekt
Przykładowym rozwiązaniem, jakie zbudowaliśmy w oparciu o Azure Logic Apps jest cyklicznie uruchamiana synchronizacja całodniowych wydarzeń z kalendarza użytkownika Office 365 z SharePoint. Zbudowaliśmy ją TYLKO w oparciu o gotowe komponenty Azure Logic Apps. Zgadza się! Zero kodu!
Nie musieliśmy tracić czasu na tworzenie nowego projektu, kompilację, budowę procesu CI/CD, tylko skupić się na osiągnięciu celu projektu. To jest właśnie największa zaleta Azure Logic Apps – skupienie na celu, a nie sposobie jego wykonania.
Przykładowy proces zbudowany w Azure Logic Apps
Wykorzystaliśmy w tym projekcie konektory:
- SharePoint – obsługa akcji odczytu, zapisu, usunięcia i edycji (CRUD) na listach SharePoint Online,
- HTTP – zapytania do Microsoft Graph API uwierzytelniane zgodnie z protokołem OAuth2.0 – proces uzyskiwania tokena jest zaimplementowany w konektorze. Wow!
Jak widzimy, nie jest to w cale takie trudne. Pytanie, czy oszczędzając na kodowaniu oszczędzamy również na kosztach utrzymania rozwiązania? To zależy. Idąc w kierunku Azure Logic Apps musimy liczyć się z większymi kosztami utrzymania rozwiązania, jednakże mamy mniejszy nakład pracy na stworzenie funkcjonalności. Idąc w kierunku drugim, czyli wybierając rozwiązanie uruchomione jako Azure Function, oszczędzamy pieniądze za hosting rozwiązania, jednak tracimy więcej czasu na prace deweloperskie. Jakie więc są różnice w kosztach utrzymania Azure Logic Apps i Azure Functions?
Za milion wywołań Azure Function (pomijając pierwszy darmowy) zapłacimy wcześniej wspomniane 0.17 EUR, natomiast hosting Azure Logic Apps wyniesie nas około 21 EUR. W dużym skrócie – wybierając Azure Logic Apps oszczędzamy.
Zagrożenia Server(less)
Tytułowy serverless jest konceptem ciekawym, jednak niesie ze sobą wiele często niespodziewanych problemów. Usługi te wykorzystują współdzielone środowisko uruchomieniowe, dlatego w przypadku dłuższego braku aktywności będą one usypiane, stąd też czas ich wykonywania możemy mierzyć zarówno w milisekundach, jak i sekundach. Nie jesteśmy w stanie przewidzieć, czy proces aplikacji działa, czy dopiero się budzi (cold start).
Budując rozwiązanie serverless w oparciu o Azure Function, czy Azure Logic Apps budujemy rozwiązanie rozproszone, przez co dochodzą nam problemy programowania rozproszonego. Pojawiają się nam trudności z debugowaniem i szukaniem błędów całości rozwiązania, dlatego nie możemy zapominać, że logowanie jest tu podstawą!
Innym problemem (czy może atutem?) jest obowiązek implementacji całości procesu CI/CD. Im więcej Azure Function tworzymy, tym więcej musimy ich wdrażać, a jak wiadomo – jest to proces czasochłonny, dlatego na samym początku przygody z tą technologią musimy zadbać o odpowiednie skrypty wdrożeniowe.
Podsumowanie
Usługi serverless w Microsoft Azure są stosunkowo nowymi usługami. Azure Logic Apps i Azure Function są tylko dwoma z trzech aktualnie oferowanych usług serverless w chmurze Microsoft Azure, jednak są one tymi najczęściej wykorzystywane. Jeśli jesteśmy w stanie zaakceptować ryzyko jakie niosą, możemy rozwiązać nimi wiele problemów i wykonać automatyzację codziennych czynności. Na kolejną dawkę serverless z wykorzystaniem usługi Azure Event Grid zapraszam już niebawem.
Najważniejsze rzeczy do zapamiętania
- Azure Function – usługa, w której uruchomimy swój kod
- Azure Logic Apps – usługa, w której uruchomimy naszą logikę
- Serverless nie jest zły, o ile jesteśmy świadomi jego specyfiki
- Nie każdą aplikację można przerobić na architekturę serverless
- Wykorzystując Azure Logic Apps oszczędzamy czas, a używając Azure Function pieniądze.
Zdjęcie główne artykułu pochodzi z stocksnap.io.