Microsoft AZ-204: Azure Functions i przetwarzanie bezserwerowe — Przewodnik do nauki
Część Microsoft Azure Developer Associate AZ-204 — Przewodnik do nauki. Ćwicz ze zweryfikowanymi odpowiedziami w centrum egzaminów Microsoft, albo rozwiąż testy na czas na ExamRoll.io.
Przegląd
Azure Functions to bezserwerowa usługa obliczeniowa zoptymalizowana pod kątem obciążeń sterowanych zdarzeniami i krótkotrwałych. Abstrahuje ona infrastrukturę, dzięki czemu możesz skupić się na kodzie, który reaguje na zdarzenia z punktów końcowych HTTP, kolejek, blobów, kanałów zmian danych i usług strumieniowych. Wybierasz plan hostingu, który zarządza skalowaniem, cenami i zachowaniem przy zimnym starcie; łączysz swój kod z wyzwalaczami i źródłami danych za pomocą powiązań deklaratywnych; oraz opcjonalnie tworzysz długotrwałe, niezawodne przepływy pracy przy użyciu Durable Functions. Solidna konfiguracja, powtarzalne wdrożenia i głęboka obserwowalność dzięki Application Insights dopełniają platformę dla systemów klasy produkcyjnej.
Plany hostingu, skalowanie i zimne starty
Wybór planu hostingu determinuje charakterystykę wykonania i koszty.
Plan Consumption (zużycie):
- Skalowanie i ceny: Płatność za wykonanie i zużycie zasobów. Platforma skaluje się w poziomie automatycznie w oparciu o zdarzenia. Liczba instancji skaluje się do zera w stanie bezczynności.
- Limity wykonania: Limit czasu wykonania funkcji jest konfigurowalny do 10 minut dla funkcji innych niż HTTP; funkcje HTTP mają krótsze praktyczne limity czasu ze względu na łączność klienta.
- Zimny start: Zimne starty występują po okresach bezczynności lub podczas skalowania w poziomie, gdy inicjowane są nowe instancje. Czas uruchomienia zależy od języka, zależności i rozmiaru aplikacji.
- Sieć/funkcje: Domyślnie obsługuje sieci publiczne. Ograniczony zestaw funkcji w porównaniu do planu Premium (np. brak integracji z VNET). Sloty wdrożeniowe nie są dostępne.
Plan Premium:
- Skalowanie i ceny: Skaluje się w oparciu o zdarzenia, ale utrzymuje „wstępnie rozgrzane” instancje, aby wyeliminować zimne starty. Opłaty naliczane są za rdzeniosekundy i pamięć przydzieloną dla aktywnych i wstępnie rozgrzanych instancji.
- Limity wykonania: Praktycznie nieograniczony czas wykonania (z zastrzeżeniem ograniczeń klienta HTTP). Zalecany dla obciążeń wrażliwych na opóźnienia lub cięższych.
- Łagodzenie zimnego startu: Wstępnie rozgrzane instancje utrzymują środowisko uruchomieniowe w gotowości. Kontrolujesz liczbę wstępnie rozgrzanych instancji na plan, zapewniając przewidywalne opóźnienia przy nagłych wzrostach obciążenia.
- Sieć/funkcje: Obsługiwana integracja z VNET, prywatne punkty końcowe, zwiększone rozmiary instancji i sloty wdrożeniowe.
Plan Dedicated (App Service):
- Skalowanie i ceny: Działa na udostępnionych instancjach App Service z ręcznymi lub automatycznymi regułami skalowania. Płacisz za bazowy plan App Service niezależnie od jego wykorzystania.
- Limity wykonania: Brak narzuconego przez platformę limitu czasu dla wykonania w tle. Idealny, gdy masz już zapasową pojemność App Service lub potrzebujesz stałej wydajności.
- Łagodzenie zimnego startu: Włącz opcję Always On, aby aplikacja była zawsze załadowana. Brak skalowania do zera; instancje pozostają aktywne.
Wybierz plan Consumption dla zoptymalizowanych kosztowo, sporadycznych obciążeń, Premium dla niskich opóźnień i potrzeb związanych z VNET, a Dedicated, gdy konsolidujesz zasoby z istniejącą pojemnością App Service lub wymagasz pełnej kontroli. Aby uzyskać ultraniskie opóźnienia, plan Premium z wstępnie rozgrzanymi instancjami lub Dedicated z opcją Always On redukują zimne starty. Dodatkowo zminimalizuj wpływ zimnego startu poprzez ograniczanie zależności, używanie opcji run-from-package i leniwą inicjalizację klientów.
Wyzwalacze i powiązania
Funkcje są aktywowane przez wyzwalacze i wchodzą w interakcję z danymi za pomocą powiązań. Wyzwalacze definiują, jak i kiedy funkcja jest uruchamiana. Powiązania deklaratywnie łączą się z zewnętrznymi usługami w celu obsługi wejścia/wyjścia bez konieczności pisania imperatywnego kodu SDK.
Typowe wyzwalacze:
- Wyzwalacz HTTP: Udostępnia punkty końcowe dla interfejsów API w stylu REST lub webhooków. Poziomy autoryzacji obejmują Anonymous, Function i Admin, wymuszane za pomocą kluczy lub uwierzytelniania platformy. Należy wziąć pod uwagę idempotencję i limity czasu dla długotrwałych zadań; w razie potrzeby przenieść obciążenie do kolejki lub Durable Functions.
- Wyzwalacz czasowy (Timer): Harmonogramy oparte na CRON działają na pojedynczej instancji na aplikację (na timer). Używaj wyrażeń NCRONTAB z konfiguracją strefy czasowej. Idealny do zadań konserwacyjnych, odpytywania (polling) i czyszczenia.
- Wyzwalacz Azure Storage Queue: Reaguje na komunikaty w kolejce. Obsługuje obsługę komunikatów-pułapek (poison messages) za pomocą kolejki
-poisonpo przekroczeniu progu liczby pobrań. Konfiguruj rozmiar partii, limit czasu widoczności i współbieżność za pomocą plikuhost.json. - Wyzwalacz Azure Blob Storage: Reaguje na zdarzenia tworzenia/aktualizacji obiektów blob, używając kombinacji odpytywania i powiadomień z Event Grid. Używaj wzorców ścieżek do określania zakresu kontenerów i prefiksów. Zrozumienie spójności ostatecznej (eventual consistency) i mechanizmu ponawiania prób przy przesyłaniu dużych obiektów blob.
- Wyzwalacz Azure Event Hubs: Przetwarza strumienie zdarzeń o wysokiej przepustowości z mechanizmem punktów kontrolnych (checkpointing). Konfiguruj współbieżność partycji, rozmiar partii i pobieranie z wyprzedzeniem (prefetch), aby zoptymalizować przepustowość. Odpowiedni do telemetrii i przetwarzania strumieniowego z zachowaniem kolejności w obrębie partycji.
- Wyzwalacz Azure Service Bus: Obsługuje kolejkę lub subskrypcję tematu. Konfiguruj
maxConcurrentCalls,prefetchi zachowania automatycznego uzupełniania (auto-complete). Kolejki utraconych wiadomości (dead-letter queues) przechwytują komunikaty, które przekroczyły liczbę prób dostarczenia, w celu późniejszej inspekcji. - Wyzwalacz Azure Cosmos DB: Nasłuchuje na kanale zmian (change feed) w poszukiwaniu operacji wstawiania i aktualizacji. Skaluje się wraz z liczbą fizycznych partycji; zapewnij wystarczającą liczbę jednostek RU. Użyj kolekcji dzierżaw (leases collection) do koordynacji skalowania w poziomie między instancjami.
Powiązania:
- Powiązania wejściowe: Dostarczają dane do funkcji, np. zawartość obiektu blob, encję tabeli, dokumenty Cosmos DB lub metadane komunikatu z kolejki. W .NET atrybuty (np.
undefined
) lub plik function.json definiują powiązanie; w innych językach konfiguracja jest deklaratywna.
- Powiązania wyjściowe: Zapisują dane bez użycia SDK, np. umieszczają komunikat w kolejce, tworzą obiekt blob, wysyłają do Event Hub/Service Bus lub zapisują w Cosmos DB. Funkcje mogą mieć wiele powiązań wyjściowych lub zwracać pojedynczy wynik z sygnatury funkcji.
- Wyrażenia powiązań: Parametryzują szczegóły połączeń i ścieżki za pomocą symboli zastępczych, np.
{queueTrigger},{rand-guid}i ustawień aplikacji opartych na środowisku. Właściwości połączenia odwołują się do nazw ustawień aplikacji, umożliwiając rotację i zarządzanie sekretami. Preferuj połączenia oparte na tożsamości z użyciem tożsamości zarządzanej (managed identity), tam gdzie jest to wspierane, aby unikać osadzania sekretów. - Współbieżność i przetwarzanie wsadowe: Kontroluj współbieżność i rozmiary partii w pliku
host.jsondla każdego rozszerzenia (queues, serviceBus, eventHub), aby dostroić przepustowość i zużycie pamięci. Weryfikuj obsługę komunikatów-pułapek/utraconych wiadomości, aby upewnić się, że błędy są ujawniane.
Projektuj wyzwalacze i powiązania pod kątem idempotencji, mechanizmów przeciwciśnienia (backpressure) i izolacji błędów. Dla źródeł zapewniających dostarczenie co najmniej raz (at-least-once delivery) (kolejki, Event Hubs, Service Bus), pisz funkcje tak, aby były idempotentne i odporne na ponowne próby wykonania.
Durable Functions: Niezawodne wzorce orkiestracji
Durable Functions rozszerza Azure Functions o stanową, niezawodną orkiestrację dla długotrwałych przepływów pracy, wykorzystując durable task framework.
Typy funkcji:
- Funkcje orkiestratora: Opisują logikę przepływu pracy w kodzie przy użyciu deterministycznych konstrukcji. Orkiestratorzy odtwarzają stan po wystąpieniu zdarzeń i muszą unikać niedeterministycznych API (np.
DateTime.Now, losowości, wywołań sieciowych) bez użycia odpowiednich pomocników. Używaj API klienta orkiestracji Durable do uruchamiania instancji, odpytywania ich i zarządzania nimi. - Funkcje aktywności: Wykonują dyskretne jednostki pracy, takie jak wywoływanie zewnętrznych API, operacje obciążające procesor lub zadania wejścia/wyjścia. Aktywności mogą być ponawiane i są niezależnie skalowalne.
- Funkcje encji: Dostarczają trwałe, adresowalne encje z małym, spójnym stanem i operacjami (np. liczniki, stan urządzenia). Encje przetwarzają operacje w sposób szeregowy z jednowątkową spójnością.
Wzorce:
- Łańcuch funkcji (Function chaining): Sekwencyjne wykonywanie aktywności w zdefiniowanej kolejności (A → B → C), przekazując wyniki do następnej. Przydatne w przypadku potoków z zależnościami.
- Rozgałęzienie/zebranie (Fan-out/fan-in): Uruchamianie wielu aktywności równolegle i agregowanie wyników. Orkiestratorzy koordynują pracę z semantyką podobną do
Task.WhenAll. Używaj tego wzorca do równoległego przetwarzania niezależnych zadań. - Interakcja z człowiekiem (zdarzenia zewnętrzne): Oczekiwanie na zewnętrzne dane wejściowe (np. zatwierdzenie) przy użyciu
WaitForExternalEventz limitami czasu i eskalacją. Połącz z trwałymi timerami, aby zaimplementować umowy SLA i logikę kompensacji. - Asynchroniczne API HTTP: Uruchamianie orkiestracji i zwracanie statusu 202 Accepted z adresami URL do sprawdzania statusu/wyniku. Klienci odpytują punkty końcowe statusu, udostępniane przez powiązanie klienta Durable, w oczekiwaniu na ostateczny wynik lub stan.
- Monitorowanie: Cykliczne punkty kontrolne uruchamiane zgodnie z harmonogramem, np. odpytywanie punktu końcowego do momentu spełnienia warunku, z użyciem trwałych timerów, aby unikać blokowania zasobów obliczeniowych.
- Agregator/Encja: Przechowywanie małego stanu obok logiki za pomocą funkcji encji w celu precyzyjnej koordynacji bez konieczności tworzenia pełnego przepływu pracy.
Durable Functions gwarantują wykonanie aktywności co najmniej raz (at-least-once) i progres stanu orkiestratora dokładnie raz (exactly-once). Utrwalają stan w usłudze przechowywania (domyślnie jest to Azure Storage); upewnij się, że konto magazynu spełnia wymagania dotyczące przepustowości i niezawodności. Używaj niestandardowych polityk ponawiania prób dla błędów przejściowych i wywołuj zdarzenia w celu interakcji zewnętrznej. W przypadku bardzo długich procesów, trwałe orkiestracje mogą działać przez dni, a nawet miesiące, dzięki wbudowanej trwałości.
Konfiguracja, wdrażanie i obserwowalność
Konfiguracja aplikacji funkcji jest warstwowa i świadoma środowiska.
- host.json: Kontroluje zachowanie środowiska uruchomieniowego i rozszerzeń. Konfiguracja logowania (próbkowanie, poziomy logów), functionTimeout, ustawień rozszerzeń (rozmiary partii, współbieżność, pobieranie z wyprzedzeniem) oraz wersji schematu JSON. Plik host.json powinien być przechowywany w kontroli wersji.
- local.settings.json: Lokalne ustawienia deweloperskie, w tym parametry połączenia i ustawienia aplikacji. Nie jest wdrażany na Azure. Traktuj wpisy tajne odpowiednio; wyklucz je z publicznych repozytoriów i używaj user-secrets lub wstrzykiwania zmiennych środowiskowych do lokalnego developmentu.
- Ustawienia aplikacji: Przechowywane w konfiguracji aplikacji funkcji (App Service). Kluczowe ustawienia obejmują AzureWebJobsStorage (dla konta magazynu używanego przez wyzwalacze, logi i punkty kontrolne), parametry połączenia specyficzne dla rozszerzeń oraz wszelkie niestandardowe konfiguracje. Oznacz wpisy tajne jako ustawienia slotu, aby uniknąć ich zamiany. Używaj referencji do Key Vault z tożsamością zarządzaną, aby unikać przechowywania wpisów tajnych w postaci zwykłego tekstu.
Opcje wdrażania:
- Zip Deploy: Przesłanie pliku ZIP ze zbudowanymi artefaktami do aplikacji. Szybkie i proste dla CI/CD. Użyj
undefined
lub API zipdeploy. Zapisuje pliki w katalogu zawartości.
- Run-From-Package: Ustaw
undefined
na adres URL pakietu (lub 1 dla najnowszej wersji). Środowisko uruchomieniowe montuje pakiet w trybie tylko do odczytu, co poprawia zimny start i eliminuje problemy z blokadą plików podczas wdrażania. Przechowuj pakiet w Blob Storage z adresem URL SAS w celu zapewnienia powtarzalnych wycofań.
- Sloty wdrożeniowe: Sloty przejściowe (staging) i produkcyjne umożliwiają zamiany bez przestojów z rozgrzewaniem (warmup). Sloty są obsługiwane w planach Premium i Dedicated. Konfiguruj ustawienia specyficzne dla slotu (flaga ustawienia slotu) dla wpisów tajnych i punktów końcowych, aby zapobiec wyciekom między środowiskami. Użyj rozgrzewania preSwap, aby zweryfikować rozszerzenia i powiązania przed przeniesieniem ruchu.
Monitorowanie za pomocą Application Insights:
- Logi wywołań: Każde wywołanie funkcji emituje ustrukturyzowaną telemetrię, w tym żądania (Requests), ślady (Traces), wyjątki (Exceptions) i zależności (Dependencies). Używaj
undefined
(lub odpowiednika) do logowania strukturalnego. Identyfikatory operacji i korelacji łączą aktywność i zależności między usługami.
- Live Metrics: Widok w czasie rzeczywistym przepustowości, awarii i opóźnień bez próbkowania. Przydatne do obserwacji wdrożeń, skalowania i krytycznych ścieżek (hot paths). Filtruj według nazwy funkcji, aby izolować problemy.
- Awarie i niezawodność: Sprawdzaj wyjątki (Exceptions), nieudane żądania (Requests) i awarie zależności. Konfiguruj alerty dotyczące wskaźnika awarii, anomalii
undefined
lub wzrostu kolejek DLQ/poison. W przypadku wyzwalaczy Storage Queue monitoruj kolejkę -poison; w przypadku Service Bus/Event Hubs monitoruj kolejkę niedostarczonych wiadomości (dead-letter) i kondycję punktów kontrolnych. Dostosuj polityki ponawiania i backoff w host.json, aby zmniejszyć wpływ błędów przejściowych.
- Śledzenie rozproszone: Włącz nagłówki śledzenia W3C, aby propagować korelację przez HTTP i komunikację za pomocą wiadomości. W przypadku Durable Functions, framework łączy telemetrię orkiestracji i aktywności, ułatwiając diagnostykę end-to-end. Dostosuj próbkowanie, aby zrównoważyć koszty i szczegółowość danych.
Zarządzaj funkcjami za pomocą automatyzacji wdrożeń (GitHub Actions/Azure Pipelines), sond kondycji (health probes) dla punktów końcowych HTTP i dostrajania z uwzględnieniem automatycznego skalowania. Utrzymuj pakiety w niewielkich rozmiarach, przechowuj w pamięci podręcznej klientów (np.
undefined
, klient Service Bus) jako statyczne singletony i sprawdzaj, czy ustawienia połączeń powiązań są rozwiązywane podczas uruchamiania, aby zapobiec awariom w czasie wykonywania.
Praktyczny scenariusz problemowy
Firma Contoso Retail uruchamia usługę promocyjną, która stosuje rabaty w czasie rzeczywistym, gdy klienci dodają produkty do koszyka. Backend musi reagować na ruch o dużej zmienności z niskim opóźnieniem, wywoływać zewnętrzne API do wyceny i aktualizować dokument koszyka w Cosmos DB. Dział operacyjny wymaga wdrożeń bez przestojów i głębokiego wglądu w awarie.
- Wybierz plan hostingu i strukturę aplikacji
- Użyj planu Azure Functions Premium z dwiema wstępnie rozgrzanymi instancjami i integracją z VNET. Plan Premium eliminuje zimne starty dla wrażliwych na opóźnienia interakcji z koszykiem i zabezpiecza ruch wychodzący do zewnętrznego API za pomocą NAT lub zapory sieciowej w VNET.
- Utwórz jedną aplikację funkcji z funkcją wyzwalaną przez HTTP dla punktu końcowego koszyka oraz orkiestratorem Durable Functions do koordynacji pobierania rabatów i aktualizacji koszyka.
- Zaimplementuj orkiestrację Durable w celu zapewnienia niezawodności i równoległości
- Funkcja orkiestratora: Łańcuch kroków w celu walidacji danych wejściowych, równoległe uruchomienie (fan-out) funkcji aktywności w celu pobrania rabatów dla każdej pozycji w koszyku, a następnie zagregowanie (fan-in) wyników w celu uzyskania najlepszej ceny. Orkiestracja Durable zapewnia deterministyczny przepływ sterowania i odporność na restarty.
- Funkcje aktywności: Jedna aktywność wywołuje zewnętrzne API z politykami ponawiania; druga aktualizuje koszyk w Cosmos DB za pomocą powiązania wyjściowego. Aktywności hermetyzują zewnętrzne operacje wejścia/wyjścia i mogą być niezależnie ponawiane bez duplikowania logiki orkiestratora.
- Skonfiguruj wyzwalacze i powiązania dla uproszczenia
- Wyzwalacz HTTP z uwierzytelnianiem na poziomie funkcji (Function auth) do akceptowania podpisanych żądań z frontendu internetowego. Zwróć kod 202 z adresem URL statusu dla długo trwających operacji na koszyku lub 200 dla szybkich ścieżek.
- Powiązanie wyjściowe Cosmos DB w funkcji aktywności do wykonania operacji upsert na dokumencie koszyka. Wyrażenia powiązań używają
undefined
z ładunku HTTP, aby wskazać właściwy klucz partycji.
- Użyj tożsamości zarządzanej i połączeń opartych na tożsamości dla Cosmos DB oraz referencji do Key Vault, eliminując wpisy tajne z ustawień aplikacji.
- Zoptymalizuj konfigurację i wdrożenie
- Plik host.json ustawia
undefined
na nieograniczony (w planie Premium) i konfiguruje przyjazne dla service mesh limity czasu HTTP. Poziomy logowania są dostrojone na Information dla środowiska produkcyjnego, a próbkowanie (Samples) jest ustawione na 20%, aby kontrolować koszty.
- Użyj trybu run-from-package z pakietami przechowywanymi w wersjonowanym kontenerze Blob. Wdrażaj za pomocą CI poleceniem
undefined
i wykonuj zamianę slotu przejściowego na produkcyjny w celu zapewnienia wydań bez przestojów. Oznacz parametry połączenia i punkty końcowe API jako ustawienia slotu, aby uniknąć wycieków między środowiskami.
- Monitoruj i zarządzaj
- Włącz Application Insights i Live Metrics, aby obserwować przepustowość i opóźnienia podczas wydań. Skonfiguruj alerty na błędy HTTP 5xx, wskaźnik awarii zależności od API do wyceny oraz wzrost liczby nieudanych orkiestracji Durable Functions.
- Użyj śledzenia rozproszonego, aby skorelować żądanie HTTP z orkiestracją Durable i zależnościami aktywności, przyspieszając analizę przyczyn źródłowych dla sporadycznych problemów z usługami zewnętrznymi.
Dlaczego takie wybory:
- Plan Premium z wstępnie rozgrzanymi instancjami zapewnia stałe niskie opóźnienia i obsługuje integrację z VNET w celu bezpiecznego ruchu wychodzącego.
- Durable Functions zapewniają niezawodne tworzenie łańcuchów oraz wzorzec fan-out/fan-in z automatycznym zarządzaniem stanem i ponawianiem prób dla zewnętrznych wywołań API.
- Powiązania redukują kod standardowy (boilerplate) i wymuszają spójny, deklaratywny dostęp do danych w Cosmos DB.
- Run-from-package i sloty zapewniają powtarzalne, atomowe wdrożenia bez problemów z blokadą plików czy przestojów.
- Application Insights oferuje obserwowalność w czasie rzeczywistym, korelację i alerty zgodne z operacyjnymi umowami SLA.
← Azure App Service i aplikacje internetowe · Wszystkie domeny · Azure Storage i Blob Storage →
Przećwicz te pytania → · Testy na czas na ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Zdaj egzamin →