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. 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 einer von Functions generierten Dockerfile-Datei in Ihrem Codeprojekt können Sie Docker verwenden, um die containerisierte Funktions-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 eine vorhandene Bereitstellung aktualisieren, damit das neue Image verwendet wird. Sie können entweder die Azure CLI oder das Azure-Portal verwenden, um die Funktions-App so zu aktualisieren, dass sie das neue Image verwendet:

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. Wählen Sie unter Hostingoption auswählen die Option Premium-Plan>Auswählen 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.

  4. 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.
    Linux-Plan Neuer Plan (Standard) Erstellt einen neuen Premium-Plan zum Hosten Ihrer App. Sie können auch einen vorhandenen Premium-Plan auswählen.
    Tarif Elastic Premium EP1 EP1 ist der kostengünstigste Plan. Sie können bei Bedarf einen umfangreicheren Plan auswählen.
    Zonenredundanz Disabled Sie benötigen dieses Feature nicht in einer Nichtproduktions-App.

    *Der App-Name aller in Azure Functions gehosteten Apps muss global eindeutig sein.

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

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

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

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

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

Azure-Portal mithilfe von Containern erstellen

Wenn Sie eine von Container Apps gehostete Funktions-App im Azure-Portal erstellen, können Sie Ihre 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. Wählen Sie unter Hostingoption auswählen die Option Container-Apps>Auswählen aus.

  4. 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 -.
    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 innerhalb der Azure Container Apps-Umgebung eindeutig sein.

  5. Akzeptieren Sie auf der Seite Allgemeine Informationen die vorgeschlagene neue Umgebung für Azure Container Apps-Umgebung. Die neue Standardumgebung wird unter Verbrauch + dediziert mit dem Standardworkloadprofil und ohne Zonenredundanz erstellt, wodurch die Kosten minimiert werden. Weitere Informationen finden Sie unter Azure Container Apps-Hosting von Azure Functions.

    Sie können auch eine vorhandene Container Apps-Umgebung auswählen. Um eine benutzerdefinierte Umgebung zu erstellen, wählen Sie stattdessen Neu erstellen aus. Auf der Seite Container Apps-Umgebung erstellen können Sie nicht standardmäßige Workloadprofile hinzufügen oder Zonenredundanz aktivieren. Weitere Informationen zu Umgebungen finden Sie unter Azure Container Apps-Umgebungen.

  6. Wählen Sie die Registerkarte Bereitstellung aus, und deaktivieren Sie Schnellstartimage verwenden. Andernfalls wird die Funktions-App über das Basisimage für Ihre Funktions-App-Sprache bereitgestellt.

  7. 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. Die Einstellung Öffentlich unterstützt nur Images, die öffentlich im Docker Hub gespeichert sind.

  8. Wählen Sie unter Containerressourcenzuordnung die gewünschte Anzahl von CPU-Kernen und verfügbaren Arbeitsspeicher aus. Wenn Ihre Umgebung andere Workloadprofile hinzugefügt hat, können Sie ein nicht standardmäßiges Workloadprofil auswählen. Die Auswahl auf dieser Seite wirkt sich auf die Kosten des Hostings Ihrer App aus. Sehen Sie sich die Seite mit der Preisübersicht von Container Apps, um Ihre potenziellen Kosten zu schätzen.

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

  10. Ü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:

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.

Sie können auch die Menge der CPU- und Arbeitsspeicherressourcen festlegen, die Ihrer App zugeordnet sind.

Sie können sowohl Workloadprofile als auch Ressourcenzuordnungen mithilfe der Azure CLI oder im Azure-Portal erstellen und verwalten.

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. Zum Angeben des Profils verwenden Sie den --workload-profile-name-Parameter des az functionapp create-Befehls, wie in diesem Beispiel:

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.

Wenn Sie die Ressourcen festlegen möchten, die Ihrer App zugeordnet sind, ersetzen Sie <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.

Mit dem Befehl az functionapp container set können Sie die zugeordneten Ressourcen und das von Ihrer App verwendete Workloadprofil verwalten.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

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

Wenn Sie Ihre containerisierte Funktions-App in Azure Container Apps hosten, gibt es zwei Möglichkeiten, die kontinuierliche Bereitstellung aus einem Quellcode-Repository einzurichten:

Sie sind derzeit nicht in der Lage, Container basierend auf Imageänderungen kontinuierlich in einer Containerregistrierung bereitzustellen. Sie müssen stattdessen diese Pipelines für die kontinuierliche Bereitstellung (Continuous Deployment) auf Basis des Quellcodes verwenden.

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 die kontinuierliche Bereitstellung auch aus einem Quellcode-Repository konfigurieren, indem Sie entweder Azure Pipelines oder GitHub Actions verwenden.

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, der zeigt, wie Sie den Webhook in Ihrem Docker Hub-Fenster hinzufügen.

  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, der den in einer SSH-Sitzung ausgeführten Linux-Befehl „top“ zeigt.

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