Freigeben über


Azure Container Apps-Hosting von Azure Functions

Wichtig

Eine neue Hostingmethode zum direkten Ausführen von Azure Functions in Azure-Container-Apps ist jetzt verfügbar (siehe Ankündigung) und wird für die meisten neuen Workloads empfohlen. Mit dieser Integration können Sie die vollständigen Features und Funktionen von Azure-Container-Apps nutzen und gleichzeitig vom Programmiermodell der Funktionen und der Einfachheit der automatischen Skalierung profitieren, die von Azure Functions bereitgestellt wird.

Weitere Informationen finden Sie unter Native Azure Functions Support in Azure Container Apps

Azure Functions bietet integrierte Unterstützung für das Entwickeln, Bereitstellen und Verwalten von containerisierten Funktions-Apps in Azure-Container-Apps. Verwenden Sie Azure Container Apps, um Ihre Funktions-App-Container zu hosten, wenn Sie Ihre ereignisgesteuerten Funktionen in Azure in der gleichen Umgebung ausführen müssen wie andere Microservices, APIs, Websites, Workflows oder containergehostete Programme. Das Container Apps-Hosting ermöglicht die Ausführung Ihrer Funktionen in einer vollständig verwalteten Kubernetes-basierten Umgebung mit integrierter Unterstützung für Open-Source-Überwachung, mTLS, Dapr und KEDA (Kubernetes Event-Driven Autoscaling).

Sie können Ihren Funktionscode in einem beliebigen Sprachstapel schreiben, der von Funktionen unterstützt wird. Sie können dieselben Functions-Trigger und -Bindungen mit der ereignisgesteuerten Skalierung verwenden. Außerdem können Sie vorhandene Functions-Clienttools und das Azure-Portal verwenden, um Container zu erstellen, Funktions-App-Container in Container Apps bereitzustellen und Continuous Deployment zu konfigurieren.

Durch die Container Apps-Integration gelten die Netzwerk- und Einblickkonfigurationen, die auf Ebene der Container App-Umgebung definiert werden, für Ihre Funktions-App, genau wie für alle Microservices, die in einer Container Apps-Umgebung ausgeführt werden. Sie erhalten auch die anderen cloudnativen Funktionen von Container Apps, einschließlich KEDA, Dapr und Envoy. Sie können Application Insights weiterhin verwenden, um die Ausführung Ihrer Funktionen zu überwachen, und Ihre Funktions-App kann auf dieselben virtuellen Netzwerkressourcen zugreifen, die von der Umgebung bereitgestellt werden.

Eine allgemeine Übersicht über Containerhostingoptionen für Azure Functions finden Sie unter Linux-Containerunterstützung in Azure Functions.

Hosting und Workloadprofile

Es gibt zwei primäre Pläne für Container-Apps: einen serverlosen Verbrauchsplan und einen dedizierten Plan. Beide können in Arbeitsauslastungsprofil-Umgebungstypen verwendet werden, wobei Workloadprofile bestimmen, welche Compute- und Arbeitsspeicherressourcen für Ihre Apps zur Verfügung stehen. Ein Workloadprofil bestimmt den Umfang von Compute- und Arbeitsspeicherressourcen, die für die in einer Umgebung bereitgestellten Container-Apps verfügbar sind. Die Konfiguration dieser Profile wird auf die unterschiedlichen Anforderungen Ihrer Anwendungen abgestimmt.

Das Workloadprofil „Verbrauch“ ist das Standardprofil, das allen Workloadprofilen vom Typ Umgebung hinzugefügt wird. Sie können Ihrer Umgebung dedizierte Workloadprofile hinzufügen, während Sie eine Umgebung erstellen oder nachdem die Umgebung erstellt wurde. Weitere Informationen zu Workloadprofilen finden Sie unter Workloadprofile in Azure Container Apps.

Container-Apps, die containerisierte Funktions-Apps hosten, werden in allen Regionen unterstützt, die Container-Apps unterstützen.

Wenn Ihre App keine spezifischen Hardwareanforderungen hat, können Sie Ihre Umgebung entweder im Rahmen eines Verbrauchstarifs oder im Rahmen eines dedizierten Tarifs mit dem standardmäßigen Workloadprofil „Verbrauch“ ausführen. Beim Ausführen von Funktionen in Container Apps wird Ihnen nur die Nutzung von Container Apps in Rechnung gestellt. Weitere Informationen finden Sie auf der Azure Container Apps-Preisseite.

Azure Functions in Azure Container Apps unterstützt Hosting mit GPU-Unterstützung im dedizierten Plan mit Workloadprofilen.

Informationen zum Erstellen und Bereitstellen eines Funktions-App-Containers für Container-Apps im Standardnutzungsplan finden Sie unter Erstellen Ihrer ersten containerisierten Funktionen in Azure-Container-Apps.

Informationen zum Erstellen einer Container-Apps-Umgebung mit Workloadprofilen und zum Bereitstellen eines Funktions-App-Containers auf einer bestimmten Workload finden Sie unter Container-Apps-Workloadprofile.

Funktionen in Containern

Um das Container Apps-Hosting zu verwenden, muss Ihr Code in einer Funktions-App in einem von Ihnen erstellten und verwalteten Linux-Container ausgeführt werden. Functions verwaltet eine Reihe von sprachspezifischen Basisimages, mit denen Sie Ihre containerisierten Funktions-Apps generieren können.

Wenn Sie ein Codeprojekt mit Azure Functions Core Tools erstellen und die --docker Option einschließen, generiert Core Tools die Dockerfile mit dem richtigen Basisimage, das Sie beim Erstellen Ihres Containers als Ausgangspunkt verwenden können.

Wichtig

Beim Erstellen eigener Container müssen Sie das Basisimage Ihres Containers auf das neueste unterstützte Basisimage aktualisieren. Unterstützte Basisimages für Azure Functions sind sprachspezifisch und befinden sich in den Azure Functions Basisimage-Repositories.

Das Functions-Team ist bestrebt, monatliche Updates für diese Basisimages zu veröffentlichen. Regelmäßige Updates umfassen die neuesten Updates der Nebenversion und Sicherheitskorrekturen für Functions-Runtime und -Sprachen. Sie sollten Ihren Container regelmäßig aus dem neuesten Basisimage aktualisieren und die aktualisierte Version Ihres Containers erneut bereitstellen. Weitere Informationen finden Sie unter Verwalten von benutzerdefinierten Containern.

Wenn Sie Änderungen am Funktionscode vornehmen, müssen Sie Ihr Containerimage neu erstellen und erneut veröffentlichen. Weitere Informationen finden Sie unter Aktualisieren eines Bilds in der Registrierung.

Bereitstellungsoptionen

Azure Functions unterstützt derzeit die folgenden Bereitstellungsmethoden für eine containerisierte Funktions-App in Azure Container Apps:

Sie können Ihre containerisierten Apps kontinuierlich aus dem Quellcode mithilfe von Azure-Pipelines oder GitHub-Aktionen bereitstellen. Das Functions-Feature für die kontinuierliche Bereitstellung wird bei der Bereitstellung in Container Apps derzeit nicht unterstützt.

Autorisierung mit verwalteter Identität

Um die beste Sicherheit zu gewährleisten, sollten Sie mithilfe der Microsoft Entra-Authentifizierung und der Autorisierung über verwaltete Identität eine Verbindung mit Remotediensten herstellen. Sie können verwaltete Identitäten für diese Verbindungen verwenden:

Bei der Ausführung in Container-Apps können Sie Microsoft Entra ID mit verwalteten Identitäten für alle Bindungserweiterungen verwenden, die verwaltete Identitäten unterstützen. Derzeit unterstützen nur diese Bindungserweiterungen die ereignisgesteuerte Skalierung bei Verwendung der Authentifizierung mit verwalteter Identität:

  • Azure Event Hubs
  • Azure Queue Storage (Warteschlangenspeicher)
  • Azure-Servicebus

Verwenden Sie für andere Bindungen feste Replikate bei Verwendung der Authentifizierung mit verwalteter Identität. Weitere Informationen finden Sie im Entwicklerhandbuch für Funktionen.

Integration in ein virtuelles Netzwerk

Wenn Sie Ihre Funktions-Apps in einer Container Apps-Umgebung hosten, können Ihre Funktionen sowohl intern als auch extern zugängliche virtuelle Netzwerke nutzen. Weitere Informationen zu Umgebungsnetzwerken finden Sie unter Networking in der Azure-Container-Apps-Umgebung.

Ereignisgesteuerte Skalierung

Alle Functions-Trigger können in Ihrer containerisierten Funktions-App verwendet werden. Es können nur diese Trigger (ab null Instanzen) basierend auf empfangenen Ereignissen dynamisch skaliert werden, wenn sie in einer Container Apps-Umgebung ausgeführt werden:

  • Azure Cosmos DB (KEDA-Verbindung)
  • Azure-Ereignisraster
  • Azure Event Hubs
  • Azure Blob Storage (Ereignisrasterbasiert)
  • Azure Queue Storage (Warteschlangenspeicher)
  • Azure-Servicebus
  • Durable Functions (MSSQL-Speicheranbieter)
  • HTTP
  • Kafka
  • Zeitschaltuhr

Azure Functions in Container Apps wurde zum Konfigurieren der Skalierungsparameter und -regeln gemäß dem Ereignisziel konzipiert. Sie müssen sich keine Gedanken über die Konfiguration der KEDA-skalierten Objekte machen. Sie können die minimale und maximale Replikatanzahl weiterhin festlegen, wenn Sie Ihre Funktions-App erstellen oder ändern. Der folgende Azure CLI-Befehl legt die minimale und maximale Replikatanzahl fest, wenn eine neue Funktions-App in einer Container Apps-Umgebung aus einer Azure Container Registry-Instanz erstellt wird:

az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>

Der folgende Befehl legt die gleiche minimale und maximale Replikatanzahl für eine vorhandene Funktions-App fest:

az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1

Verwaltete Ressourcengruppen

Azure Functions auf Container Apps führt Ihre containerisierten Funktions-App-Ressourcen in speziell verwalteten Ressourcengruppen aus. Diese verwalteten Ressourcengruppen tragen dazu bei, die Integrität Ihrer Apps zu schützen, indem sie unbeabsichtigte oder nicht autorisierte Änderungen oder Löschungen von Ressourcen in der verwalteten Gruppe verhindern, auch durch Dienstprinzipale.

Eine verwaltete Ressourcengruppe wird bei der ersten Erstellung von Funktions-App-Ressourcen in einer Container Apps-Umgebung erstellt. Container Apps-Ressourcen, die von Ihrer containerisierten Funktions-App benötigt werden, werden in dieser verwalteten Ressourcengruppe ausgeführt. Alle anderen Funktions-Apps, die Sie in derselben Umgebung erstellen, verwenden diese vorhandene Gruppe.

Eine verwaltete Ressourcengruppe wird automatisch entfernt, nachdem alle Funktions-App-Containerressourcen aus der Umgebung entfernt wurden. Die verwaltete Ressourcengruppe ist zwar sichtbar, Änderungs- oder Entfernungsversuche führen jedoch zu einem Fehler. Wenn Sie eine verwaltete Ressourcengruppe aus einer Umgebung entfernen möchten, müssen Sie alle Funktions-App-Containerressourcen entfernen. Daraufhin wird sie automatisch entfernt.

Sollten Probleme mit diesen verwalteten Ressourcengruppen auftreten, wenden Sie sich an den Support.

Anwendungsprotokollierung

Sie können Ihre in Container-Apps gehostete containerisierte Funktions-App überwachen, indem Sie Azure Monitor Application Insights auf die gleiche Weise wie mit Apps überwachen, die in Azure Functions gehostet werden. Weitere Informationen finden Sie unter Überwachen von Azure-Funktionen.

Für Bindungen, die die ereignisgesteuerte Skalierung unterstützen, werden Skalierungsereignisse als Ereignisse der Typen FunctionsScalerInfo und FunctionsScalerError in Ihrem Log Analytics-Arbeitsbereich protokolliert. Weitere Informationen finden Sie unter Anwendungsprotokollierung in Azure-Container-Apps.

Überlegungen zum Hosting von Container-Apps

Beachten Sie beim Bereitstellen Ihrer Funktions-App-Container in Container Apps die folgenden Überlegungen:

  • Diese Einschränkungen gelten für Kafka-Trigger:
    • Der Protokollwert ssl wird nicht unterstützt, wenn das Hosting in Container Apps erfolgt. Verwenden Sie einen anderen Protokollwert.
    • Damit ein Kafka-Trigger dynamisch skaliert wird, wenn eine Verbindung mit Event Hubs besteht, muss die username-Eigenschaft in eine Anwendungseinstellung aufgelöst werden, die den tatsächlichen Wert des Benutzernamens enthält. Wenn der $ConnectionString-Standardwert verwendet wird, kann der Kafka-Trigger die App nicht dynamisch skalieren.
  • Für die integrierten Container-Apps-Richtliniendefinitionen gelten derzeit nur Richtlinien auf Umgebungsebene für Azure Functions-Container.
  • Standardmäßig überwacht eine containerisierte Funktions-App Port 80 auf eingehende Anforderungen. Wenn Ihre App einen anderen Port verwenden muss, verwenden Sie die WEBSITES_PORT Anwendungseinstellung , um diesen Standardport zu ändern.
  • Sie sind derzeit nicht in der Lage, integrierte fortlaufende Bereitstellungsfeatures beim Hosten in Container-Apps zu verwenden. Stattdessen müssen Sie den Quellcode mithilfe von Azure-Pipelines oder GitHub-Aktionen bereitstellen.
  • Sie können derzeit keine Bereitstellung einer gehosteten Funktions-App von Container Apps zwischen Ressourcengruppen oder zwischen Abonnements verschieben. Stattdessen müssen Sie die vorhandene containerisierte App-Bereitstellung in einer neuen Ressourcengruppe, einem neuen Abonnement oder einer neuen Region neu erstellen.
  • Wenn Sie Container Apps verwenden, besitzen Sie keinen direkten Zugriff auf die Kubernetes-APIs auf niedrigerer Ebene.
  • Die containerapp-Erweiterung steht in Konflikt mit der appservice-kube-Erweiterung in der Azure CLI. Wenn Sie Apps zuvor in Azure Arc veröffentlicht haben, führen Sie az extension list aus, und stellen Sie sicher, dass appservice-kube nicht installiert ist. Wenn dies doch der Fall ist, kann die Entfernung erfolgen, indem Sie az extension remove -n appservice-kube ausführen.