Tworzenie aplikacji bezserwerowych za pomocą funkcji Azure i rozwiązań .NET
Opublikowany: 2023-09-21Przetwarzanie bezserwerowe to model realizacji w chmurze, który umożliwia programistom tworzenie i uruchamianie aplikacji i usług bez myślenia o serwerach. W przypadku rozwiązań bezserwerowych aplikacje nie polegają na utrzymywaniu działania serwerów — dostawca chmury dynamicznie zarządza alokacją i udostępnianiem serwerów. Dzięki temu programiści mogą skupić się na kodowaniu logiki biznesowej, a nie na zarządzaniu serwerem.
Microsoft Azure Functions to bezserwerowa usługa obliczeniowa służąca do tworzenia i hostowania internetowych punktów końcowych oraz zadań przetwarzania w tle bez konieczności udostępniania serwerów i zarządzania nimi. Dzięki Azure Functions możesz uruchamiać kod na żądanie w odpowiedzi na zdarzenia bez konieczności jawnego udostępniania infrastruktury lub zarządzania nią. W tym poście na blogu omówimy, jak tworzyć aplikacje bezserwerowe za pomocą Azure Functions przy użyciu rozwiązań .NET, w tym wykorzystując usługi programistyczne ASP.NET .
Co to jest Azure Functions?
Azure Functions umożliwia uruchamianie kodu w chmurze bez wdrażania infrastruktury lub zarządzania nią. Dzięki Functions możesz napisać tylko taki kod, jakiego potrzebujesz do rozwiązania danego problemu, nie martwiąc się o zarządzanie serwerami. Platforma Azure zarządza za Ciebie całą infrastrukturą i serwerami.
Niektóre kluczowe aspekty i zalety Azure Functions:
- Oparte na zdarzeniach: funkcje są wyzwalane przez zdarzenia z wielu usług platformy Azure i usług innych firm. Należą do nich żądania HTTP, liczniki czasu, kolejki, bezserwerowe interfejsy API i inne. W odpowiedzi na te zdarzenia można uruchomić kod.
- Skaluje się automatycznie: platforma Azure zarządza funkcjami i skaluje je automatycznie na podstawie liczby żądań przychodzących i obciążenia przetwarzania. Nie musisz ręcznie udostępniać i skalować serwerów.
- Płatność za wykonanie: płacisz tylko za zasoby obliczeniowe wymagane do uruchomienia kodu. Nie ma żadnych opłat za przestoje, gdy funkcje nie są uruchomione.
- Wiele języków: Funkcje obsługują C#, JavaScript, Python, PowerShell, Java i inne. Możesz rozwijać funkcje w preferowanym języku.
- Środowisko bezserwerowe: dzięki funkcjom możesz skupić się na pisaniu kodu i pozwolić platformie Azure zająć się całym udostępnianiem serwerów, konfiguracją i zarządzaniem. Otrzymujesz prawdziwe doświadczenie bez serwera.
Lokalne rozwijanie funkcji .NET
Aby lokalnie tworzyć funkcje .NET, potrzebujesz podstawowych narzędzi Azure Functions Core Tools, które są interfejsem wiersza poleceń umożliwiającym tworzenie, testowanie i wdrażanie Azure Functions zarówno lokalnie, jak i na platformie Azure.
Aby skonfigurować środowisko programistyczne:
- Zainstaluj najnowszą wersję zestawu .NET Core SDK
- Zainstaluj podstawowe narzędzia Azure Functions przy użyciu narzędzia dotnet install -g Microsoft.Azure.WebJobs.Script.WebHost
- Utwórz katalog dla projektu aplikacji funkcji i uruchom func init
- Spowoduje to utworzenie przykładowego projektu funkcji z szablonem funkcji
Teraz możesz dodać kod funkcji, przetestować go lokalnie i opublikować na platformie Azure przy użyciu interfejsu wiersza polecenia func. Dodaj plik run.csx dla funkcji C# wyzwalanej przez HTTP:
Źródło {csharp}
Kopiuj
#r „Newtonsoft.Json”
przy użyciu Microsoft.AspNetCore.Mvc;
przy użyciu Microsoft.Extensions.Primitives;
przy użyciu Newtonsoft.Json;
przy użyciu System.Net;
przy użyciu System.Threading.Tasks;
publiczne statyczne zadanie asynchroniczne <IActionResult> Uruchom (wymaganie HttpRequest, dziennik ILogger)
{
log.LogInformation(„Funkcja wyzwalacza HTTP języka C# przetworzyła żądanie.”);
string name = req.Query[„nazwa”];
string requestBody = czekaj na nowy StreamReader(req.Body).ReadToEndAsync();
dane dynamiczne = JsonConvert.DeserializeObject(requestBody);
imię = imię? dane?.nazwa;
zwróć nazwę != null
? (ActionResult)nowy OkObjectResult($”Witam, {name}”)
: new BadRequestObjectResult(„Proszę przekazać nazwę w ciągu zapytania lub w treści żądania”);
}
Przetestuj to lokalnie, uruchamiając func host start, który uruchamia bramę funkcji na twoim hoście lokalnym. Teraz możesz go uruchomić za pomocą Postmana lub przeglądarki za pomocą http://localhost:7071/api/HttpExample?name=John.
Wybieranie wyzwalaczy i powiązań Azure Functions
Azure Functions obsługuje wiele różnych źródeł i obiektów docelowych zdarzeń zwanych wyzwalaczami i powiązaniami. Wybór odpowiednich wyzwalaczy i powiązań jest ważny w zależności od przypadku użycia.
Niektóre typowe wyzwalacze w funkcjach to:
- Wyzwalacz HTTP: do tworzenia interfejsów API REST i internetowych punktów końcowych. Kod jest wyzwalany przez żądania HTTP.
- Wyzwalacz czasowy: w przypadku zaplanowanych zadań uruchamianych zgodnie z harmonogramem, np. co 5 minut.
- Wyzwalacz kolejki: do przetwarzania komunikatów z kolejek magazynu.
- Wyzwalacz obiektów blob: do reagowania na nowe lub zaktualizowane obiekty blob w usłudze Azure Blob Storage.
Powiązania umożliwiają funkcjom interakcję z zewnętrznymi magazynami danych i usługami. Typowe wiązania obejmują:
- Kolejka pamięci: Do wysyłania komunikatów do kolejek pamięci.
- Magazyn obiektów Blob: do odczytu i zapisu w magazynie obiektów Blob Azure.
- Cosmos DB: do wykonywania zapytań i modyfikowania dokumentów w usłudze bazy danych Azure Cosmos DB.
- Service Bus: do obsługi komunikatów z kolejek i tematów Azure Service Bus.
Wybór odpowiedniego wyzwalacza i powiązań pomaga w tworzeniu kompleksowych rozwiązań poprzez integrację różnych funkcji z danymi i usługami.
Korzystanie z trwałych funkcji
Durable Functions umożliwiają pisanie funkcji stanowych, które umożliwiają niezawodne wykonywanie sekwencji operacji nawet w przypadku awarii lub ponownego uruchomienia. Umożliwia strukturyzowanie długotrwałych przepływów pracy jako maszyn stanowych.
Na przykład możesz zbudować przepływ pracy za pomocą Durable Functions, który składa się z:
- Funkcja orkiestratora: Działa jak maszyna stanów, która koordynuje wykonywanie funkcji działań w odpowiedniej kolejności.
- Funkcje działania: małe niezależne jednostki pracy, które mogą być wywoływane przez funkcje programu Orchestrator.
Korzyści z używania Durable Functions obejmują:
- Niezawodne ponowne próby: Durable Functions automatycznie ponawia funkcje działania, jeśli zawiodą.
- Wywołania asynchroniczne: funkcja programu Orchestrator może asynchronicznie uruchamiać funkcje działań i czekać na ich zakończenie.
- Punkty kontrolne: stan jest stale sprawdzany, dzięki czemu przepływy pracy można przywrócić nawet po ponownym uruchomieniu aplikacji lub awarii.
Przyjrzyjmy się prostemu przepływowi pracy, który organizuje dwie czynności:
Źródło {csharp}
Kopiuj
[Nazwa Funkcji („Orkiestrator”)]
publiczne statyczne zadanie asynchroniczne RunOrchestrator(
[OrchestrationTrigger] Kontekst IDurableOrchestrationContext)
{
var wyjście1 = oczekiwanie na kontekst.CallActivityAsync<string>(“DotNetActivity”, “Witajcie”);
var wyjście2 = oczekiwanie na kontekst.CallActivityAsync<string>(“DotNetActivity”, wyjście1);
// zwróć wynik
zwróć wyjście2;
}
[NazwaFunkcji („AktywnośćDotNet”)]
publiczne zadanie statyczne<string> Uruchom(
[ActivityTrigger] wejście stringowe,
Dziennik ILoggera)
{
log.LogInformation($”Przetworzona funkcja DotNetActivity: {input}”);
zwróć Zadanie.FromResult(input.ToUpper());
}
Trwałe funkcje umożliwiają rozbicie złożonych procesów na niezawodne przepływy pracy.
Najlepsze rozwiązania dotyczące programowania Azure Functions
Niektóre najlepsze praktyki, których należy przestrzegać podczas programowania Azure Functions:
- Użyj wstrzykiwania zależności: Wstrzykiwanie zależności do funkcji w celu zapewnienia lepszej testowalności.
- Unikaj długotrwałych procesów: funkcje mają na celu uruchamianie kodu na małych jednostkach przetwarzających. Staraj się, aby wykonanie kodu było krótkie.
- Używaj niezmiennych typów danych: funkcje są bezstanowe, więc unikaj typów zmiennych/efektów ubocznych, które mogą powodować problemy.
- Scentralizowana obsługa błędów: dodaj wspólną logikę obsługi błędów, zamiast obsługiwać je wszędzie indywidualnie.
- Rejestrowanie strukturalne: standardowe rejestrowanie pomaga w debugowaniu, monitorowaniu i ścieżkach audytu.
- Ograniczanie i ponowne próby: Obsługuj błędy ograniczania, wdrażając ponowne próby z wykładniczymi wycofywaniami.
- Wersjonowanie: Silnie wersjonuj wyzwalacze, powiązania i wejścia/wyjścia, aby uniknąć zakłócania zmian.
- Monitorowanie i oprzyrządowanie: używaj narzędzi takich jak Application Insights do rejestrowania, monitorowania wydajności i analiz użycia.
- Użyj powiązań kontekstowych: Wykorzystaj powiązania kontekstowe, aby uzyskać dostęp do takich rzeczy, jak ustawienia aplikacji, bez dodatkowych zależności.
Postępowanie zgodnie z tymi najlepszymi praktykami pomaga tworzyć niezawodne, niezawodne i skalowalne aplikacje bezserwerowe za pomocą Azure Functions.
Wdrażanie funkcji na platformie Azure
Gdy funkcje będą gotowe, możesz wdrożyć je na platformie Azure za pomocą interfejsu wiersza polecenia platformy Azure, programu PowerShell, programu Visual Studio lub bezpośrednio z interfejsu wiersza polecenia podstawowych narzędzi Azure Functions:
Kopiuj
func Azure FunctionApp Publikuj <nazwa aplikacji-funkcji>
Spowoduje to opublikowanie folderu projektu funkcji w aplikacji funkcji platformy Azure. Oto kilka kluczowych korzyści wynikających z wdrażania funkcji na platformie Azure:
- Automatyczne skalowanie – funkcje skalują się w oparciu o liczbę przychodzących żądań lub wyzwalacze czasowe.
- Wysoka dostępność — wiele instancji w centrach danych zapewnia wysoką dostępność.
- Monitorowanie i rejestrowanie — używaj narzędzi takich jak Application Insights do monitorowania wydajności, błędów itp.
- Platforma bezserwerowa – brak serwerów do udostępniania/zarządzania. Po prostu skupiasz się na kodzie.
- Ciągłe wdrażanie — korzystaj z potoków CI/CD do automatycznego wdrażania w przypadku zmian w kodzie.
Platforma Azure obsługuje całą infrastrukturę, pozwala uniknąć kosztów przestojów i zapewnia w pełni bezserwerową platformę do niezawodnego uruchamiania aplikacji bezserwerowych na dużą skalę.
Wniosek
Przetwarzanie bezserwerowe z usługą Azure Functions umożliwia programistom skupienie się na logice biznesowej, jednocześnie przenosząc całą infrastrukturę i zarządzanie operacjami na platformę Azure. Natywna obsługa programistyczna .NET, w tym opcja zatrudnienia programistów ASP.NET Core , umożliwia łatwe tworzenie niezawodnych rozwiązań bezserwerowych w języku C#. Dzięki wyzwalaczom, powiązaniom i trwałym funkcjom programiści mogą tworzyć kompleksowe architektury i przepływy pracy sterowane zdarzeniami jako funkcje bezstanowe i stanowe. W połączeniu z najlepszymi praktykami usługa Azure Functions umożliwia tworzenie i wdrażanie aplikacji bezserwerowych w chmurze z prostotą i skalowalnością.