Kurs
Azure Functions to część bezserwerowej usługi obliczeniowej Microsoftu. Pozwala po prostu uruchamiać małe fragmenty kodu w odpowiedzi na zdarzenia, bez konieczności samodzielnego zarządzania serwerami.
Na przykład funkcja może uruchomić się, gdy nadejdzie żądanie HTTP, gdy plik zostanie przesłany do magazynu albo gdy nadejdzie zaplanowana godzina.
„Bezserwerowe” nie oznacza, że nie ma serwerów. Oznacza, że Azure zarządza infrastrukturą za ciebie. Azure zajmuje się udostępnianiem zasobów, skalowaniem i utrzymaniem w tle.
W tym przewodniku omówię elementy składowe: wyzwalacze, powiązania, opcje hostingu oraz praktyczny przykład na start.
Czym są Azure Functions?
Azure Function to po prostu mały fragment kodu, który uruchamia się, gdy wybrane przez ciebie zdarzenie go wyzwoli. Ty piszesz logikę, a Azure zajmuje się resztą.
Ten model opiera się na trzech pojęciach.
- Wykonywanie sterowane zdarzeniami sprawia, że kod działa tylko wtedy, gdy coś się dzieje, a nie cały czas.
- Automatyczne skalowanie pozwala Azure dodawać lub usuwać zasoby obliczeniowe w zależności od obciążenia.
- Model rozliczeń za zużycie pozwala w niektórych planach hostingu płacić tylko za czas faktycznego działania twojego kodu.
Idealnie jedna funkcja wykonuje jedno zadanie, na przykład zmienia rozmiar obrazu albo przetwarza komunikat. Function App to kontener, który zawiera jedną lub więcej funkcji. Zarządza wspólnymi ustawieniami, takimi jak konfiguracja i wdrożenie, dla wszystkich funkcji w środku.
Jak działają Azure Functions
Cykl życia funkcji można ująć w prosty schemat:
- Zachodzi zdarzenie, takie jak przesłanie pliku lub wywołanie HTTP.
- Wyzwalacz wykrywa zdarzenie i natychmiast uruchamia funkcję.
- Funkcja wykonuje swój kod.
- Powiązania łączą funkcję z innymi usługami, które odczytują potrzebne dane wejściowe lub wysyłają wyniki.
- Azure zarządza zasobami obliczeniowymi w tym procesie, oczywiście zgodnie z wybranym planem hostingu.
Ten przepływ jest w dużej mierze taki sam niezależnie od języka i opcji hostingu. Zmieniają się tylko wyzwalacz, kod i powiązania.
Wyzwalacze w Azure Functions
Każda funkcja ma dokładnie jeden wyzwalacz. Wyzwalacz definiuje, jak dokładnie funkcja się uruchamia. Oto najczęstsze typy, które warto znać:
- HTTP Trigger: Uruchamia funkcję po otrzymaniu żądania HTTP. Powszechnie używany do budowy interfejsów API.
- Timer Trigger: Uruchamia funkcję zgodnie z harmonogramem, na przykład co godzinę lub raz dziennie.
- Blob Storage Trigger: Uruchamia funkcję, gdy plik zostanie dodany lub zmieniony w Azure Blob Storage.
- Queue Trigger: Po prostu uruchamia funkcję, gdy w kolejce pojawi się nowa wiadomość.
- Event Hub Trigger: Uruchamia funkcję w odpowiedzi na strumień zdarzeń. Bardzo przydatny przy dużych ilościach danych.
- Cosmos DB Trigger: Uruchamia funkcję, gdy dokumenty są tworzone lub aktualizowane w kontenerze Cosmos DB, wykorzystując Change Feed.
- Service Bus Trigger: Uruchamia funkcję w odpowiedzi na wiadomości z kolejki lub tematu Azure Service Bus, często używany w komunikacji korporacyjnej i do rozprzęgania systemów.
- Durable Functions: Rozszerzenie Azure Functions, które pozwala pisać funkcje ze stanem w środowisku bezserwerowym, do orkiestracji złożonych, wieloetapowych przepływów pracy.
Powiązania (Bindings) w Azure Functions
Wyzwalacze i powiązania często są mylone, ale choć wyglądają podobnie, robią zupełnie co innego. Wyzwalacz uruchamia funkcję, a powiązanie łączy funkcję z danymi — odczytując je lub wysyłając dalej.
Powiązania wejściowe
W ten sposób dostarczasz funkcji dane bez pisania własnego kodu integracyjnego. Na przykład funkcja może automatycznie odczytać rekord z bazy danych, wystarczy zadeklarować powiązanie.
Powiązania wyjściowe
Pozwalają wysłać wynik działania funkcji w inne miejsce. Na przykład możesz użyć powiązań wyjściowych, aby zapisać przetworzony komunikat do kolejki.
Oto przykład dla jasności: Wyzwalacz Blob Storage uruchamia funkcję, gdy zostanie przesłany obraz. Powiązanie wyjściowe zapisuje następnie obraz o zmienionym rozmiarze do innego kontenera magazynu. Powiązania obsługują połączenia z magazynem i nie jest potrzebny żaden ręcznie pisany klient do magazynu.
Jak utworzyć swoją pierwszą Azure Function
Poniżej prosty przykład bardzo prostej funkcji wyzwalanej przez HTTP, która zwraca powitanie. Przebieg wygląda tak:
- Utwórz Function App. To kontener dla twojej funkcji w Azure.
- Wybierz środowisko uruchomieniowe i język, w którym chcesz pisać kod.
- Dodaj nową funkcję w swojej Function App.
- Wybierz wyzwalacz HTTP, aby funkcja reagowała na żądania sieciowe.
- Dodaj prostą logikę, np. odczytaj imię z żądania i zwróć „Cześć, [name].”
- Uruchom i przetestuj funkcję wbudowanymi narzędziami testowymi lub po prostu wyślij żądanie z przeglądarki.
- Wdróż ją do Azure, aby była dostępna publicznie.
Ten przykład celowo jest mały, żeby pokazać wzorzec, a resztę zostawić twojej kreatywności.
Języki obsługiwane przez Azure Functions
Azure Functions obsługuje wiele języków, m.in.:
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
Wsparcie i modele tworzenia mogą się różnić w zależności od języka i wersji. Dlatego przed rozpoczęciem nowego projektu polecam sprawdzić aktualną dokumentację Azure, bo te szczegóły często się zmieniają.
Opcje hostingu dla Azure Functions
Nie każda Azure Function działa tak samo. Azure oferuje kilka planów hostingu, każdy z innymi kompromisami. Właściwy wybór zależy od twojego przypadku. Główne kompromisy to:
- Skalowanie: Niektóre plany skalują się automatycznie i natychmiast, inne wymagają nieco więcej ręcznej kontroli.
- Zachowanie przy starcie: Niektóre plany utrzymują funkcje „w cieple”, czyli gotowe do natychmiastowego działania, inne uruchamiają funkcje na żądanie.
- Sieci: Niektóre plany obsługują zaawansowane funkcje sieciowe, takie jak łączenie z prywatną siecią wirtualną, inne nie.
- Koszt: Modele cenowe różnią się diametralnie — od opłaty za wykonanie po stałe miesięczne koszty.
Skalowanie i cold starty w Azure Functions
Gdy funkcja działa już w produkcji, znaczenie mają jeszcze dwa pojęcia:
Automatyczne skalowanie
Azure obserwuje obciążenie funkcji i gdy popyt rośnie, dodaje kolejne instancje obliczeniowe, a gdy spada — usuwa je. Nie musisz tego robić ręcznie.
Cold starty
Jeśli funkcja nie działała ostatnio, może potrzebować chwili, by się uruchomić przed obsłużeniem nowego żądania. To opóźnienie nazywa się cold startem. Niektóre plany hostingu ograniczają lub eliminują to zjawisko, utrzymując instancję w stanie „ciepłym”, jak wspomniano.
Typowe zastosowania Azure Functions
Model zdarzeniowy pasuje do wielu codziennych problemów, które możesz napotkać. W szczególności:
API i webhooki
Obsługa przychodzących żądań HTTP bez konieczności uruchamiania pełnego serwera WWW przez całą dobę.
Przetwarzanie plików i obrazów
Wyzwalaj funkcję, gdy tylko plik trafi do magazynu, a następnie zmieniaj jego rozmiar, konwertuj lub skanuj.
Zadania zaplanowane
Uruchamiaj zadania porządkowe, raporty lub przypomnienia zgodnie z harmonogramem, bez dedykowanego, zawsze włączonego serwera.
Potoki przetwarzania danych
Przetwarzaj wiadomości lub zdarzenia w miarę ich napływu, krok po kroku.
IoT i przetwarzanie zdarzeń
Obsługuj duże wolumeny danych z czujników lub urządzeń w miarę ich strumieniowania.
Zadania w tle
Odciążaj powolne lub okazjonalne prace, takie jak wysyłka e-maili, aby nie blokowały twojej głównej aplikacji.
Monitorowanie i rozwiązywanie problemów w Azure Functions
Gdy funkcja działa już publicznie, potrzebujesz wglądu w jej działanie.
Możesz na przykład przeglądać logi zapisujące, co działo się podczas każdego uruchomienia — to bardzo przydatne przy debugowaniu. Możesz też sprawdzać Application Insights w narzędziach Azure, które śledzi wydajność, żądania i błędy w jednym miejscu.
Warto też śledzić nieudane wywołania, aby wiedzieć, kiedy i dlaczego funkcja nie zakończyła działania. Monitorowanie wydajności pomaga wychwycić wolne funkcje, zanim staną się problemem, a oczywiście można skonfigurować ponawianie, by nieudane wykonania próbowały ponownie automatycznie.
Podsumowanie
Azure Functions pozwala uruchamiać kod w odpowiedzi na zdarzenia, bez konieczności zarządzania serwerami pod spodem. Wyzwalacze decydują, kiedy funkcja startuje. Powiązania z kolei ułatwiają połączenie tej funkcji z innymi usługami bez dodatkowego kodu integracyjnego.
Gdy przechodzisz od prostej funkcji testowej do rozwiązania produkcyjnego, wybór hostingu i skalowania ma dużo większe znaczenie. Właściwy plan wpływa na koszt, ale też na szybkość i niezawodność.
FAQ
Czym są Azure Functions?
Usługa bezserwerowa, która uruchamia małe fragmenty kodu w odpowiedzi na zdarzenia, bez twojego zarządzania serwerami.
Co wyzwala Azure Function?
Zdarzenia takie jak żądania HTTP, timery, przesyłanie plików lub wiadomości w kolejce.
Jaka jest różnica między wyzwalaczem a powiązaniem?
Wyzwalacz uruchamia funkcję. Powiązanie łączy ją z innymi usługami w celu wejścia lub wyjścia danych.
Czym jest cold start?
Krótkie opóźnienie, gdy funkcja startuje po okresie bezczynności.
Jakie języki obsługuje Azure Functions?
C#, JavaScript/TypeScript, Python, Java i PowerShell.