Omówienie usługi Azure Functions w usłudze Azure Container Apps

Azure Functions on Azure Container Apps oferuje w pełni zarządzane środowisko hostingowe bez serwera, które łączy możliwości zdarzania Azure Functions z funkcjami Container Apps. Do tych możliwości należą orkiestracja oparta na Kubernetes, wbudowane autoskalowanie oparte na Kubernetes Event-driven Autoscaling (KEDA), integracja z Dapr, wsparcie dla obciążenia GPU, obsługa sidecarów, łączność z siecią wirtualną (VNet) oraz zarządzanie wersjami.

To podejście jest przydatne, gdy chcesz, aby Twoje funkcje działały równolegle z innymi aplikacjami kontenerowymi, takimi jak mikroserwisy, API czy strony internetowe. Konteneryzacja aplikacji funkcjonalnych może też pomóc, gdy potrzebujesz niestandardowych zależności lub chcesz skalować do zera, by obniżyć koszty. Do zadań wymagających dużej liczby obliczeń, takich jak wnioskowanie AI, Container Apps obsługuje hosting oparty na GPU za pośrednictwem serwerowych GPU i dedykowanych profili obciążeń.

Jako zintegrowana funkcja w Azure Container Apps, możesz wdrażać obrazy kontenerów Azure Functions bezpośrednio do Azure Container Apps, korzystając z dostawcy Microsoft.App zasobów i ustawiając kind=functionapp podczas wywoływania az containerapp create. Aplikacje utworzone w ten sposób mają dostęp do wszystkich funkcji Azure Container Apps. W portalu Azure wybierz opcję Optymalizuj dla Azure Functions podczas konfiguracji. Więcej informacji można znaleźć w artykule Wdrożenie i konfiguracja.

Najważniejsze korzyści

Model hostingu usługi Container Apps opiera się na elastyczności konteneryzowanych obciążeń i charakteru sterowanego zdarzeniami Azure Functions. Oferuje ona następujące kluczowe zalety:

Poniższa tabela pomaga porównać funkcje Funkcji w Container Apps z planem Flex Consumption.

Funkcja Container Apps Plan elastycznej konsumpcji
Skalowanie do zera ✅ Tak (za pośrednictwem KEDA) ✅ Tak
Maksymalne skalowanie w poziomie 1000 (domyślnie 10, konfigurowalne) 1 000
Zawsze włączone instancje ✅ Tak (za pośrednictwem minReplicas) ✅ Tak (za pośrednictwem wystąpień zawsze gotowych)
Integracja z VNetem ✅ Tak ✅ Tak
Obsługa kontenerów niestandardowych ✅ Tak (przynieś własny obraz) ❌ Ograniczone (bez własnego kontenera)
Obsługa procesora GPU ✅ Tak (za pośrednictwem profilu dedykowanego obciążenia procesora GPU bezserwerowego) ❌ Nie
Wbudowane funkcje Obsługa funkcji usługi Container Apps. Na przykład KEDA, Dapr, multi-revisions, mTLS, przyczepki, kontrolka ruchu przychodzącego i nie tylko Funkcje dostępne wyłącznie dla funkcji
Model rozliczania Cennik usługi Container Apps: plan zużycia (procesor wirtualny, pamięć, żądania) i plan dedykowany (oparty na profilu obciążenia) Czas wykonania i zawsze dostępne wystąpienia

Aby uzyskać pełne porównanie usługi Functions on Container Apps w porównaniu do Flex Consumption i wszystkich innych typów planów i hostingu, zobacz Opcje skalowania i hostingu usługi Functions.

Scenariusze

Funkcje Azure w Container Apps są idealne dla szerokiej gamy zastosowań, szczególnie w przypadku wykonania sterowanego zdarzeniami, elastyczności kontenerów lub bezpiecznej integracji z innymi usługami.

  • Line-of-business APIs: Pakietowanie niestandardowych bibliotek, pakietów oraz interfejsów API z Azure Functions dla aplikacji biznesowych.
  • Migracja i modernizacja: Migracja lokalnych aplikacji dziedziczonych i/lub monolitycznych do mikroserwisów natywnych w chmurze na kontenerach.
  • Przetwarzanie sterowane zdarzeniami: Obsługa zdarzeń z Event Grid, Service Bus, Event Hubs i innych źródeł zdarzeń korzysta z modelu programowania Azure Functions.
  • Obciążenia AI i GPU: Przetwarzam filmy, obrazy, transkrypcje i inne obciążenia obliczeniowe, które wymagają zasobów GPU. Aby uzyskać więcej informacji, zobacz Korzystanie z bezserwerowych GPU w Azure Container Apps.
  • Microservices: Integrowanie Azure Functions z innymi usługami hostowanymi w Container Apps.
  • Kontenery niestandardowe: Funkcje pakietowe z niestandardowymi środowiskami uruchomieniowymi lub kontenerami bocznymi.
  • Aplikacje prywatne: Zabezpiecz Funkcje przeznaczone wyłącznie do użytku wewnętrznego używając sieci wirtualnej i wejścia wewnętrznego.
  • .NET Aspire: Integracja .NET Aspire z Azure Functions umożliwia tworzenie, debugowanie i organizowanie projektu Azure Functions .NET w ramach hosta aplikacji .NET Aspire. Przeczytaj więcej na temat Azure Functions z .NET Aspire
  • Ogólne funkcje: Uruchom wszystkie obsługiwane standardowe scenariusze Azure Functions (na przykład czasomierze, przetwarzanie plików, wyzwalacze bazy danych).

Wdrażanie i konfigurowanie

Aby wdrożyć Azure Functions na Azure Container Apps, zapakuj swoją aplikację function jako niestandardowy obraz kontenera i wdroż ją jak każdą inną aplikację kontenerową, z jedną kluczową różnicą. Ustaw właściwośćkind=functionapp, gdy używasz Azure CLI, szablonów Azure Resource Manager lub Bicep. Szczegółowe kroki i przykłady znajdziesz w artykule Utwórz aplikację funkcyjną.

az containerapp create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $CONTAINER_APP_NAME \
  --environment $ENVIRONMENT_NAME \
  --image mcr.microsoft.com/k8se/quickstart-functions:latest \
  --ingress external \
  --target-port 80 \
  --kind functionapp \
  --query properties.outputs.fqdn

To polecenie zwraca adres URL Twojej aplikacji funkcyjnej. Skopiuj ten adres URL i wklej go w przeglądarce internetowej.

W portalu Azure wybierz opcję Optymalizacja dla Azure Functions podczas tworzenia aplikacji kontenerowej, aby użyć konfiguracji Azure Functions.

Zrzut ekranu portalu Azure podczas tworzenia wstępnie skonfigurowanej aplikacji kontenerowej dla Azure Functions.

Obsługiwane są wszystkie standardowe metody wdrażania, w tym:

Aby uzyskać szczegółowe instrukcje i przykłady, zapoznaj się z oficjalną dokumentacją wprowadzającą.

Ceny i rozliczenia

Funkcje Azure na Azure Container Apps korzystają z tego samego modelu cenowego co Azure Container Apps. Rozliczenia są oparte na typie planu wybranym dla danego środowiska, który może być typem Zużycia lub Dedykowanym.

  • Plan zużycia: ta bezserwerowa opcja obliczeniowa rozlicza tylko za zasoby używane przez aplikacje podczas ich działania.
  • Dedykowany plan: ta opcja zapewnia dostosowane zasoby obliczeniowe, rozliczanie wystąpień przydzielonych do każdego profilu obciążenia.

Wybór planu określa sposób wykonywania obliczeń rozliczeniowych. Różne aplikacje w środowisku mogą używać różnych planów.

Szczegóły rozliczeń:

  • Brak dodatkowych opłat za korzystanie z modelu programowania Azure Functions w usłudze Container Apps.
  • Durable Functions i inne zaawansowane wzorce są obsługiwane i rozliczane w ramach tego samego modelu cen usługi Container Apps. Szczegółowe informacje dotyczące mechaniki rozliczeń i przykładów można znaleźć w dokumentacji Billing w Azure Container Apps.

Skalowanie oparte na zdarzeniach

Azure Functions on Container Apps obsługuje wszystkie główne środowiska uruchomieniowe dostępne w Azure Functions, w tym C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell oraz niestandardowe kontenery (przynieś własny obraz).

Usługi Azure Functions działające w usłudze Azure Container Apps automatycznie konfigurują reguły skalowania na podstawie źródła zdarzeń, eliminując konieczność ręcznego definiowania reguł skalowania KEDA w domyślnej konfiguracji. Dlatego przycisk "Dodaj reguły skalowania" w portalu Azure jest wyłączony dla usługi Functions w usłudze Container Apps. Jednak nadal można zdefiniować minimalną i maksymalną liczbę replik, aby ustanowić granice skalowania i zachować kontrolę nad alokacją zasobów.

Jeśli musisz podać własne reguły skalowania, możesz zrezygnować z reguł generowanych przez platformę przy użyciu polecenia allowScalingRuleOverride. Aby uzyskać więcej informacji, zobacz Zastępowanie automatycznie generowanych reguł skalowania KEDA dla usługi Azure Functions w usłudze Container Apps.

Platforma automatycznie tłumaczy parametry wyzwalania funkcji (z atrybutów konfiguracji lub wyzwalania host.json) na odpowiednie parametry skalera KEDA. Aby uzyskać szczegółowe informacje na temat mapowania konfiguracji wyzwalania Azure Functions na parametry skalowania KEDA, zobacz Azure Functions KEDA scaling mappings.

Wszystkie standardowe wyzwalacze i powiązania Azure Functions są obsługiwane w usłudze Container Apps z następującymi wyjątkami:

Tożsamości zarządzane są obsługiwane w przypadku wyzwalaczy i powiązań, które to umożliwiają. Są one również dostępne dla:

W przypadku nieobsługiwanych wyzwalaczy użyj stałych liczników replik (tj. ustaw wartość minReplicas > 0) w Azure Functions na Azure Container Apps. Aby uzyskać więcej informacji, zobacz Przewodnik dla deweloperów usługi Functions.

Skalowanie i wydajność

Azure Functions na platformie Container Apps są domyślnie automatycznie skalowane na podstawie zdarzeń za pomocą KEDA. Nadal można ustawić minimalną/maksymalną liczbę replik, aby kontrolować zachowanie skalowania. Można również użyć allowScalingRuleOverride, aby definiować niestandardowe reguły skalowania.

  • Skalowanie oparte na zdarzeniach: automatyczne skalowanie na podstawie wyzwalaczy, takich jak Event Grid, Service Bus lub HTTP.
  • Skalowanie do zera: bezczynne aplikacje są skalowane do zera, aby zaoszczędzić koszty.
  • Kontrola zimnego startu: Dowiedz się, jak zmniejszyć czas zimnego startu na Azure Container Apps.
  • Współbieżność: każde wystąpienie może przetwarzać wiele zdarzeń równolegle.
  • Skalowanie na dużą skalę: skalowanie w poziomie do 1000 wystąpień na aplikację (wartość domyślna to 10).
  • Obsługa procesora GPU: uruchamianie obciążeń wymagających obliczeń, takich jak wnioskowanie sztucznej inteligencji przy użyciu węzłów opartych na procesorze GPU.

Dzięki temu usługa Container Apps jest idealna zarówno w przypadku obciążeń nagłych, jak i obciążeń ze stałym stanem. Aby dowiedzieć się więcej, zobacz Ustawianie reguł skalowania w Azure Container Apps

Sieć i zabezpieczenia

Azure Functions on Container Apps wykorzystuje funkcje sieciowe i bezpieczeństwa Container Apps:

  • Integracja z siecią wirtualną: bezpieczne uzyskiwanie dostępu do zasobów prywatnych za pośrednictwem wewnętrznych punktów końcowych i prywatnych baz danych.
  • Tożsamość zarządzana: Uwierzytelniaj się za pomocą usług Azure, używając tożsamości przypisanych przez system lub użytkowników. Nie musisz zarządzać sekretami ani łańcuchami połączeń.
  • Obsługa Dapr: włącz pub/sub, zarządzanie stanem i bezpieczne wywoływanie usług za pomocą sidecarów Dapr. Aby uzyskać więcej informacji, zobacz Interfejsy API mikrousług obsługiwane przez język Dapr.
  • Wejście i TLS: Udostępniaj bezpieczne punkty końcowe HTTP przy użyciu TLS/mTLS, domen niestandardowych lub zachowaj je wewnętrzne.
  • Izolacja środowiska: Funkcje dzielą granice środowiska Container Apps dla bezpiecznej, ograniczonej komunikacji.

Monitorowanie i rejestrowanie

Azure Functions on Container Apps integruje się z narzędziami Azure observability do śledzenia wydajności i diagnozy problemów:

  • Application Insights: Udostępnia telemetrię dla żądań, zależności, wyjątków i niestandardowych śladów. Aby uzyskać więcej informacji, zobacz Monitor Azure Functions.
  • Log Analytics: Rejestruje cykl życia kontenera oraz zdarzenia skalowania, takie jak FunctionsScalerInfo wpisy. Więcej informacji można znaleźć w artykule Application loging in Azure Container Apps.
  • Rejestrowanie niestandardowe: Obsługuje standardowe struktury, takie jak ILogger i rejestrowanie konsoli dla danych wyjściowych ze strukturą.
  • Scentralizowane monitorowanie: Środowisko Container Apps oferuje ujednolicone pulpity nawigacyjne i alerty we wszystkich aplikacjach.

Zmienne środowiskowe

Azure Functions uruchomione w usłudze Container Apps mają dostęp do zmiennych środowiskowych udostępnianych przez system. Zmienna środowiskowa CONTAINER_NAME jest automatycznie ustawiana na nazwę repliki dla aplikacji funkcji. Używaj tej zmiennej do logowania, korelacji i debugowania w scenariuszu multireplica.

Aby uzyskać pełną listę zmiennych środowiskowych dostarczanych przez system, zobacz Zmienne środowiskowe w aplikacjach Azure Container.

Rozważania

Podczas korzystania z Azure Functions w Azure Container Apps należy pamiętać o innych kwestiach:

  • Wymóg wejścia do automatycznego skalowania: Aby umożliwić automatyczne skalowanie na podstawie zdarzeń, należy włączyć wejście, publicznie lub w wewnętrznym środowisku Container Apps.
  • Konto obowiązkowe przechowywanie: Każda aplikacja funkcjonalna wdrożona w Container Apps musi być powiązana z kontem pamięci. To konto magazynowe zarządza wyzwalaczami, logami i stanem. Zapoznaj się ze wskazówkami dotyczącymi konta magazynu , aby uzyskać najlepsze rozwiązania.
  • Magazyn z wieloma poprawkami: podczas wdrażania z wieloma aktywnymi poprawkami przypisz dedykowane konto magazynu do każdej poprawki. Użycie dedykowanego konta przechowywania pomaga zapobiegać konfliktom i zapewnia właściwą izolację. Alternatywnie, jeśli nie potrzebujesz równoczesnych poprawek, rozważ użycie domyślnego trybu pojedynczej poprawki w celu uproszczonego zarządzania.
  • Wyzwalacze wielowersyjne: jeśli używasz trybu wielowersyjnego z wyzwalaczem opartym na ściąganiu, użyj innego źródła zdarzeń dla każdej wersji, aby uniknąć konfliktów związanych z konkurencyjnymi konsumentami. Funkcje korzystające z wyzwalaczy Azure Queue Storage, Azure Event Hubs, Azure Service Bus lub Durable Functions to przykłady wyzwalaczy opartych na ściąganiu.
  • Opóźnienie zimnego startu: Gdy aplikacja kontenerowa jest skalowana do zera w okresach bezczynności, pierwsze żądanie po tym okresie doświadcza zimnego startu. Dowiedz się więcej na temat zmniejszania czasów uruchamiania na zimno.
  • Integracja z Application Insights: Aby monitorować i diagnozować aplikację funkcjonalną, połącz ją z Application Insights. Więcej informacji można znaleźć w integracji Application Insights z funkcjami.
  • Proxy funkcji: nieobsługiwane. W przypadku scenariuszy korzystania z bramy API, zamiast tego integracja powinna odbywać się z Azure API Management.
  • Miejsca wdrożenia: miejsca przejściowe i produkcyjne nie są dostępne. Używaj strategii niebiesko-zielonego wdrażania dla wdrożeń bez przestojów.
  • Klucze dostępu do usługi Functions: generowanie kluczy dostępu usługi Functions za pomocą portalu nie jest obsługiwane. Rozważ użycie Azure Key Vault do przechowywania kluczy. Możesz również użyć następujących opcji, aby zabezpieczyć punkty końcowe HTTP w środowisku produkcyjnym:
  • Limity przydziału i zasobów: środowiska usługi Container Apps mają domyślne limity dotyczące pamięci, procesora CPU i liczby wystąpień na region. Aby uzyskać więcej informacji, zobacz limity środowiska i domyślne limity przydziału. Jeśli obciążenie wymaga większej ilości zasobów, możesz zażądać zwiększenia limitu przydziału.
  • Konfigurowanie reguły skalowania ręcznego: W portalu Azure przycisk "Dodaj reguły skalowania" jest wyłączony dla Azure Functions hostowanych w aplikacjach Container Apps, ponieważ reguły skalowania są konfigurowane automatycznie na podstawie źródła zdarzeń. Ręczne definicje reguł KEDA nie są wymagane w tej konfiguracji.

Prześlij opinię

Prześlij problem lub żądanie funkcji do repozytorium Azure Container Apps GitHub.

Następne kroki / dalsze zasoby

Aby kontynuować naukę i tworzenie z Azure Functions w Container Apps, zapoznaj się z następującymi zasobami: