Freigeben über


Übersicht über Azure Functions in Azure Container Apps

Azure Functions auf Azure Container Apps bietet eine vollständig verwaltete serverlose Hostingumgebung, die die ereignisgesteuerten Funktionen von Azure Functions mit den robusten Features von Container-Apps zusammenführt. Diese Integration umfasst erweiterte Funktionen wie Kubernetes-basierte Orchestrierung, integrierte automatische Skalierung, die von KEDA (Kubernetes-based Event Driven Autoscaling), Dapr (Distributed Application Runtime)-Integration, GPU-Workloadunterstützung, Sidecar-Unterstützung, VNet-Konnektivität (Virtual Network) und Revisionsmanagement unterstützt wird.

Dieser Ansatz ist nützlich, wenn Ihre Funktionen zusammen mit anderen containerisierten Apps wie Microservices, APIs oder Websites ausgeführt werden sollen. Darüber hinaus kann die Containerisierung Ihrer Funktions-Apps hilfreich sein, wenn Sie benutzerdefinierte Abhängigkeiten benötigen oder die Vorteile von Scale-to-Zero nutzen möchten, um Kosteneinsparungen zu erzielen. Wenn Sie rechenintensive Aufgaben wie KI-Ableitungen ausführen, unterstützt Container-Apps auch GPU-basiertes Hosting über serverlose GPU-Angebote und dedizierte Workloadprofile.

Als integriertes Feature für Azure Container Apps können Sie Azure Functions Images direkt auf Azure Container Apps mithilfe des Microsoft.App-Ressourcenanbieters bereitstellen, indem Sie kind=functionapp beim Aufrufen von az containerapp create festlegen. Auf diese Weise erstellte Apps haben Zugriff auf alle Azure Container Apps Features. Wenn Sie die Bereitstellung über Azure Portal durchführen, können Sie die Option Optimize for Functions app während des Setups aktivieren. Weitere Informationen finden Sie im Abschnitt "Bereitstellung und Einrichtung".

Hauptvorteile

Das Container-Apps-Hostingmodell basiert auf der Flexibilität von containerisierten Workloads und der ereignisgesteuerten Art von Azure Functions. Es bietet die folgenden wichtigsten Vorteile:

In der folgenden Tabelle können Sie die Funktionen in Container-Apps mit dem Flex-Verbrauchsplan vergleichen.

Merkmal Container-Anwendungen Flex-Verbrauchsplan
Skalierung bis Null ✅ Ja (über KEDA) ✅ Ja
Max. horizontale Skalierung 1.000 (Standard 10, konfigurierbar) 1.000
Always On-Instanzen ✅ Ja (via minReplicas) ✅ Ja (über jederzeit bereite Instanzen)
VNet-Integration ✅ Ja ✅ Ja
Benutzerdefinierte Containerunterstützung ✅ Ja (Bringen Sie Ihr eigenes Bild) ❌ Begrenzt (kein Eigener Container mitbringen)
GPU-Unterstützung ✅ Ja (über serverloses, dediziertes GPU-Workload-Profil) ❌ Nein
Integrierte Features Container-Apps-Unterstützung. Zum Beispiel KEDA, Dapr, Multirevisionen, mTLS, Sidecars, Eingangssteuerung und mehr Funktionenspezifische Merkmale
Abrechnungsmodell Preise für Container-Apps: Verbrauchsplan (vCPU, Speicher, Anfragen) und Dedizierter Plan (auf dem Workload-Profil basierend) Ausführungszeit + stets bereite Instanzen

Einen vollständigen Vergleich der Funktionen für Container-Apps mit dem Flex-Verbrauchsplan und allen anderen Plan- und Hostingtypen finden Sie unter "Skalierungs- und Hostingoptionen für Funktionen".

Szenarien

Azure Functions für Container-Apps eignen sich ideal für eine breite Palette von Anwendungsfällen, insbesondere, wenn Sie ereignisgesteuerte Ausführung, Containerflexibilität oder sichere Integration in andere Dienste benötigen:

  • Line-of-Business-APIs: Verpacken benutzerdefinierter Bibliotheken, Pakete und APIs mit Azure Functions für Branchenanwendungen.
  • Migration und Modernisierung: Migration von lokalen Legacy- und/oder Monolithanwendungen zu cloudeigenen Microservices für Container.
  • Event-driven processing: Behandeln von Ereignissen aus Event Grid, Service Bus, Event Hubs und anderen Ereignisquellen mit dem einfachen Functions-Programmiermodell.
  • AI - GPU-Workloads: Serverlose Workloadverarbeitung von Videos, Bildern, Transkriptionen oder anderen verarbeitungsintensiven Aufgaben, die GPU-Computeressourcen erfordern. Weitere Informationen finden Sie unter Using serverless GPUs in Azure Container Apps.
  • Microservices: Integrieren Sie Azure Functions mit anderen in Container-Apps gehosteten Diensten.
  • Benutzerdefinierte Container: Paketfunktionen mit benutzerdefinierten Laufzeiten oder Sidecars.
  • Privat-Apps: Sichern Sie interne Funktionen nur mithilfe von VNet und internem Ingress.
  • .NET Aspire: Durch die Integration von .NET Aspire mit Azure Functions können Sie ein Azure Functions .NET Projekt als Teil des .NET Aspire App-Hosts entwickeln, debuggen und koordinieren. Weitere Informationen zu Azure Functions mit .NET Aspire
  • General Functions: Führen Sie alle unterstützten Standardszenarien Azure Functions szenarien aus (z. B. Timer, Dateiverarbeitung, Datenbanktrigger).

Bereitstellung und Einrichtung

Um Azure Functions auf Azure Container Apps bereitzustellen, verpacken Sie Ihre Funktionen-App als benutzerdefiniertes Containerimage und stellen sie wie jede andere Container-App mit einem wichtigen Unterschied bereit. Sie müssen die eigenschaft kind=functionapp festlegen, wenn Sie die vorlagen Azure CLI oder ARM/Bicep verwenden. Ausführliche Schritte und Beispiele finden Sie in der offiziellen Dokumentation zu den ersten Schritten.

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

Dieser Befehl gibt die URL Ihrer Funktionen-App zurück. Kopieren Sie diese URL, und fügen Sie sie in einen Webbrowser ein.

Wählen Sie im Azure-Portal die Option Optimize für Azure Functions während der Container-App-Erstellung aus, um das Setup zu optimieren.

Screenshot des Azure-Portals, wenn Sie eine für Azure Functions vorkonfigurierte Container-App erstellen.

Alle Standardbereitstellungsmethoden werden unterstützt, einschließlich:

Ausführliche Schritte und Beispiele finden Sie in der offiziellen Dokumentation zu den ersten Schritten.

Preise und Abrechnung

Azure Functions in Azure Container Apps folgen demselben Preismodell wie Azure Container Apps. Die Abrechnung basiert auf dem Plantyp, den Sie für Ihre Umgebung auswählen, und dieser kann entweder „Verbrauch“ oder „Dediziert“ sein.

  • Verbrauchsplan: Diese serverlose Berechnungsoption berechnet Sie nur für die Ressourcen, die Ihre Apps während der Ausführung verwenden.
  • Dedizierter Plan: Diese Option stellt angepasste Rechenressourcen bereit und berechnet Ihnen die Kosten für die Instanzen, die den jeweiligen Workload-Profilen zugewiesen sind.

Ihre Wahl des Plans bestimmt, wie Abrechnungsberechnungen vorgenommen werden. Unterschiedliche Anwendungen in einer Umgebung können unterschiedliche Pläne verwenden.

Wichtige Punkte zu beachten:

  • Keine zusätzlichen Gebühren für die Verwendung des Azure Functions Programmiermodells innerhalb von Container-Apps.
  • Durable Functions und andere erweiterte Muster werden unter dem gleichen Preismodell für Container-Apps unterstützt und in Rechnung gestellt. Ausführliche Abrechnungsmechaniken und Beispiele finden Sie in der Dokumentation Billing in Azure Container Apps.

Ereignisgesteuerte Skalierung

Azure Functions für Container-Apps unterstützen alle wichtigen Sprachlaufzeiten, die in Azure Functions verfügbar sind, einschließlich C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell und benutzerdefinierter Container (bring your own image).

Azure Functions, die auf Azure Container Apps ausgeführt werden, konfigurieren Skalierungsregeln automatisch basierend auf der Ereignisquelle, wodurch die Notwendigkeit manueller KEDA-Skalierungsregeldefinitionen entfällt. Aus diesem Grund ist die Schaltfläche "Skalierungsregeln hinzufügen" im Azure Portal für Funktionen in Container-Apps deaktiviert. Sie können jedoch weiterhin mindeste und maximale Replikatanzahl definieren, um Skalierungsgrenzen festzulegen und die Kontrolle über die Ressourcenzuordnung zu behalten.

Die Plattform übersetzt automatisch die Parameter Ihrer Functions Trigger (aus der host.json-Konfiguration oder den Trigger-Attributen) in die entsprechenden KEDA-Skalierungsparameter. Eine ausführliche Referenz zur Zuordnung von Funktionentriggerkonfigurationen zu KEDA-Skalierungsparametern finden Sie unter Azure Functions KEDA-Skalierungszuordnungen.

Alle Standard-Azure Functions Trigger und Bindungen werden unterstützt in Container-Apps mit folgenden ausnahmen:

  • Blob Storage Automatische Skalierung auslösen: Funktioniert nur bei Verwendung des Ereignisrasters als Quelle. Erfahren Sie mehr über das Auslösen von Azure-Funktionen für Blob-Container durch ein Ereignisabonnement
  • Durable Functions automatische Skalierung: Unterstützt nur die Speicheranbieter MSSQL (Microsoft SQL Server) und DTS (Durable Task Scheduler). Weitere Anleitungen zur Bereitstellung dauerhafter Funktionen mit MSSQL
  • Die automatische Skalierung wird für Folgendes nicht unterstützt:
    • Azure Cache for Redis
    • Azure SQL

Verwaltete Identitäten werden für Trigger und Bindungen unterstützt, die sie zulassen. Sie stehen auch zur Verfügung für:

Verwenden Sie für nicht unterstützte Trigger feste Replikatanzahlen (d. h. minReplicas > 0) in Azure Functions für Azure Container Apps. Weitere Informationen finden Sie im Entwicklerhandbuch für Funktionen.

Skalierung und Leistung

Azure Functions für Container-Apps wird automatisch basierend auf Ereignissen mit KEDA skaliert, ohne dass Skalierungsregeln manuell konfiguriert werden müssen. Sie können weiterhin Min/Max-Replikate festlegen, um das Skalierungsverhalten zu steuern.

  • Event-gesteuerte Skalierung: Skaliert automatisch basierend auf Triggern wie Ereignisraster, Service Bus oder HTTP.
  • Skalierung auf Null: Leerlauf-Apps werden auf Null skaliert, um Kosten zu sparen.
  • Cold-Start-Kontrolle: Erfahren Sie mehr über die Reduzierung der Kaltstartzeit bei Azure Container Apps.
  • Parallelität: Jede Instanz kann mehrere Ereignisse parallel verarbeiten.
  • Hohe Skalierung: Skalieren auf 1.000 Instanzen pro App (Standard ist 10).
  • GPU-Unterstützung: Führen Sie rechenintensive Workloads wie KI-Ableitungen mithilfe von GPU-unterstützten Knoten aus.

Dadurch eignen sich Container-Apps sowohl für Workloads mit Spitzenauslastung als auch für solche mit gleichbleibender Auslastung. Weitere Informationen finden Sie unter Skalierungsregeln festlegen in Azure Container Apps.

Netzwerke und Sicherheit

Azure Functions auf Container Apps profitieren von den robusten Netzwerk- und Sicherheitsfunktionen für sichere, skalierbare Bereitstellungen.

  • VNet-Integration: Greifen Sie über interne Endpunkte und private Datenbanken sicher auf private Ressourcen zu.
  • Managed identity: Authentifizieren Sie sich mit Azure-Diensten mithilfe von system-/benutzerzugewiesenen Identitäten – es sind keine Geheimnisse oder Verbindungszeichenfolgen erforderlich.
  • Dapr-Unterstützung: Aktivieren Sie Veröffentlichen/Abonnieren, Zustandsverwaltung und sichere Dienstaufrufe über Dapr-Sidecars. Weitere Informationen finden Sie unter Microservice-APIs, die von Dapr unterstützt werden.
  • Ingress und TLS: Machen Sie sichere HTTP-Endpunkte mit TLS/mTLS, benutzerdefinierten Domänen verfügbar oder halten Sie sie intern.
  • Umgebungsisolation: Funktionen teilen Container-Apps-Umgebungsgrenzen für sichere, bereichsbezogene Kommunikation.

Diese Funktionen machen container-apps-gehostete Funktionen ideal für sichere serverlose Anwendungen auf Unternehmensniveau.

Überwachung und Protokollierung

Azure Functions für Container-Apps lassen sich nahtlos in die Observability-Tools von Azure für die Leistungsnachverfolgung und Problemdiagnose integrieren:

  • Application Insights: Stellt Telemetrie für Anforderungen, Abhängigkeiten, Ausnahmen und benutzerdefinierte Ablaufverfolgungen bereit. Weitere Informationen finden Sie unter Monitor Azure Functions.
  • Protokollanalyse: Erfasst Containerlebenszyklus- und Skalierungsereignisse (z. B. FunctionsScalerInfo-Einträge). Weitere Informationen finden Sie unter Application Logging in Azure Container Apps.
  • Benutzerdefinierte Protokollierung: Unterstützt Standardframeworks wie ILogger und Konsolenprotokollierung für strukturierte Ausgabe.
  • Zentrale Überwachung: Container-Apps-Umgebung bietet einheitliche Dashboards und Warnungen für alle Apps.

Umgebungsvariablen

Azure Functions, die auf Container-Apps laufen, haben Zugriff auf vom System bereitgestellte Umgebungsvariablen. Die Umgebungsvariable CONTAINER_NAME wird automatisch auf den Replikatnamen für Ihre Funktions-App festgelegt. Verwenden Sie diese Variable zum Protokollieren, Korrelation und Debuggen in Multireplikatszenarien.

Eine vollständige Liste der vom System bereitgestellten Umgebungsvariablen finden Sie unter Environment-Variablen in Azure Container Apps.

Überlegungen

Beachten Sie bei der Verwendung von Azure Functions für Azure Container Apps die folgenden anderen Überlegungen:

  • Ingressanforderung für die automatische Skalierung: Um die automatische Skalierung basierend auf Ereignissen zu aktivieren, muss der Eingang aktiviert werden – entweder öffentlich oder innerhalb der internen Container-Apps-Umgebung.
  • Obligatorisches Speicherkonto: Jede in Container-Apps bereitgestellte Funktionen-App muss mit einem Speicherkonto verknüpft werden. Dies ist für die Verwaltung von Triggern, Protokollen und Zustand erforderlich. Überprüfen Sie die Richtlinien für Speicherkonten für bewährte Methoden.
  • Speicher für mehrere Überarbeitungen: Weisen Sie bei der Bereitstellung mit mehreren aktiven Überarbeitungen jeder Überarbeitung ein dediziertes Speicherkonto zu. Die Verwendung eines dedizierten Speicherkontos trägt dazu bei, Konflikte zu vermeiden und eine ordnungsgemäße Isolierung zu gewährleisten. Wenn Sie keine gleichzeitigen Überarbeitungen benötigen, sollten Sie alternativ den standardmäßigen Einzelrevisionsmodus für die vereinfachte Verwaltung verwenden.
  • Multirevisionstrigger: Wenn Sie den Multirevisionsmodus mit einem Pull-basierten Trigger verwenden, verwenden Sie für jede Überarbeitung eine andere Ereignisquelle, um Konflikte im Zusammenhang mit konkurrierenden Verbrauchern zu vermeiden. Funktionen, die Azure Queue Storage, Azure Event Hubs, Azure Service Bus oder Durable Functions Trigger verwenden, sind Beispiele für Pull-basierte Trigger.
  • Latenz beim Kaltstart: Wenn Ihre Container-App während Leerlaufzeiten auf null herunter skaliert wird, kommt es bei der ersten Anforderung nach Inaktivität zu einem Kaltstart. Erfahren Sie mehr über die Reduzierung der Kaltstartzeiten.
  • Integration von Application Insights: Verknüpfen Sie Ihre Funktionen-App mit Application Insights, um eine robuste Überwachung und Diagnose zu ermöglichen. Weitere Informationen finden Sie unter App Insights-Integration in Funktionen.
  • Funktionenproxys: Nicht unterstützt. Integrieren Sie für API-Gatewayszenarien stattdessen Azure API Management.
  • Bereitstellungsplätze: Staging- und Produktionsplätze sind nicht verfügbar. Verwenden Sie blaugrüne Bereitstellungsstrategien für Veröffentlichungen ohne Ausfallzeiten.
  • Funktionszugriffsschlüssel: Das Verwenden des Portals zum Generieren von Funktionszugriffsschlüsseln wird nicht unterstützt. Erwägen Sie die Verwendung von Azure Key Vault zum Speichern von Schlüsseln. Sie können auch die folgenden Optionen verwenden, um HTTP-Endpunkte in der Produktion zu sichern:
  • Kontingent- und Ressourcenbeschränkungen: Container-Apps-Umgebungen haben Standardgrenzwerte für Arbeitsspeicher, CPU und Instanzenanzahl pro Region. Weitere Informationen finden Sie unter den Umgebungsgrenzwerten und Standardkontingenten. Wenn Ihre Workload mehr Ressourcen benötigt, können Sie eine Kontingenterhöhung anfordern.
  • Konfiguration manueller Skalierungsregeln: Die Schaltfläche "Skalierungsregeln hinzufügen" im Azure-Portal ist für Azure Functions, die auf Container-Apps gehostet werden, deaktiviert, da Skalierungsregeln automatisch basierend auf der Ereignisquelle konfiguriert werden. Manuelle KEDA-Regeldefinitionen sind in diesem Setup nicht erforderlich.

Feedback senden

Senden Sie ein Problem oder eine Featureanforderung an das Azure Container Apps GitHub-Repository.

Nächste Schritte / Weitere Ressourcen

Um mit Azure Functions in Container-Apps weiter zu lernen und zu erstellen, erkunden Sie die folgenden Ressourcen: