Azure Functions på Azure Container Apps: en översikt

Azure Functions på Azure Container Apps erbjuder en fullt hanterad serverlös värdmiljö som kombinerar de händelsedrivna funktionerna i Azure Functions med Container Apps-funktioner. Dessa funktioner inkluderar Kubernetes-baserad orkestrering, inbyggd autoskalning som drivs av Kubernetes Event-driven Autoscaling (KEDA), Dapr-integration, GPU-arbetsbelastningsstöd, sidecar-stöd, virtuell nätverksanslutning (VNet) och versionshantering.

Detta tillvägagångssätt är användbart när du vill att dina funktioner ska köras parallellt med andra containeriserade appar som mikrotjänster, API:er eller webbplatser. Att containerisera dina funktionsappar kan också hjälpa när du behöver anpassade beroenden eller vill skala till noll för att minska kostnaderna. För datortunga uppgifter som AI-inferens stödjer Container Apps GPU-baserad hosting via serverlösa GPU:er och dedikerade arbetsbelastningsprofiler.

Som en integrerad funktion i Azure Container Apps kan du distribuera Azure Functions containerbilder direkt till Azure Container Apps genom att använda Microsoft.App resursleverantören och inställningen kind=functionapp när du anropar az containerapp create. Appar som skapats på det här sättet har åtkomst till alla Azure Container Apps funktioner. I Azure-portalen, välj alternativet Optimera för Azure Functions under installationen. För mer information, se Distribution och installation.

Viktiga fördelar

Värdmodellen Container Apps bygger på flexibiliteten hos containerbaserade arbetsbelastningar och den händelsedrivna karaktären hos Azure Functions. Det ger följande viktiga fördelar:

Följande tabell hjälper dig att jämföra funktionerna i Funktioner på Container Apps med Flex Consumption-planen.

Feature Containerapplikationer Flex-förbrukningsplan
Skala till noll ✅ Ja (via KEDA) ✅ Ja
Maximal utskalning 1 000 (standard 10, kan konfigureras) 1 000
Ständigt på-instanser ✅ Ja (via minReplicas) ✅ Ja (via alltid redo instanser)
VNET-integrering ✅ Ja ✅ Ja
Stöd för anpassad container ✅ Ja (ta med din egen bild) ❌ Begränsad (ingen ta med din egen behållare)
GPU-stöd ✅ Ja (via serverlös GPU-dedikerad arbetsbelastningsprofil) ❌ Nej
Inbyggda funktioner Funktionsstöd för Container Apps. Till exempel KEDA, Dapr, multirevisioner, mTLS, sidovagnar, ingresskontroll med mera Endast funktioner
Faktureringsmodell Prissättning för Container Apps: Förbrukningsplan (vCPU, minne, begäranden) och dedikerad plan (arbetsbelastningsprofilbaserad) Körningstid + alltid redo instanser

En fullständig jämförelse av Functions on Container Apps mot Flex Consumption Plan och alla andra plan- och värdtyper finns i Skalnings- och värdalternativ för Functions.

Scenarier

Azure Functions i Container Apps är idealiska för en mängd olika användningsfall, särskilt när du behöver händelsedriven körning, containerflexiering eller säker integrering med andra tjänster:

  • Verksamhets-API:er: Paketera anpassade bibliotek, paket och API:er med Azure Functions för linjeverksamhetsprogram.
  • Migration och modernisering: Migrering av lokala äldre och/eller monolitapplikationer till molnbaserade mikrotjänster på containrar.
  • Händelsestyrd bearbetning: Hantera händelser från Event Grid, Service Bus, Event Hubs och andra händelsekällor genom att använda Azure Functions-programmeringsmodellen.
  • AI- och GPU-arbetsbelastningar: Bearbeta videor, bilder, transkriptioner och andra beräkningsintensiva arbetsbelastningar som kräver GPU-resurser. Mer information finns i Använda serverlösa GPU:er i Azure Container Apps.
  • Microservices: Integrera Azure Functions med andra Container Apps-värdbaserade tjänster.
  • Anpassade containrar: Paketfunktioner med anpassade körnings- eller sidovagnar.
  • Privata appar: Skydda interna funktioner med hjälp av VNet och intern ingress.
  • .NET Aspire: Integreringen av .NET Aspire med Azure Functions gör att du kan utveckla, felsöka och samordna ett Azure Functions .NET projekt som en del av .NET Aspire appvärd. Läs mer om Azure Functions med .NET Aspire
  • General Functions: Kör alla standardscenarier som stöds Azure Functions (till exempel timers, filbearbetning, databasutlösare).

Distribution och installation

För att distribuera Azure Functions på Azure Container Apps, paketera din funktionsapp som en anpassad containeravbildning och distribuera den som vilken annan containerapp som helst med en viktig skillnad. Ställ in egenskapen kind=functionapp när du använder Azure CLI, Azure Resource Manager-mallarna eller Bicep. För detaljerade steg och exempel, se Skapa en funktionsapp.

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

Detta kommando returnerar URL:en till din funktionsapp. Kopiera den här URL:en och klistra in den i en webbläsare.

I Azure-portalen, välj alternativet Optimera för Azure Functions under skapandet av containerappen för att använda Azure Functions-konfigurationen.

Screenshot i Azure-portalen när du skapar en containerapp som är förkonfigurerad för Azure Functions.

Alla standarddistributionsmetoder stöds, inklusive:

Detaljerade steg och exempel finns i den officiella komma igång-dokumentationen.

Prissättning och fakturering

Azure Functions på Azure Container Apps följer samma prismodell som Azure Container Apps. Faktureringen baseras på den plantyp du väljer för din systemmiljö, vilket kan vara antingen förbrukningsbaserad eller dedikerad.

  • Förbrukningsplan: Det här serverlösa beräkningsalternativet debiterar dig endast för de resurser som dina appar använder när de körs.
  • Dedikerad plan: Det här alternativet innehåller anpassade beräkningsresurser och fakturering för de instanser som allokerats till varje arbetsbelastningsprofil.

Ditt val av plan avgör hur faktureringsberäkningar görs. Olika program i en miljö kan använda olika planer.

Faktureringsdetaljer:

  • Inga extra avgifter för att använda programmeringsmodellen Azure Functions i Container Apps.
  • Durable Functions och andra avancerade mönster stöds och faktureras under samma prismodell för Container Apps. Detaljerade faktureringsmekanik och exempel finns i dokumentationen Fakturering i Azure Container Apps.

Händelsebaserad skalning

Azure Functions on Container Apps stöder alla större språkkörningar som är tillgängliga i Azure Functions, inklusive C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell och anpassade containrar (använd egen avbildning).

Azure Functions som körs i Azure Container Apps konfigurerar automatiskt skalningsregler baserat på händelsekällan, vilket eliminerar behovet av manuella definitioner av KEDA-skalningsregler i standardupplevelsen. Därför är knappen "Lägg till skalningsregler" på Azure-portalen inaktiverad för Functions i Container Apps. Du kan dock fortfarande definiera minsta och högsta antal repliker för att upprätta skalningsgränser och behålla kontrollen över resursallokering.

Om du behöver ange egna skalningsregler kan du välja bort plattformsgenererade regler med hjälp allowScalingRuleOverrideav . Mer information finns i Åsidosätt automatiskt genererade KEDA-skalningsregler för Azure Functions på Container Apps.

Plattformen översätter automatiskt dina Functions-utlösarparametrar (från host.json konfigurations- eller utlösarattribut) till lämpliga KEDA-skalningsparametrar. En detaljerad referens för hur Funktionsutlösarkonfigurationer mappas till KEDA-skalningsparametrar finns i Azure Functions KEDA-skalningsmappningar.

Alla standard Azure Functions utlösare och bindningar stöds i Container Apps med följande undantag:

  • Blob Storage Automatisk skalning av utlösare: Fungerar bara när du använder Event Grid som källa. Lär dig mer om att utlösa Azure Functions på blobcontainrar med en händelseprenumeration
  • Durable Functions autoskalning: Stöder endast lagringsleverantörer för Microsoft SQL Server och Durable Task Scheduler. För mer information, se Deploy Durable Functions with SQL Server.
  • Autoskalning stöds inte för:
    • Azure Cache for Redis
    • Azure SQL

Hanterade identiteter stöds för utlösare och bindningar som tillåter det. De är också tillgängliga för:

För utlösare som inte stöds använder du fasta antal repliker (dvs. ange minReplicas > 0) i Azure Functions på Azure Container Apps. Mer information finns i utvecklarhandboken för Functions.

Skalning och prestanda

Azure Functions i Container Apps skalas automatiskt baserat på händelser som använder KEDA som standard. Du kan fortfarande ange min/max-repliker för att styra skalningsbeteendet. Du kan också använda allowScalingRuleOverride för att tillhandahålla anpassade skalningsregler.

  • Event-driven skalning: Skalar automatiskt baserat på utlösare som Event Grid, Service Bus eller HTTP.
  • Skala till noll: Inaktiva appar skalar in till noll för att spara kostnader.
  • Cold startkontroll: Läs mer om hur du minskar kallstartstiden på Azure Container Apps.
  • Samtidighet: Varje instans kan bearbeta flera händelser parallellt.
  • Hög skala: Skala ut till 1 000 instanser per app (standardvärdet är 10).
  • GPU-stöd: Kör beräkningsintensiva arbetsbelastningar som AI-slutsatsdragning med GPU-backade noder.

Detta gör Container Apps lämpliga för både tillfälliga och kontinuerliga arbetsbelastningar. Mer information finns under Skalningsregler i Azure Container Apps

Nätverk och säkerhet

Azure Functions på Container Apps använder Container Apps nätverks- och säkerhetsfunktioner:

  • VNet-integrering: Få säker åtkomst till privata resurser via interna slutpunkter och privata databaser.
  • Hanterad identitet: Autentisera med Azure-tjänster genom att använda systemtilldelade eller användar-tilldelade identiteter. Du behöver inte hantera hemligheter eller anslutningssträngar.
  • Dapr-stöd: Aktivera pub/sub, tillståndshantering och säkra tjänstanrop via Dapr-sidecars. Mer information finns i Mikrotjänst-API:er som drivs av Dapr.
  • Ingress och TLS: Exponera säkra HTTP-slutpunkter med TLS/mTLS, anpassade domäner eller håll dem interna.
  • Miljöisolering: Funktioner delar Container Apps miljögränser för säker, begränsad kommunikation.

Övervakning och loggning

Azure Functions on Container Apps integreras med Azure-observabilitetsverktyg för prestandaspårning och problemdiagnostik:

  • Application Insights: Tillhandahåller telemetri för begäranden, beroenden, undantag och anpassade spårningar. Mer information finns i Övervaka Azure Functions.
  • Log Analytics: Fångar containerlivscykel och skalningshändelser, såsom FunctionsScalerInfo poster. För mer information, se Application logging i Azure Container Apps.
  • Anpassad loggning: Stöder standardramverk som ILogger och konsolloggning för strukturerade utdata.
  • Centraliserad övervakning: Container Apps-miljön erbjuder enhetliga instrumentpaneler och aviseringar i alla appar.

Miljövariabler

Azure Functions som körs i Container Apps har åtkomst till miljövariabler som tillhandahålls av systemet. Miljövariabeln CONTAINER_NAME anges automatiskt till repliknamnet för funktionsappen. Använd denna variabel för loggning, korrelation och felsökning i multireplika-scenarier.

En fullständig lista över miljövariabler som tillhandahålls av systemet finns i Environment-variabler i Azure Container Apps.

Överväganden

Tänk på följande när du använder Azure Functions på Azure Container Apps:

  • Ingresskrav för autoskalning: För att möjliggöra automatisk skalning baserat på händelser, aktivera ingång, antingen offentligt eller inom Container Apps interna miljö.
  • Obligatoriskt lagringskonto: Varje funktionsapp som distribueras på Container Apps måste vara kopplad till ett lagringskonto. Detta lagringskonto hanterar triggers, loggar och tillstånd. Se vägledningen för lagringskontot för bästa praxis.
  • Lagring med flera revisioner: När du distribuerar med flera aktiva revisioner tilldelar du ett dedikerat lagringskonto till varje revision. Genom att använda ett dedikerat lagringskonto kan du förhindra konflikter och säkerställa korrekt isolering. Om du inte behöver samtidiga revisioner kan du också överväga att använda standardläget för enkel revision för förenklad hantering.
  • Utlösare för flera revisioner: Om du använder läget för flera revisioner med en pull-baserad utlösare använder du en annan händelsekälla för varje revision för att undvika konflikter relaterade till konkurrerande konsumenter. Funktioner som använder utlösare Azure Queue Storage, Azure Event Hubs, Azure Service Bus eller Durable Functions är exempel på pull-baserade utlösare.
  • Svarstid för kallstart: När containerappen skalar in till noll under inaktiva perioder får den första begäran efter inaktivitet en kall start. Läs mer om att minska kalla starttider.
  • Application Insights-integration: För att övervaka och diagnostisera din funktionsapp, koppla den till Application Insights. För mer information, se Application Insights-integration med Functions.
  • Funktionsproxy: Stöds inte. För API Gateway-scenarier kan du integrera med Azure API Management i stället.
  • Distributionsplatser: Mellanlagrings- och produktionsfack är inte tillgängliga. Använd blågröna distributionsstrategier för noll stilleståndstidsutgåvor.
  • Funktionsåtkomstnycklar: Det går inte att använda portalen för att generera functions-åtkomstnycklar. Överväg att använda Azure Key Vault för att lagra nycklar. Du kan också använda följande alternativ för att skydda HTTP-slutpunkter i produktion:
  • Kvot- och resursgränser: Container Apps-miljöer har standardgränser för antal minnes-, PROCESSOR- och instanser per region. Mer information finns i miljögränser och standardkvoter. Om din arbetsbelastning kräver mer resurser kan du begära en kvotökning.
  • Manual scale rule configuration: Knappen Lägg till skalningsregler på Azure-portalen är inaktiverad för Azure Functions som finns i Container Apps eftersom skalningsregler konfigureras automatiskt baserat på händelsekällan. Manuella KEDA-regeldefinitioner krävs inte i den här konfigurationen.

Skicka feedback

Skicka ett problem eller en funktionsbegäran till Azure Container Apps GitHub-lagringsplatsen.

Nästa steg/ytterligare resurser

Om du vill fortsätta att lära dig och skapa med Azure Functions i Container Apps kan du utforska följande resurser: