Schnellstart: Erstellen einer Python-Funktion über die Befehlszeile in Azure

In diesem Artikel verwenden Sie Befehlszeilentools zum Erstellen einer Python-Funktion, die auf HTTP-Anforderungen antwortet. Der Code wird lokal getestet und anschließend in der serverlosen Umgebung von Azure Functions bereitgestellt.

In diesem Artikel werden die beiden Python-Programmiermodelle behandelt, die von Azure Functions unterstützt werden. Verwenden Sie die Auswahl oben, um Ihr Programmiermodell auszuwählen.

Hinweis

Das v2-Programmiermodell bietet einen decoratorbasierten Ansatz zum Erstellen von Funktionen. Weitere Informationen zum Python v2-Programmiermodell finden Sie im Entwicklerreferenzleitfaden.

Im Rahmen dieser Schnellstartanleitung fallen in Ihrem Azure-Konto ggf. geringfügige Kosten im Centbereich an.

Es gibt auch eine Visual Studio Code-basierte Version dieses Artikels.

Konfigurieren Ihrer lokalen Umgebung

Bevor Sie beginnen, müssen die folgenden Voraussetzungen erfüllt sein:

  • Azurite-Speicheremulator. Sie können auch ein tatsächliches Azure-Speicherkonto verwenden, aber in diesem Artikel wird davon ausgegangen, dass Sie diesen Emulator verwenden.

Installieren von Azure Functions Core Tools

Die empfohlene Methode zum Installieren von Core Tools hängt vom Betriebssystem Ihres lokalen Entwicklungscomputers ab.

In den folgenden Schritten wird ein Windows Installer (MSI) zum Installieren der Core Tools v4.x verwendet. Weitere Informationen zu anderen paketbasierten Installationsprogrammen finden Sie in der Infodatei zu Core Tools.

Laden Sie den Core Tools-Installer basierend auf Ihrer Version von Windows herunter, und führen Sie ihn aus:

Wenn Sie zuvor das Windows-Installationsprogramm (MSI) zum Installieren von Core Tools auf Windows verwendet haben, sollten Sie die alte Version unter „Programme hinzufügen oder entfernen“ deinstallieren, bevor Sie die neuste Version installieren.

Erstellen und Aktivieren einer virtuellen Umgebung

Führen Sie die folgenden Befehle in einem geeigneten Ordner aus, um eine virtuelle Umgebung mit dem Namen .venv zu erstellen und zu aktivieren. Stellen Sie sicher, dass Sie Python 3.9, 3.8 oder 3.7 verwenden. Diese Versionen werden von Azure Functions unterstützt.

python -m venv .venv
source .venv/bin/activate

Führen Sie den folgenden Befehl aus, wenn über Python das venv-Paket auf Ihrer Linux-Distribution nicht installiert wurde:

sudo apt-get install python3-venv

Sie führen alle nachfolgenden Befehle in dieser aktivierten virtuellen Umgebung aus.

Erstellen einer lokalen Funktion

In Azure Functions handelt es sich bei einem Funktionsprojekt um einen Container für eine oder mehrere individuelle Funktionen, die jeweils auf einen bestimmten Trigger reagieren. Für alle Funktionen eines Projekts werden die gleichen lokalen Konfigurationen und Hostkonfigurationen gemeinsam genutzt.

In diesem Abschnitt erstellen Sie ein Funktionsprojekt, das nur eine Funktion enthält.

  1. Führen Sie den Befehl func init wie folgt aus, um in einem Ordner mit dem Namen LocalFunctionProj ein Funktionsprojekt mit der angegebenen Runtime zu erstellen.

    func init LocalFunctionProj --python
    
  2. Navigieren Sie zum Projektordner.

    cd LocalFunctionProj
    

    Dieser Ordner enthält verschiedene Dateien für das Projekt, z. B. die Konfigurationsdateien local.settings.json und host.json. Da local.settings.json aus Azure heruntergeladene Geheimnisse enthalten kann, wird die Datei in der GITIGNORE-Datei standardmäßig aus der Quellcodeverwaltung ausgeschlossen.

  3. Fügen Sie dem Projekt über den unten gezeigten Befehl eine Funktion hinzu. Hierbei ist das --name-Argument der eindeutige Name Ihrer Funktion (HttpExample), mit dem --template-Argument wird der Trigger der Funktion (HTTP) angegeben.

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    Mit func new wird ein Unterordner passend zum Funktionsnamen erstellt. Er enthält eine geeignete Codedatei für die gewählte Sprache des Projekts und eine Konfigurationsdatei mit dem Namen function.json.

In diesem Abschnitt erstellen Sie ein Funktionsprojekt und fügen eine von HTTP ausgelöste Funktion hinzu.

  1. Führen Sie den Befehl func init wie folgt aus, um in einem Ordner mit dem Namen LocalFunctionProj ein Funktionsprojekt mit der angegebenen Runtime und Programmiermodellversion zu erstellen.

    func init LocalFunctionProj --python -m V2
    
  2. Navigieren Sie zum Projektordner.

    cd LocalFunctionProj
    

    Dieser Ordner enthält verschiedene Dateien für das Projekt, z. B. die Konfigurationsdateien local.settings.json und host.json. Da local.settings.json aus Azure heruntergeladene Geheimnisse enthalten kann, wird die Datei in der GITIGNORE-Datei standardmäßig aus der Quellcodeverwaltung ausgeschlossen.

  3. Die Datei function_app.py kann alle Funktionen innerhalb Ihres Projekts einschließen. Öffnen Sie diese Datei, und ersetzen Sie den vorhandenen Inhalt durch den folgenden Code, der eine von HTTP ausgelöste Funktion namens HttpExample hinzufügt:

    import azure.functions as func
    
    app = func.FunctionApp()
    
    @app.function_name(name="HttpExample")
    @app.route(route="hello")
    def test_function(req: func.HttpRequest) -> func.HttpResponse:
        return func.HttpResponse("HttpExample function processed a request!")
    
  4. Öffnen Sie die Projektdatei „local.settings.json“, und vergewissern Sie sich, dass die Einstellung AzureWebJobsFeatureFlags den Wert EnableWorkerIndexing aufweist. Dies ist erforderlich, damit Functions Ihr Projekt ordnungsgemäß als Python v2-Modell interpretieren kann. Sie fügen diese Einstellung Ihren Anwendungseinstellungen hinzu, nachdem Sie Ihr Projekt in Azure veröffentlicht haben.

  5. Aktualisieren Sie in der Datei „local.settings.json“ die AzureWebJobsStorage-Einstellung wie im folgenden Beispiel:

    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    

    Dies weist den lokalen Functions-Host an, den Speicheremulator für die derzeit vom Python v2-Modell verlangte Speicherverbindung zu verwenden. Wenn Sie Ihr Projekt in Azure veröffentlichen, müssen Sie stattdessen das Standardspeicherkonto verwenden. Wenn Sie stattdessen ein Azure Storage-Konto verwenden, legen Sie hier die Verbindungszeichenfolge für Ihr Speicherkonto fest.

Starten des Speicheremulators

Standardmäßig wird für die lokale Entwicklung der Speicheremulator Azurite verwendet. Dieser Emulator wird verwendet, wenn die Einstellung AzureWebJobsStorage in der Projektdatei local.settings.json auf UseDevelopmentStorage=true festgelegt ist. Bei Verwenden des Emulators müssen Sie den lokalen Azurite-Speicheremulator starten, ehe Sie die Funktion ausführen.

Sie können diesen Schritt überspringen, wenn die Einstellung AzureWebJobsStorage in der Datei local.settings.json auf die Verbindungszeichenfolge für ein Azure Storage-Konto statt auf UseDevelopmentStorage=true festgelegt ist.

Verwenden Sie den folgenden Befehl, um den Azurite-Speicheremulator zu starten:

azurite

Weitere Informationen finden Sie unter Ausführen von Azurite.

Lokales Ausführen der Funktion

  1. Führen Sie Ihre Funktion aus, indem Sie den lokalen Azure Functions-Runtimehost im Ordner LocalFunctionProj starten.

    func start
    

    Gegen Ende der Ausgabe müssen die folgenden Zeilen angezeigt werden:

    Screenshot of terminal window output when running function locally.

    Hinweis

    Sollte „HttpExample“ nicht wie oben dargestellt angezeigt werden, haben Sie den Host wahrscheinlich außerhalb des Stammordners des Projekts gestartet. Drücken Sie in diesem Fall STRG+C, um den Host zu beenden. Navigieren Sie anschließend zum Stammordner des Projekts, und führen Sie den vorherigen Befehl erneut aus.

  2. Kopieren Sie die URL Ihrer HTTP-Funktion aus dieser Ausgabe in einen Browser, und fügen Sie die Abfragezeichenfolge ?name=<YOUR_NAME> an. Die vollständige URL lautet dann z. B. http://localhost:7071/api/HttpExample?name=Functions. Im Browser sollte eine Antwortmeldung angezeigt werden, die den Wert Ihrer Abfragezeichenkette zurückgibt. Im Terminal, in dem Sie Ihr Projekt gestartet haben, wird beim Senden von Anforderungen auch die Protokollausgabe angezeigt.

  3. Wenn Sie fertig sind, drücken Sie STRG+C, und geben Sie y ein, um den Funktionshost zu beenden.

Erstellen von unterstützenden Azure-Ressourcen für Ihre Funktion

Zum Bereitstellen Ihres Funktionscodes in Azure müssen Sie drei Ressourcen erstellen:

  • Eine Ressourcengruppe als logischen Container für verwandte Ressourcen.
  • Ein Storage-Konto, unter dem Status- und andere Informationen zu Ihren Projekten verwaltet werden.
  • Eine Funktions-App, die als Umgebung zum Ausführen Ihres Funktionscodes dient. Eine Funktions-App ist Ihrem lokalen Funktionsprojekt zugeordnet und ermöglicht Ihnen das Gruppieren von Funktionen als logische Einheit, um die Verwaltung, Bereitstellung und Freigabe von Ressourcen zu vereinfachen.

Verwenden Sie die folgenden Befehle, um diese Elemente zu erstellen. Sowohl die Azure CLI als auch PowerShell werden unterstützt.

  1. Melden Sie sich bei Azure an, falls dies noch nicht geschehen ist.

    az login
    

    Mit dem Befehl az login werden Sie bei Ihrem Azure-Konto angemeldet.

  2. Erstellen Sie eine Ressourcengruppe mit dem Namen AzureFunctionsQuickstart-rg in der ausgewählten Region.

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    Mit dem Befehl az group create wird eine Ressourcengruppe erstellt. Ersetzen Sie im Befehl oben <REGION> durch eine Region in Ihrer Nähe, indem Sie einen verfügbaren Regionscode verwenden, der mit dem Befehl <REGION> zurückgegeben wird.

    Hinweis

    In derselben Ressourcengruppe können nicht gleichzeitig Linux- und Windows-Apps gehostet werden. Wenn Sie über eine bestehende Ressourcengruppe mit dem Namen AzureFunctionsQuickstart-rg und einer Windows-Funktions-App oder -Web-App verfügen, müssen Sie eine andere Ressourcengruppe verwenden.

  3. Erstellen Sie in Ihrer Ressourcengruppe und Region ein universelles Speicherkonto.

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    Der Befehl az storage account create erstellt ein Speicherkonto.

    Ersetzen Sie im vorherigen Beispiel <STORAGE_NAME> durch einen Namen, der für Sie geeignet und eindeutig in Azure Storage ist. Namen dürfen nur 3 bis 24 Zeichen lang sein und müssen ausschließlich Ziffern und Kleinbuchstaben enthalten. Mit Standard_LRS wird ein universelles Konto angegeben, das von Functions unterstützt wird.

    Mit diesem Speicherkonto fallen für diese Schnellstartanleitung nur Kosten in Höhe von wenigen Cent (USD) an.

  4. Erstellen Sie die Funktions-App in Azure.

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime python --runtime-version 3.9 --functions-version 4 --name <APP_NAME> --os-type linux --storage-account <STORAGE_NAME>
    

    Der Befehl az functionapp create erstellt die Funktions-App in Azure. Wenn Sie Python 3.9, 3.8 oder 3.7 verwenden, ändern Sie --runtime-version in 3.9, 3.8 bzw. 3.7. Sie müssen --os-type linux angeben, da Python-Funktionen nicht unter Windows ausgeführt werden können (Standardeinstellung).

    Ersetzen Sie im vorherigen Beispiel <APP_NAME> durch einen global eindeutigen Namen, der für Sie geeignet ist. <APP_NAME> ist gleichzeitig die DNS-Standarddomäne für die Funktions-App.

    Mit diesem Befehl wird eine Funktions-App erstellt, für die die von Ihnen angegebene Language Runtime unter dem Azure Functions-Verbrauchstarif ausgeführt wird. Dies ist für die Nutzungsmenge, die in diesem Fall anfällt, kostenlos. Der Befehl erstellt in derselben Ressourcengruppe auch eine zugeordnete Azure Application Insights-Instanz, mit der Sie Ihre Funktions-App überwachen und Protokolle anzeigen können. Weitere Informationen finden Sie unter Überwachen von Azure Functions. Für die Instanz fallen erst Kosten an, wenn Sie sie aktivieren.

Bereitstellen des Funktionsprojekts in Azure

Nachdem Sie Ihre Funktions-App in Azure erfolgreich erstellt haben, können Sie nun Ihr lokales Funktionsprojekt bereitstellen, indem Sie den Befehl func azure functionapp publish verwenden.

Ersetzen Sie im folgenden Beispiel <APP_NAME> durch den Namen Ihrer App.

func azure functionapp publish <APP_NAME>

Mit dem Befehl zum Veröffentlichen (publish) werden Ergebnisse wie in der folgenden (gekürzten) Ausgabe angezeigt:

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

Aktualisieren von App-Einstellungen

Um das Python v2-Modell in Ihrer Funktions-App zu verwenden, müssen Sie in Azure eine neue Anwendungseinstellung namens AzureWebJobsFeatureFlags mit dem Wert EnableWorkerIndexinghinzufügen. Diese Einstellung befindet sich bereits in der Datei „local.settings.json“.

Führen Sie den folgenden Befehl aus, um diese Einstellung Ihrer neuen Funktions-App in Azure hinzuzufügen.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Ersetzen Sie im vorherigen Beispiel <FUNCTION_APP_NAME> und <RESOURCE_GROUP_NAME> durch den Namen Ihrer Funktions-App bzw. durch den Namen der Ressourcengruppe. Diese Einstellung befindet sich bereits in der Datei „local.settings.json“.

Überprüfen in Azure

Führen Sie den folgenden Befehl aus, um Streamingprotokolle nahezu in Echtzeit in Application Insights im Azure-Portal anzuzeigen.

func azure functionapp logstream <APP_NAME> --browser

In einem separaten Terminalfenster oder im Browser rufen Sie die Remotefunktion erneut auf. Ein ausführliches Protokoll der Funktionsausführung in Azure wird im Terminal angezeigt.

Bereinigen von Ressourcen

Gehen Sie wie folgt vor, falls Sie mit dem nächsten Schritt fortfahren möchten: Fügen Sie eine Ausgabebindung für die Azure Storage-Warteschlange hinzu, und behalten Sie alle Ressourcen bei, weil der nächste Schritt auf der bisherigen Arbeit aufbaut.

Verwenden Sie andernfalls den unten angegebenen Befehl, um die Ressourcengruppe und alle darin enthaltenen Ressourcen zu löschen, damit keine weiteren Kosten anfallen.

az group delete --name AzureFunctionsQuickstart-rg

Nächste Schritte

Haben Sie Probleme mit diesem Artikel?