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 Befehl func 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 Befehl func 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.

  1. Klicken Sie im Menü des Azure-Portals oder auf der Startseite auf Ressource erstellen.

  2. Wählen Sie auf der Seite Neu die Option Compute>Funktions-App aus.

  3. 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 aller in Azure Functions gehosteten Apps muss global eindeutig sein.

  1. Wählen Sie unter Hostingoptionen und -pläne die Option Functions Premium aus.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    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.

  1. Wählen Sie unter Hostingoptionen und -pläne die Option Azure Container Apps-Umgebungsplan aus.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    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.

  1. Ü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.
  1. 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.

  2. 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.

  3. Wählen Sie Bewerten + erstellen aus, um die App-Konfigurationsauswahl zu überprüfen.

  4. Ü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.

  1. Wählen Sie Bewerten + erstellen aus, um die App-Konfigurationsauswahl zu überprüfen.

  2. Überprüfen Sie auf der Seite Bewerten + erstellen Ihre Einstellungen, und wählen Sie dann Erstellen aus, um die Funktions-App mithilfe eines Standard-Basisimages bereitzustellen.

  3. Nachdem Ihre Funktions-App-Ressource erstellt wurde, wählen Sie Zur Ressource wechseln und dann auf der Funktions-App-Seite Bereitstellungscenter aus.

  4. Im Bereitstellungscenterkönnen Sie Ihre Containerregistrierung als Quelle des Images verbinden. Sie können auch GitHub Actions oder Azure-Pipelines aktivieren, um eine solidere kontinuierliche Bereitstellung von Updates für Ihren Container in der Registrierung zu ermöglichen.

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:

Workloadprofile für Container Apps

Workloadprofile sind Funktionen von Container Apps, mit deren Hilfe Sie Ihre Bereitstellungsressourcen besser steuern können. Azure Functions in Azure Container Apps unterstützt auch Workloadprofile. Weitere Informationen finden Sie unter Workloadprofile in Azure Container Apps.

Alternativ können Sie Workloadprofile mithilfe der Azure CLI oder im Azure-Portal erstellen.

Sie aktivieren Workloadprofile, wenn Sie Ihre Container-App-Umgebung erstellen. Ein Beispiel finden Sie unter Erstellen einer Container-App in einem Profil.

Sie können Profile in Ihrer Umgebung hinzufügen, bearbeiten und löschen. Ein Beispiel finden Sie unter Hinzufügen von Profilen.

Wenn Sie eine containerisierte Funktions-App in einer Umgebung erstellen, in der Workloadprofile aktiviert sind, sollten Sie auch das Profil angeben, in dem sie ausgeführt werden soll. Dazu verwenden Sie den --workload-profile-name-Parameter des az functionapp create-Befehls, wie in diesem Beispiel gezeigt wird:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI>  --workload-profile-name  PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

Im Befehl az functionapp create gibt der --environment-Parameter die Container Apps-Umgebung an, und der --image-Parameter gibt das Image an, das für die Funktions-App verwendet werden soll. Ersetzen Sie in diesem Beispiel <STORAGE_NAME> durch den Namen, den Sie im vorherigen Abschnitt für das Speicherkonto verwendet haben. Ersetzen Sie außerdem <APP_NAME> durch einen global eindeutigen Namen, der für Sie geeignet ist.

Ersetzen Sie außerdem <CPU_COUNT> durch die gewünschte Anzahl virtueller CPUs, die zwischen 0,5 und der vom Profil maximal zugelassenen Anzahl liegen muss. Wählen Sie für <MEMORY_SIZE> eine dedizierte Speichermenge, die zwischen 1 GB und der vom Profil maximal zugelassenen Menge liegen muss.

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

Wichtig

Webhook-basierte Bereitstellung wird derzeit nicht unterstützt, wenn Ihr Container in einem Elastic Premium-Plan ausgeführt wird. Wenn Sie die in diesem Abschnitt beschriebene fortlaufende Bereitstellungsmethode verwenden müssen, stellen Sie stattdessen Ihren Container in einem App Service-Plan bereit. Wenn Sie in einem Elastic Premium-Plan ausgeführt werden, müssen Sie Ihre Anwendung bei jeder Aktualisierung Ihres Containers im Repository manuell neu starten.

Sie können Azure Functions aktivieren, um Ihre Bereitstellung eines Images jeweils automatisch zu aktualisieren, wenn Sie das Bild in der Registrierung aktualisieren.

  1. 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 Befehl az functionapp deployment container show-cd-url verwenden.

    Ersetzen Sie wie zuvor <APP_NAME> durch den Namen Ihrer Funktions-App.

  2. Kopieren Sie die Webhook-URL der Bereitstellung in die Zwischenablage.

  3. Ö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.

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. 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.

  1. Fügen Sie an Ihre Dockerfile-Datei die Zeichenfolge -appservice an das Basisimage in Ihrer FROM-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.

  2. 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 .
    
  3. 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
    
  4. Azure Functions stellt das Image automatisch für Ihre Funktions-App bereit. Der Prozess dauert weniger als eine Minute.

  5. Ö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.

  6. 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.

  7. Nachdem eine Verbindung mit Ihrem Container hergestellt wurde, können Sie den Befehl top ausführen, um die derzeit ausgeführten Prozesse anzuzeigen.

    Screenshot that shows Linux top command running in an SSH session.

Nächste Schritte

Die folgenden Artikel enthalten weitere Informationen zum Bereitstellen und Verwalten von Containern: