Erstellen einer durch HTTP ausgelösten Funktion in AzureCreate an HTTP triggered function in Azure

Dieser Artikel demonstriert die Verwendung von Befehlszeilentools zum Erstellen eines Python-Projekts, das in Azure Functions ausgeführt wird.This article shows you how to use command-line tools to create a Python project that runs in Azure Functions. Sie können auch eine Funktion erstellen, die von einer HTTP-Anforderung ausgelöst wird.You also create a function that is triggered by an HTTP request. Abschließend veröffentlichen Sie Ihr Projekt zur Ausführung als serverlose Funktion in Azure.Finally, you publish your project to run as a serverless function in Azure.

Dieser Artikel enthält die erste von zwei Python-Schnellstartanleitungen für Azure Functions.This article is the first of two Python quickstarts for Azure Functions. Nach dem Durcharbeiten dieser Schnellstartanleitung können Sie Ihrer Funktion eine Ausgabebindung an eine Azure Storage-Warteschlange hinzufügen.After you complete this quickstart, you can add an Azure Storage queue output binding to your function.

VoraussetzungenPrerequisites

Bevor Sie beginnen, müssen Sie die folgenden Schritte ausführen:Before you start, you must:

Erstellen und Aktivieren einer virtuellen Umgebung (optional)Create and activate a virtual environment (optional)

Sie sollten eine Python 3.6.x-Umgebung verwenden, um Python-Funktionen lokal zu entwickeln.You should use a Python 3.6.x environment to locally develop Python functions. Führen Sie die folgenden Befehle aus, um eine virtuelle Umgebung mit dem Namen .venv zu erstellen und zu aktivieren.Run the following commands to create and activate a virtual environment named .venv.

Hinweis

Wurde venv nicht von Python in Ihrer Linux-Distribution installiert, können Sie dies mit dem folgenden Befehl nachholen:If Python didn't install venv on your Linux distribution, you can install it using the following command:

sudo apt-get install python3-venv

Bash:Bash:

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

PowerShell oder eine Windows-Eingabeaufforderung:PowerShell or a Windows command prompt:

py -m venv .venv
.venv\scripts\activate

Nachdem Sie die virtuelle Umgebung nun aktiviert haben, müssen Sie die restlichen Befehle darin ausführen.Now that you activated the virtual environment, run the remaining commands in it. Führen Sie deactivate aus, um die virtuelle Umgebung zu verlassen.To get out of the virtual environment, run deactivate.

Erstellen eines lokalen FunktionsprojektsCreate a local functions project

Ein Funktionsprojekt ist das Äquivalent einer Funktions-App in Azure.A functions project is the equivalent of a function app in Azure. Es kann mehrere Funktionen aufweisen, die die gleichen lokalen und Hostingkonfigurationen gemein haben.It can have multiple functions that all share the same local and hosting configurations.

  1. Führen Sie in der virtuellen Umgebung den folgenden Befehl aus:In the virtual environment, run the following command:

    func init MyFunctionProj
    
  2. Wählen Sie python als Workerruntime aus.Select python as your worker runtime.

    Mit dem Befehl wird der Ordner MyFunctionProj erstellt.The command creates a MyFunctionProj folder. Er enthält die folgenden drei Dateien:It contains these three files:

    • local.settings.json: Wird verwendet, um bei der lokalen Ausführung App-Einstellungen und Verbindungszeichenfolgen zu speichern.local.settings.json: used to store app settings and connection strings when running locally. Diese Datei wird nicht in Azure veröffentlicht.This file doesn't get published to Azure.
    • requirements.txt: Enthält die Liste mit den Paketen, die vom System beim Veröffentlichen in Azure installiert werden.requirements.txt: contains the list of packages the system will install on publishing to Azure.
    • host.json: Enthält globale Konfigurationsoptionen, die sich auf alle Funktionen in einer Funktions-App auswirken.host.json: contains global configuration options that affect all functions in a function app. Diese Datei wird in Azure veröffentlicht.This file does get published to Azure.
  3. Navigieren Sie zum neuen Ordner MyFunctionProj:Go to the new MyFunctionProj folder:

    cd MyFunctionProj
    

Erstellen einer FunktionCreate a function

Fügen Sie dem neuen Projekt eine Funktion hinzu.Add a function to the new project.

  1. Führen Sie den folgenden Befehl aus, um Ihrem Projekt eine Funktion hinzuzufügen:To add a function to your project, run the following command:

    func new
    
  2. Verwenden Sie den Abwärtspfeil, um die Vorlage HTTP-Trigger auszuwählen.Use your down-arrow to select the HTTP trigger template.

  3. Geben Sie nach der Aufforderung zum Angeben eines Funktionsnamens den Namen HttpTrigger ein, und drücken Sie die EINGABETASTE.When you're prompted for a function name, enter HttpTrigger and then press Enter.

Mit diesen Befehlen wird ein Unterordner mit dem Namen HttpTrigger erstellt.These commands create a subfolder named HttpTrigger. Er enthält die folgenden Dateien:It contains the following files:

  • function.json: Konfigurationsdatei, die die Funktion, Trigger und weitere Bindungen definiert.function.json: configuration file that defines the function, trigger, and other bindings. Beachten Sie Folgendes: Der Wert für scriptFile verweist auf die Datei, die die Funktion enthält, und der Aufruftrigger und die Bindungen sind im Array bindings definiert.Notice that in this file, the value for scriptFile points to the file containing the function, and the bindings array defines the invocation trigger and bindings.

    Für jede Bindung sind eine Richtung, ein Typ und ein eindeutiger Name erforderlich.Each binding requires a direction, type and a unique name. Der HTTP-Trigger weist eine Eingabebindung vom Typ httpTrigger und eine Ausgabebindung vom Typ http auf.The HTTP trigger has an input binding of type httpTrigger and output binding of type http.

  • __Init__.py: Skriptdatei, die Ihre per HTTP ausgelöste Funktion darstellt.__init__.py: script file that is your HTTP triggered function. Beachten Sie, dass dieses Skript über ein main()-Standardelement verfügt.Notice that this script has a default main(). HTTP-Daten des Triggers werden an die Funktion übergeben, indem das req-Element mit dem Namen binding parameter verwendet wird.HTTP data from the trigger passes to the function using the req named binding parameter. Das req-Element, das in „function.json“ definiert ist, stellt eine Instanz der azure.functions.HttpRequest-Klasse dar.The req, which is defined in function.json, is an instance of the azure.functions.HttpRequest class.

    Das Rückgabeobjekt, das in function.json als $return definiert ist, ist eine Instanz der azure.functions.HttpResponse-Klasse.The return object, defined as $return in function.json, is an instance of azure.functions.HttpResponse class. Weitere Informationen finden Sie unter HTTP-Trigger und -Bindungen in Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

Lokales Ausführen der FunktionRun the function locally

Die Funktion wird lokal mit der Azure Functions-Runtime ausgeführt.The function runs locally using the Azure Functions runtime.

  1. Mit diesem Befehl wird die Funktions-App gestartet:This command starts the function app:

    func host start
    

    Nachdem der Azure Functions-Host gestartet wurde, erfolgt in etwa die folgende Ausgabe.When the Azure Functions host starts, it writes something like the following output. Sie ist hier verkürzt angegeben, um die Lesbarkeit zu verbessern:It's truncated here so you can read it better:

    
                      %%%%%%
                     %%%%%%
                @   %%%%%%    @
              @@   %%%%%%      @@
           @@@    %%%%%%%%%%%    @@@
         @@      %%%%%%%%%%        @@
           @@         %%%%       @@
             @@      %%%       @@
               @@    %%      @@
                    %%
                    %
    
    ...
    
    Content root path: C:\functions\MyFunctionProj
    Now listening on: http://0.0.0.0:7071
    Application started. Press Ctrl+C to shut down.
    
    ...
    
    Http Functions:
    
            HttpTrigger: http://localhost:7071/api/HttpTrigger
    
    [8/27/2018 10:38:27 PM] Host started (29486ms)
    [8/27/2018 10:38:27 PM] Job host started
    
  2. Kopieren Sie die URL Ihrer HttpTrigger-Funktion aus der Runtimeausgabe, und fügen Sie sie in die Adressleiste Ihres Browsers ein.Copy the URL of your HttpTrigger function from the runtime output and paste it into your browser's address bar.

  3. Hängen Sie anschließend die Abfragezeichenfolge ?name=<yourname> an diese URL an, und führen Sie die Anforderung aus.Append the query string ?name=<yourname> to this URL and execute the request. Im folgenden Screenshot ist die Antwort auf die GET-Anforderung dargestellt, die von der lokalen Funktion an den Browser zurückgegeben wird:The following screenshot shows the response to the GET request that the local function returns to the browser:

    Lokales Überprüfen im Browser

  4. Drücken Sie STRG+C, um Ihre Funktions-App herunterzufahren.Select Ctrl+C to shut down your function app.

Jetzt haben Sie die Funktion lokal ausgeführt und können die Funktions-App und andere erforderliche Ressourcen in Azure erstellen.Now that you have run your function locally, you can create the function app and other required resources in Azure.

Erstellen einer RessourcengruppeCreate a resource group

Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.Create a resource group with the az group create command. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen wie Funktionen-Apps, Datenbanken und Speicherkonten bereitgestellt und verwaltet werden.An Azure resource group is a logical container into which Azure resources like function apps, databases, and storage accounts are deployed and managed.

Im folgenden Beispiel wird eine Ressourcengruppe namens myResourceGroup erstellt.The following example creates a resource group named myResourceGroup.
Falls Sie nicht Cloud Shell verwenden, melden Sie sich erst mithilfe von az login an.If you aren't using Cloud Shell, sign in first using az login.

az group create --name myResourceGroup --location westeurope

Im Allgemeinen erstellen Sie Ressourcengruppen und Ressourcen in einer Region in Ihrer Nähe.You generally create your resource group and the resources in a region near you.

Erstellen eines Azure-SpeicherkontosCreate an Azure Storage account

Functions verwendet ein allgemeines Konto in Azure Storage, um den Zustand und andere Informationen über Ihre Funktionen zu verwalten.Functions uses a general-purpose account in Azure Storage to maintain state and other information about your functions. Erstellen Sie mit dem Befehl az storage account create ein allgemeines Storage-Konto in der erstellten Ressourcengruppe.Create a general-purpose storage account in the resource group you created by using the az storage account create command.

Ersetzen Sie im folgenden Befehl den Platzhalter <storage_name> durch einen eindeutigen Speicherkontonamen.In the following command, substitute a globally unique storage account name where you see the <storage_name> placeholder. Speicherkontonamen müssen zwischen 3 und 24 Zeichen lang sein und dürfen nur Zahlen und Kleinbuchstaben enthalten.Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.

az storage account create --name <storage_name> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

Erstellen einer Funktions-App in AzureCreate a function app in Azure

Eine Funktions-App stellt eine Umgebung für die Ausführung Ihres Funktionscodes bereit.A function app provides an environment for executing your function code. Mit ihr können Sie Funktionen zu logischen Einheiten gruppieren. Dies erleichtert die Verwaltung, Bereitstellung und Freigabe von Ressourcen.It lets you group functions as a logical unit for easier management, deployment, and sharing of resources.

Führen Sie den folgenden Befehl aus:Run the following command. Ersetzen Sie <APP_NAME> durch einen eindeutigen Funktions-App-Namen.Replace <APP_NAME> with a unique function app name. Ersetzen Sie <STORAGE_NAME> durch einen Speicherkontonamen.Replace <STORAGE_NAME> with a storage account name. <APP_NAME> ist gleichzeitig die DNS-Standarddomäne für die Funktions-App.The <APP_NAME> is also the default DNS domain for the function app. Dieser Name muss für alle Apps in Azure eindeutig sein.This name needs to be unique across all apps in Azure.

Hinweis

In derselben Ressourcengruppe können nicht gleichzeitig Linux- und Windows-Apps gehostet werden.You can't host Linux and Windows apps in the same resource group. Wenn Sie über eine bestehende Ressourcengruppe mit dem Namen myResourceGroup und einer Windows-Funktions-App oder -Web-App verfügen, müssen Sie eine andere Ressourcengruppe verwenden.If you have an existing resource group named myResourceGroup with a Windows function app or web app, you must use a different resource group.

az functionapp create --resource-group myResourceGroup --os-type Linux \
--consumption-plan-location westeurope  --runtime python \
--name <APP_NAME> --storage-account  <STORAGE_NAME>

Mit dem obigen Befehl wird in derselben Ressourcengruppe auch eine zugeordnete Azure Application Insights-Instanz bereitgestellt.The preceding command also provisions an associated Azure Application Insights instance in the same resource group. Sie können diese Instanz verwenden, um Ihre Funktions-App zu überwachen und Protokolle anzuzeigen.You can use this instance to monitor your function app and view logs.

Nun können Sie Ihr lokales Funktions-Projekt in der Funktions-App in Azure veröffentlichen.You're now ready to publish your local functions project to the function app in Azure.

Bereitstellen des Funktions-App-Projekts in AzureDeploy the function app project to Azure

Nachdem Sie die Funktions-App in Azure erstellt haben, können Sie den Core Tools-Befehl func azure functionapp publish verwenden, um Ihren Projektcode in Azure bereitzustellen.After you create the function app in Azure, you can use the func azure functionapp publish Core Tools command to deploy your project code to Azure. Ersetzen Sie in diesem Beispiel <APP_NAME> durch den Namen Ihrer App.In this example, replace <APP_NAME> with the name of your app.

func azure functionapp publish <APP_NAME> --build remote

Mit der Option --build remote wird das Python-Projekt auf der Grundlage der Dateien im Bereitstellungspaket remote in Azure erstellt.The --build remote option builds your Python project remotely in Azure from the files in the deployment package.

Ihnen wird daraufhin eine Ausgabe angezeigt, die in etwa wie die folgende Meldung aussieht.You'll see output similar to the following message. Sie ist hier verkürzt angegeben, um die Lesbarkeit zu verbessern:It's truncated here so you can read it better:

Getting site publishing info...
...

Preparing archive...
Uploading content...
Upload completed successfully.
Deployment completed successfully.
Syncing triggers...
Functions in myfunctionapp:
    HttpTrigger - [httpTrigger]
        Invoke url: https://myfunctionapp.azurewebsites.net/api/httptrigger?code=cCr8sAxfBiow548FBDLS1....

Sie können den Wert Invoke url für Ihr HttpTrigger-Element kopieren und verwenden, um Ihre Funktion in Azure zu überprüfen.You can copy the Invoke url value for your HttpTrigger and use it to verify your function in Azure. Die URL enthält den Abfragezeichenfolgenwert code, bei dem es sich um Ihren Funktionsschlüssel handelt. Daher ist es für andere Personen schwierig, Ihren HTTP-Triggerendpunkt in Azure aufzurufen.The URL contains a code query string value that is your function key, which makes it difficult for others to call your HTTP trigger endpoint in Azure.

Überprüfen der Funktion in AzureVerify the function in Azure

Überprüfen Sie die bereitgestellte Funktion mit cURL.Use cURL to verify the deployed function. Fügen Sie unter Verwendung der URL (einschließlich des Funktionsschlüssels), die Sie im vorherigen Schritt kopiert haben, die Abfragezeichenfolge &name=<yourname> an die URL an.Using the URL, including the function key, that you copied from the previous step, append the query string &name=<yourname> to the URL.

Verwenden von cURL zum Aufrufen der Funktion in Azure

Sie können auch die kopierte URL (einschließlich des Funktionsschlüssels) in die Adressleiste des Webbrowsers einfügen.You can also paste the copied URL, including the function key, into the address bar of your web browser. Hängen Sie die Abfragezeichenfolge &name=<yourname> erneut an die URL an, bevor Sie die Anforderung ausführen.Again, append the query string &name=<yourname> to the URL before you execute the request.

Verwenden eines Webbrowsers zum Aufrufen der Funktion

Hinweis

Verwenden Sie die Live Metrics Stream-Features von Application Insights, um Protokolle für eine veröffentlichte Python-App nahezu in Echtzeit anzuzeigen.To view near real-time logs for a published Python app, use the Application Insights Live Metrics Stream.

Nächste SchritteNext steps

Sie haben ein Python-Funktionsprojekt mit einer per HTTP ausgelösten Funktion erstellt, es auf Ihrem lokalen Computer ausgeführt und es in Azure bereitgestellt.You've created a Python functions project with an HTTP triggered function, run it on your local machine, and deployed it to Azure. Erweitern Sie nun Ihre Funktion durch...Now, extend your function by...