Arbeiten mit Containern und Azure Functions
Dieser Artikel veranschaulicht die Unterstützung, die Azure Functions für das Arbeiten mit Funktions-Apps bietet, die in einer Azure Container Apps-Umgebung ausgeführt werden. Unterstützung für das Hosten von Funktions-Appcontainern in Container Apps befindet sich derzeit in der Vorschauphase. Weitere Informationen finden Sie unter Azure Container Apps-Hosting von Azure Functions.
Dieser Artikel veranschaulicht die Unterstützung, die Azure Functions für das Arbeiten mit Funktions-Apps bietet, die in Linux-Containern ausgeführt werden.
Wählen Sie oben im Artikel die Hostingumgebung für Ihre containerisierte Funktions-App aus.
Wenn Sie gleich loslegen möchten, zeigt Ihnen der folgende Artikel, wie Sie Ihre erste Funktion in einem Linux-Container erstellen und das Image aus einer Containerregistrierung in einem unterstützten Azure-Hostingdienst bereitstellen:
Erstellen Ihrer ersten Azure Functions-Container in Azure Container Apps
Weitere Informationen zu Bereitstellungen in Azure Container Apps finden Sie unter Azure Container Apps-Hosting von Azure Functions.
Erstellen von containerisierten Funktions-Apps
Mit Functions können Sie Ihre Funktions-Apps ganz einfach als Linux-Container bereitstellen und ausführen, die Sie erstellen und verwalten. Functions verwaltet eine Reihe von sprachspezifischen Basisimages, die Sie zum Erstellen containerisierter Funktions-Apps verwenden können.
Wichtig
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 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 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.
Ein vollständiges Beispiel für das Erstellen der lokalen Containerfunktions-App über die Befehlszeile und das Veröffentlichen des Images in einer Containerregistrierung finden Sie unter Erstellen einer Funktions-App in einem lokalen Container.
Generieren des Dockerfile
Functions-Tools bieten eine Docker-Option, die ein Dockerfile mit Ihrem Funktionscodeprojekt generiert. Sie können diese Datei mit Docker verwenden, um Ihre Funktionen in einem Container zu erstellen, der vom richtigen Basisimage (Sprache und Version) abgeleitet ist.
Die Art und Weise, wie Sie ein Dockerfile erstellen, hängt davon ab, wie Sie Ihr Projekt erstellen.
Wenn Sie ein Functions-Projekt mit Azure Functions Core Tools erstellen, schließen Sie die Option
--docker
ein, wenn Sie den Befehlfunc init
ausführen, wie im folgenden Beispiel gezeigt:func init --docker
Sie können einem vorhandenen Projekt auch ein Dockerfile hinzufügen, indem Sie die Option
--docker-only
verwenden, wenn Sie den Befehlfunc init
in einem vorhandenen Projektordner ausführen, wie im folgenden Beispiel gezeigt:func init --docker-only
Ein vollständiges Beispiel finden Sie unter Erstellen einer Funktions-App in einem lokalen Container.
Erstellen ihrer Funktions-App in einem Container
Mit einem von Core Tools generierten Dockerfile in Ihrem Codeprojekt können Sie Docker verwenden, um die Containerfunktions-App auf Ihrem lokalen Computer zu erstellen. Der folgende docker build
-Befehl erstellt ein Image Ihrer containerisierten Funktionen aus dem Projekt im lokalen Verzeichnis:
docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .
Ein Beispiel zum Erstellen des Containers finden Sie unter Erstellen und lokales Testen des Containerimages.
Aktualisieren eines Images in der Registrierung
Wenn Sie Änderungen am Funktionscodeprojekt vornehmen oder auf das letzte Basisimage aktualisieren müssen, müssen Sie den Container lokal neu erstellen und das aktualisierte Image erneut in der ausgewählten Containerregistrierung veröffentlichen. Der folgende Befehl erstellt das Image aus dem Stammordner mit einer aktualisierten Versionsnummer neu und pusht es in Ihre Registrierung:
az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .
Ersetzen Sie <REGISTRY_NAME>
durch Ihre Container Registry-Instanz und <LOGIN_SERVER>
durch den Anmeldeservernamen.
An diesem Punkt müssen Sie die Bereitstellung aktualisieren, damit das neue Image verwendet wird. Im folgenden Beispiel wird die Funktions-App so aktualisiert, dass das neue Image verwendet wird:
az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
In diesem Beispiel ist <IMAGE_NAME>
der vollständige Name des neuen Images mit Versionsangabe. Für private Registrierungen müssen Sie einen Benutzernamen und ein Kennwort angeben. Speichern Sie diese Anmeldeinformationen sicher.
Sie sollten auch die Aktivierung von Continuous Deployment in Erwägung ziehen.
Azure-Portal mithilfe von Containern erstellen
Wenn Sie eine Funktions-App im Azure-Portal erstellen, können Sie die Funktions-App über ein Image in einer Containerregistrierung bereitstellen. Informationen zum Erstellen einer containerisierten Funktions-App in einer Containerregistrierung finden Sie unter Erstellen Ihrer Funktions-App in einem Container.
In den folgenden Schritten wird eine vorhandene Containerfunktions-App aus einer Containerregistrierung erstellt und bereitgestellt.
Klicken Sie im Menü des Azure-Portals oder auf der Startseite auf Ressource erstellen.
Wählen Sie auf der Seite Neu die Option Compute>Funktions-App aus.
Verwenden Sie auf der Seite Grundlagen die Funktions-App-Einstellungen, die in der folgenden Tabelle angegeben sind:
Einstellung Vorgeschlagener Wert BESCHREIBUNG Abonnement Ihr Abonnement Das Abonnement, unter dem Sie Ihre Funktions-App erstellen. Ressourcengruppe myResourceGroup Der Name der neuen Ressourcengruppe, in der Sie Ihre Funktions-App erstellen. Sie sollten eine Ressourcengruppe erstellen, da beim Erstellen neuer Funktions-Apps in einer vorhandenen Ressourcengruppe bekannte Einschränkungen gelten. Name der Funktions-App Eindeutiger Name* Der Name, der Ihre neue Funktionen-App bezeichnet Gültige Zeichen sind a-z
(Groß-/Kleinschreibung nicht beachtet),0-9
und-
.Möchten Sie Code oder ein Containerimage bereitstellen? Containerimage Stellen Sie eine containerisierte Funktions-App aus einer Registrierung bereit. Informationen zum Erstellen einer Funktions-App in der Registrierung finden Sie unter Erstellen einer Funktions-App in einem lokalen Container. Region Bevorzugte Region Wählen Sie eine Region in Ihrer Nähe oder in der Nähe anderer Dienste aus, auf die Ihre Funktionen zugreifen können.
*Der App-Name muss bei allen in Azure Functions gehosteten Apps global eindeutig sein.
Wählen Sie unter Hostingoptionen und -pläne die Option Functions Premium aus.
Dadurch wird eine Funktions-App erstellt, die von Azure Functions im Premium-Plan gehostet wird, der die dynamische Skalierung unterstützt. Sie können sich auch für die Ausführung in einem App Service-Plan entscheiden, aber bei diesem dedizierten Plan müssen Sie die Skalierung Ihrer Funktions-App verwalten.
*Der App-Name muss innerhalb der Azure Container Apps-Umgebung eindeutig sein. Nicht alle Regionen werden in der Vorschau unterstützt. Weitere Informationen finden Sie unter Überlegungen zum Hosten von Container-Apps.
Wählen Sie unter Hostingoptionen und -pläne die Option Azure Container Apps-Umgebungsplan aus.
Dadurch wird eine neue Azure Container Apps-Umgebungsressource zum Hosten Ihres Funktions-App-Containers erstellt. Weitere Informationen finden Sie unter Azure Container Apps-Hosting von Azure Functions.
Standardmäßig wird die Umgebung in einem Verbrauchsplan ohne Zonenredundanz erstellt, um die Kosten zu minimieren. Sie können auch eine vorhandene Container Apps-Umgebung auswählen. Weitere Informationen zu Umgebungen finden Sie unter Azure Container Apps-Umgebungen.
Übernehmen Sie die Standardoptionen zum Erstellen eines neuen Speicherkontos auf der Registerkarte Speicher und einer neuen Application Insight-Instanz auf der Registerkarte Überwachung. Sie können auch ein vorhandenes Speicherkonto oder eine vorhandene Application Insights-Instanz verwenden.
Wählen Sie die Registerkarte Bereitstellung aus, und deaktivieren Sie Schnellstartimage verwenden. Wenn Sie dies nicht tun, wird die Funktions-App über das Basisimage für Ihre Funktions-App-Sprache bereitgestellt.
Wählen Sie Ihren Imagetyp aus, öffentlich oder privat. Wählen Sie Privat aus, wenn Sie Azure Container Registry oder eine andere private Registrierung verwenden. Geben Sie den Imagenamen einschließlich des Registrierungspräfixes an. Wenn Sie eine private Registrierung verwenden, geben Sie die Anmeldeinformationen für die Authentifizierung der Imageregistrierung an.
Wählen Sie Bewerten + erstellen aus, um die App-Konfigurationsauswahl zu überprüfen.
Überprüfen Sie auf der Seite Überprüfen + erstellen Ihre Einstellungen, und wählen Sie dann Erstellen aus, um die Funktions-App bereitzustellen und Ihr Containerimage aus der Registrierung bereitzustellen.
Arbeiten mit Images in Azure Functions
Wenn Ihr Funktions-App-Container über eine Registrierung bereitgestellt wird, verwaltet Functions Informationen zum Quellimage. Verwenden Sie die folgenden Befehle, um Daten zum Image abzurufen oder das verwendete Bereitstellungsimage zu ändern:
az functionapp config container show
: Gibt Informationen zum für die Bereitstellung verwendeten Image zurück.az functionapp config container set
: Ändert die Registrierungseinstellungen oder aktualisiert das für die Bereitstellung verwendete Image, wie im vorherigen Beispiel gezeigt.
Anwendungseinstellungen
In Azure Functions können Sie mit Anwendungseinstellungen für containerisierte Funktions-Apps auf die übliche Weise arbeiten. Weitere Informationen finden Sie unter Verwenden von Anwendungseinstellungen.
Aktivieren von Continuous Deployment in Azure
Sie können Azure Functions aktivieren, um Ihre Bereitstellung eines Images jeweils automatisch zu aktualisieren, wenn Sie das Bild in der Registrierung aktualisieren.
Verwenden Sie den folgenden Befehl, um Continuous Deployment zu aktivieren und die Webhook-URL abzurufen:
az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
Der Befehl
az functionapp deployment container config
aktiviert Continuous Deployment und gibt die Webhook-URL der Bereitstellung zurück. Sie können diese URL später jederzeit abrufen, indem Sie den Befehlaz functionapp deployment container show-cd-url
verwenden.Ersetzen Sie wie zuvor
<APP_NAME>
durch den Namen Ihrer Funktions-App.Kopieren Sie die Webhook-URL der Bereitstellung in die Zwischenablage.
Öffnen Sie Docker Hub, melden Sie sich an, und wählen Sie in der Navigationsleiste die Option Repositorys aus. Suchen Sie nach dem Image, und wählen Sie es aus. Wählen Sie die Registerkarte Webhooks aus, geben Sie einen Webhooknamen ein, fügen Sie unter Webhook-URL Ihre URL ein, und wählen Sie Erstellen aus.
Nachdem der Webhook festgelegt wurde, wird Ihr Image von Azure Functions jeweils erneut bereitgestellt, wenn Sie es in Docker Hub aktualisieren.
Aktivieren von SSH-Verbindungen
SSH ermöglicht die sichere Kommunikation zwischen einem Container und einem Client. Wenn SSH aktiviert ist, können Sie mithilfe der erweiterten App Service-Tools (Kudu) eine Verbindung mit Ihrem Container herstellen. Azure Functions stellt ein Basisimage bereit, für das SSH bereits aktiviert ist, um das Herstellen einer Verbindung mit Ihrem Container per SSH zu vereinfachen. Sie müssen nur Ihre Dockerfile bearbeiten und dann das Image neu erstellen und bereitstellen. Anschließend können Sie mit den Advanced Tools (Kudu) eine Verbindung mit dem Container herstellen.
Fügen Sie an Ihre Dockerfile-Datei die Zeichenfolge
-appservice
an das Basisimage in IhrerFROM
-Anweisung wie im folgenden Beispiel gezeigt an:FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
In diesem Beispiel wird die SSH-fähige Version des Basisimages von Node.js-Version 18 verwendet. Besuchen Sie die Azure Functions-Basisimagerepositorys, um zu überprüfen, ob Sie die neueste Version des SSH-fähigen Basisimages verwenden.
Erstellen Sie das Image neu, indem Sie den Befehl
docker build
verwenden und<DOCKER_ID>
wie im folgenden Beispiel gezeigt durch Ihre Docker Hub-Konto-ID ersetzen.docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
Pushen Sie das aktualisierte Image an Docker Hub. Dies sollte deutlich weniger Zeit als der erste Pushvorgang in Anspruch nehmen. Nur die aktualisierten Segmente des Images müssen jetzt hochgeladen werden.
docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
Azure Functions stellt das Image automatisch für Ihre Funktions-App bereit. Der Prozess dauert weniger als eine Minute.
Öffnen Sie in einem Browser
https://<app_name>.scm.azurewebsites.net/
, und ersetzen Sie<app_name>
durch Ihren eindeutigen Namen. Diese URL ist der Advanced Tools-Endpunkt (Kudu) für Ihren Funktions-App-Container.Melden Sie sich an Ihrem Azure-Konto an, und wählen Sie SSH aus, um eine Verbindung mit dem Container herzustellen. Die Verbindungsherstellung könnte etwas dauern, falls das Containerimage von Azure noch aktualisiert wird.
Nachdem eine Verbindung mit Ihrem Container hergestellt wurde, können Sie den Befehl
top
ausführen, um die derzeit ausgeführten Prozesse anzuzeigen.
Nächste Schritte
Die folgenden Artikel enthalten weitere Informationen zum Bereitstellen und Verwalten von Containern: