Linux Container-Support in Azure Functions

Wenn du deine einzelnen Funktionen für Azure Functions planst und entwickelst, konzentriere dich auf den Code selbst. Azure Functions macht es leicht, nur Ihr Codeprojekt in einer Funktions-App in Azure bereitzustellen. Wenn du dein Projekt in einer Linux-Funktions-App bereitstellst, läuft dein Code in einem Container, den Azure Functions automatisch für dich erstellt. Dieser Container lässt sich nahtlos mit den Funktionsmanagement-Tools integrieren.

Functions unterstützt auch Funktions-App-Bereitstellungen in Containern. In einer containerisierten Bereitstellung erstellt man eine eigene Funktions-App-Instanz in einem lokalen Docker-Container aus einem unterstützten Basisimage. Sie können diese containerisierte Funktions-App dann in einer Hostingumgebung in Azure bereitstellen. Die Erstellung Ihres eigenen Funktions-App-Containers ermöglicht die Personalisierung oder andernfalls die Steuerung der sofortigen Runtime-Umgebung Ihres Funktions-Codes.

Important

Wenn Sie eigene Container erstellen, müssen Sie das Basisimage Ihres Containers auf das neueste unterstützte Basisimage aktualisieren. Unterstützte Basisimages für Azure Functions sind sprachspezifisch. Siehe die Basisimage-Repositorys von Azure Functions.

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

Containerhosting-Optionen

Tip

Für die meisten containerisierten Workloads hosten Sie Ihre Funktionsanwendungen in Azure Container Apps. Container Apps bietet eine vollständig verwaltete, serverlose, auf Kubernetes basierende Umgebung mit integrierter ereignisgesteuerter Skalierung, Skalierung bis Null und GPU-Unterstützung. Um zu starten, siehe Azure Functions on Azure Container Apps.

Sie haben mehrere Möglichkeiten, Ihre containerisierten Funktions-Apps in Azure zu hosten:

Hostingoption Benefits
Azure Container Apps (Empfohlen) Azure Container Apps hostet und verwaltet Ihre Funktions-App-Container nativ über den Microsoft.App Resource Provider. Führen Sie Ihre Funktionen in einer vollständig verwalteten, serverlosen, auf Kubernetes basierenden Umgebung mit integrierter Unterstützung für Open-Source-Monitoring, mTLS, Dapr und KEDA aus. Unterstützt Scale-to-Zero, serverlose Pay-for-What-You-Use-Abrechnung, dedizierte Hardware und GPUs über Workload-Profile. Du profitierst vom gleichen Functions-Programmiermodell und denselben Triggern und erhältst den gesamten Funktionsumfang der Container-Apps. Empfohlene Hosting-Option für containerisierte Funktions-Apps in Azure.
Azure Container Apps (legacy) Azure Functions bietet integrierte Unterstützung für die Bereitstellung containerisierter Funktions-Apps in einer Container-Apps-Umgebung mittels Nutzung des Microsoft.Web Ressourcenanbieters. Obwohl derzeit unterstützt, ist diese Option für zukünftige Einstellungen geplant. Für neue Workloads verwenden Sie stattdessen die empfohlene Option Container Apps Hosting.
Azure-Funktionen Sie können Ihre containerisierten Funktions-Apps in Azure Functions hosten, indem Sie den Container in einem Elastic Premium - oder einem App Service(Dedicated) -Plan ausführen. Premium-Plan-Hosting bietet Ihnen die Vorteile der dynamischen Skalierung. Ziehen Sie die Verwendung des dedizierten Plan-Hostings in Betracht, um bereits vorhandene ungebrauchte App Service-Plan-Ressourcen zu nutzen.
Kubernetes Da Azure Functions-Runtime Flexibilität bzgl. des Hostings bietet, können Sie Ihre Funktions-App-Container so direkt in Kubernetes-Clustern hosten und verwalten. KEDA (Kubernetes-based Event Driven Autoscaling) arbeitet nahtlos mit der Azure Functions-Laufzeitumgebung und dem Tooling zusammen, um eine ereignisgesteuerte Skalierung in Kubernetes bereitzustellen. Wichtig: Kubernetes-Hosting Ihrer containerisierten Funktions-Apps, entweder durch den Einsatz von KEDA oder durch direkte Bereitstellung, ist ein Open-Source-Projekt, das Sie kostenlos nutzen können. Best-Effort-Unterstützung für dieses Hostingszenario wird nur von Mitwirkenden und der Community bereitgestellt. Sie sind dafür verantwortlich, Ihre eigenen Funktions-App-Container in einem Cluster zu verwalten, auch wenn Sie sie in Azure Kubernetes Service (AKS) bereitstellen.

Vergleich der Featureunterstützung

Wie umfassend die verschiedenen Features und Verhaltensweisen von Azure Functions unterstützt werden, wenn Ihre Funktions-App in einem Container ausgeführt wird, hängt von der ausgewählten Containerhostoption ab.

Feature/behavior Container-Apps (empfohlen) Container Apps (Legacy)1 Premium-Plan Dedizierter Plan Kubernetes
Produktsupport Yes Yes Yes Yes No
Integration von Funktionsportalen Yes No Yes Yes No
Ereignisgesteuerte Skalierung Ja (Skalierungsregeln) Yes5 Yes No No
Maximale Skalierung (Instanzen) 10002 10002 1003 10-304 Variiert je nach Cluster
Instanzen mit automatischer Skalierung auf Null Yes Yes No No KEDA
Ausführungszeitbegrenzung Unbounded6 Unbounded6 Unbounded7 Unbounded8 Nichts
Bereitstellung der Core-Tools No No No No func kubernetes
Revisions Yes Yes No No No
Bereitstellungsslots No No Yes Yes No
Streamingprotokolle Yes Yes Yes Yes No
Konsolenzugriff Yes Yes Ja (mit Kudu) Ja (mit Kudu) Ja (in Pods mit kubectl)
Ausgleich beim Kaltstart Skalierungsregeln Maximale Anzahl Replikate Immer-bereite/vorgewärmte Instanzen n/a n/a
App Service-Authentifizierung: Yes Yes Yes Yes No
Benutzerdefinierte Domänennamen Yes Yes Yes Yes No
Zertifikate mit privaten Schlüsseln Yes Yes Yes Yes No
Virtuelle Netzwerke Yes Yes Yes Yes Yes
Verfügbarkeitszonen Yes Yes Yes Yes Yes
Diagnostics Yes Yes Yes Yes No
Dedizierte Hardware Ja (Workload-Profile) Ja (Workload-Profile) No Yes Yes
Dedizierte GPUs Ja (Workload-Profile) Ja (Workload-Profile) No No Yes
Konfigurierbarer Arbeitsspeicher/CPU-Anzahl Yes Yes No No Yes
Option "Freier Zuschuss" Yes Yes No No No
Preisdetails Abrechnung über Container Apps Abrechnung über Container Apps Abrechnung über Premium-Plan Abrechnung über Dedicated-Plan AKS-Preise
Anforderungen an Dienstnamen 2–32 Zeichen: beschränkt auf Kleinbuchstaben, Ziffern und Bindestriche. Muss mit einem Buchstaben beginnen und mit einem alphanumerischen Zeichen enden. 2–32 Zeichen: beschränkt auf Kleinbuchstaben, Ziffern und Bindestriche. Muss mit einem Buchstaben beginnen und mit einem alphanumerischen Zeichen enden. Weniger als 64 Zeichen: auf alphanumerische Zeichen und Bindestriche beschränkt. Darf nicht mit einem Bindestrich beginnen oder enden. Weniger als 64 Zeichen: auf alphanumerische Zeichen und Bindestriche beschränkt. Darf nicht mit einem Bindestrich beginnen oder enden. Weniger als 253 Zeichen: beschränkt auf alphanumerische Zeichen und Bindestriche. Muss mit einem alphanumerischen Zeichen beginnen und enden.
  1. Geplant für zukünftige Wertlosigkeit. Stattdessen nutze native Container Apps Hosting.
  2. Bei Container-Apps ist die Standardeinstellung 10 Instanzen, Sie können jedoch die maximale Anzahl von Replikaten festlegen. Der Höchstwert beträgt 1.000. Diese Einstellung wird berücksichtigt, solange genügend Kernkontingent verfügbar ist. Wenn Sie Ihre Funktions-App im Azure-Portal erstellen, sind Sie auf 300 Instanzen beschränkt.
  3. In einigen Regionen können Linux-Apps in einem Premium-Plan auf 100 Instanzen skaliert werden. Weitere Informationen finden Sie im Artikel zum Premium-Plan.
  4. Spezifische Grenzwerte für die verschiedenen Optionen des App Service-Plans finden Sie unter App Service-Plan-Grenzwerte.
  5. Erfordert KEDA; wird von den meisten Triggern unterstützt. Weitere Informationen dazu, welche Trigger die ereignisgesteuerte Skalierung unterstützen, finden Sie unter Überlegungen zum Hosten in Container Apps.
  6. Wenn die Mindestanzahl von Replikaten auf Null festgelegt ist, hängt das Standardtimeout von den spezifischen Triggern ab, die in der App verwendet werden.
  7. Es wird kein Timeout für die maximale Ausführungsdauer erzwungen. Die Toleranzperiode für eine Funktionsausführung beträgt jedoch 60 Minuten während der Abskalierung und 10 Minuten während Plattformupdates.
  8. Hierfür muss der App Service-Plan auf Always On festgelegt werden. Während Plattformupdates wird eine Toleranzperiode von 10 Minuten gewährt.

Verwalten von benutzerdefinierten Containern

Wenn du deine eigenen Container erstellst, halte das Basis-Image deines Containers auf dem neuesten unterstützten Basis-Image aktualisiert. Unterstützte Basisimages für Azure Functions sind sprachspezifisch und sind unter Repositorys für Azure Functions-Basisimages verfügbar.

Das Functions-Team ist bestrebt, monatliche Updates für diese Basisimages zu veröffentlichen. Regelmäßige Updates umfassen die aktuellen Updates der Nebenversion und Sicherheitsfixes für Functions-Runtime und -Sprachen. Aktualisieren Sie Ihren Container regelmäßig aus dem neuesten Basisimage und setzen Sie die aktualisierte Version Ihres Containers neu aus.

Wählen Sie Ihr Basisbild basierend auf dem Sprachstapel aus, den Sie in Ihrer Funktions-App verwenden. Die folgende Tabelle enthält Beispiele für jeden Stapel. Im Allgemeinen beginnt das Tag mit 4- der Anzeige der Laufzeit von V4 Functions. Wenn neue Nebenversionen veröffentlicht werden, wird dieses Tag aktualisiert, um auf die neue Version zu verweisen. Während du dein benutzerdefiniertes Image regelmäßig neu erstellst, ziehst du die neuen Versionen durch denselben Tag, sodass deine App die gleichen Updates hat. Verwende keine Tags, die kleine Laufzeitversionen angeben, da diese Tags keine Updates erhalten. Deine App bleibt potenziell auf einer ungepatchten Version, egal wie oft du dein benutzerdefiniertes Image neu aufbaust.

Sprachstapel Beispiel für empfohlene Basisimagetags
.NET (isoliertes Worker-Modell) mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 oder
mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice

(In diesen Beispielen wird .NET 8 als Ziel verwendet. Wählen Sie das entsprechende Image für die benötigte .NET-Version aus.)
.NET (veraltetes In-Process-Modell) mcr.microsoft.com/azure-functions/dotnet:4-dotnet8.0 oder
mcr.microsoft.com/azure-functions/dotnet:4-dotnet8.0-appservice

(Die Unterstützung für das im Prozess befindliche Modell endet am 10. November 2026. Wandern Sie so schnell wie möglich zum Modell des isolierten Arbeiters um.)
Java mcr.microsoft.com/azure-functions/java:4-java21 oder
mcr.microsoft.com/azure-functions/java:4-java21-appservice

(Diese Beispiele zielen auf Java 21 ab. Wählen Sie das entsprechende Bild für die benötigte Java-Version aus.)
Node.js (JavaScript oder TypeScript) mcr.microsoft.com/azure-functions/node:4-node22 oder
mcr.microsoft.com/azure-functions/node:4-node22-appservice

(Diese Beispiele zielen auf Node.js 22 ab. Wählen Sie das entsprechende Bild für die benötigte Node.js Version aus.)
PowerShell mcr.microsoft.com/azure-functions/powershell:4-powershell7.4 oder
mcr.microsoft.com/azure-functions/powershell:4-powershell7.4-appservice

(Diese Beispiele zielen auf PowerShell 7.4 ab. Wählen Sie das entsprechende Bild für die benötigte PowerShell-Version aus.)
Python mcr.microsoft.com/azure-functions/python:4-python3.12 oder
mcr.microsoft.com/azure-functions/python:4-python3.12-appservice

(Diese Beispiele zielen auf Python 3.12 ab. Wählen Sie das entsprechende Bild für die benötigte Python-Version aus.)
Benutzerdefinierte Handler / andere mcr.microsoft.com/azure-functions/base:4 oder
mcr.microsoft.com/azure-functions/base:4-appservice

Basisimages, die auf -appservice enden, ermöglichen SSH- und Remotedebuggen über die Plattform. Sofern du diese Funktionen nicht brauchst, nutze die Basisbilder ohne Suffix -appservice .

Important

Es reicht nicht aus, nur eines der vorherigen Tags in deiner Dockerfile zu haben. Sie müssen regelmäßig das neueste Bild von dieser Kennzeichnung herunterladen, damit Ihr benutzerdefiniertes Image neu erstellt werden kann und die neuesten Updates enthält. Wenn du das neueste Image nicht abrufst und neu aufbaust, läuft deine App weiterhin auf dem alten Basis-Image.

Wenn du deine eigene containerisierte App mit einem benutzerdefinierten Image erstellst oder bereitstellst, bist du dafür verantwortlich, dass dein benutzerdefiniertes Image up-toDatum mit den veröffentlichten Basisimages bleibt. Zusätzlich zu neuen Features und Verbesserungen können diese Basisimageupdates auch Sicherheitsupdates enthalten, die für Ihre App von entscheidender Bedeutung sind. Um sicherzustellen, dass Ihre App geschützt ist, stellen Sie sicher, dass Sie auf dem neuesten Stand bleiben. Rufen Sie regelmäßig die neueste Version des Basis-Images herunter, bauen Sie Ihr benutzerdefiniertes Container-Image neu zusammen und bereiten Sie Ihre App neu aus, um es zu verwenden.

In manchen Fällen ist Microsoft verpflichtet, plattformweite Änderungen vorzunehmen, die dazu führen können, dass eine App in einem benutzerdefinierten Container, die ein altes Basisimage verwendet, nicht mehr richtig funktioniert. Für solche großen Änderungen bringt Microsoft aktualisierte Bilder rechtzeitig heraus, damit Apps, die regelmäßig aktualisiert werden, nicht negativ betroffen sind. Um potenzielle Probleme mit Ihren Apps zu vermeiden, die in benutzerdefinierten Containern ausgeführt werden, stellen Sie sicher, dass Sie nicht zu weit hinter die neueste Nebenversion fallen. Während eines Support-Falls, wenn Microsoft feststellt, dass Ihre App Probleme hat, weil sie auf einer älteren oder nicht unterstützten Version ist, bittet Microsoft Sie darum, Ihren Container auf die neueste Basis-Image-Version zu aktualisieren, bevor Sie mit dem Support fortfahren.

Erste Schritte

Verwenden Sie diese Links, um mit der Verwendung von Azure Functions in Linux-Containern loszulegen:

Ich möchte... Siehe Artikel:
Funktionen in Azure Container Apps bereitstellen (empfohlen) Erstellen Sie Ihre ersten containerisierten Funktionen in Azure Container Apps
Erstelle meine ersten containerisierten Funktionen lokal Erstellen einer Funktions-App in einem lokalen Linux-Container
Containerisierte Funktionen auf einen Premium- oder Dedizierten Plan bereitstellen Erstellen Ihrer ersten Azure Functions-Container