Tutorial: Auslösen von Azure Functions für Blobcontainer mithilfe eines Ereignisabonnements

Wenn Sie eine frühere Version des Blob Storage-Triggers mit Azure Functions verwenden, kommt es häufig zu Verzögerungen bei der Ausführung, weil der Trigger den Blobcontainer nach Updates abfragt. Sie können die Wartezeit verringern, indem Sie Ihre Funktion über ein Ereignisabonnement für denselben Container auslösen. Das Ereignisabonnement verwendet die Event Grid-Infrastruktur, um Änderungen im Container während des Auftretens weiterzuleiten. Sie können diese Funktionalität mit den aktuellen Azure Functions-Erweiterungen implementieren.

Dieser Artikel zeigt, wie Sie eine Funktion erstellen, die ereignisbasiert ausgeführt wird, wenn ein Blob zu einem Container hinzugefügt wird. Sie verwenden Visual Studio Code für die lokale Entwicklung und um zu prüfen, ob die Funktion lokal funktioniert, bevor Sie Ihr Projekt in Azure bereitstellen.

  • Erstellen Sie ein allgemeines v2-Speicherkonto in Azure Storage.
  • Erstellen Sie einen Container im Blobspeicher.
  • Erstellen Sie eine ereignisgesteuerte, von Blob Storage ausgelöste Funktion.
  • Erstellen Sie ein Ereignisabonnement für einen Blobcontainer.
  • Debuggen Sie lokal mithilfe von ngrok, indem Sie Dateien hochladen.
  • Führen Sie die Bereitstellung in Azure aus, und erstellen Sie ein gefiltertes Ereignisabonnement.

Wichtig

In diesem Artikel werden Registerkarten verwendet, um mehrere Versionen des Node.js-Programmiermodells zu unterstützen. Das v4-Modell ist allgemein verfügbar und bietet JavaScript- und TypeScript-Entwicklern eine flexiblere und intuitivere Erfahrung. Weitere Informationen zur Funktionsweise des v4-Modells finden Sie im Azure Functions Node.js-Entwicklerhandbuch. Weitere Informationen zu den Unterschieden zwischen v3 und v4 finden Sie im Migrationshandbuch.

Voraussetzungen

  • Das ngrok-Hilfsprogramm, das Azure eine Möglichkeit zum Aufrufen Ihrer lokal ausgeführten Funktion bietet.

  • Azure Storage-Erweiterung für Visual Studio Code, mindestens Version 5.x.

Hinweis

Die Azure Storage-Erweiterung für Visual Studio Code befindet sich derzeit in der Vorschauphase.

Erstellen eines Speicherkontos

Zur Verwendung eines Ereignisabonnements mit Azure Storage benötigen Sie ein universelles v2-Speicherkonto. Standardmäßig können Sie dieses Speicherkonto von Ihrem Visual Studio Code-Projekt aus erstellen, wenn die Azure Storage-Erweiterung installiert ist.

  1. Öffnen Sie in Visual Studio Code die Befehlspalette (drücken Sie F1), und geben Sie Azure Storage: Create Storage Account... ein. Geben Sie nach entsprechender Aufforderung folgende Informationen ein:

    Prompt Aktion
    „Enter the name of the new storage account“ (Geben Sie den Namen des neuen Speicherkontos ein.) Geben Sie einen global eindeutigen Namen an. Die Namen von Speicherkonten müssen 3 bis 24 Zeichen lang sein und dürfen nur Kleinbuchstaben und Zahlen enthalten. Zur leichteren Identifizierung verwenden wir für die Ressourcengruppe und die Funktions-App den gleichen Namen.
    Auswählen eines Standorts für neue Ressourcen Wählen Sie eine Region in Ihrer Nähe aus, um eine bessere Leistung zu erzielen.

    Die Erweiterung erstellt ein neues universelles v2-Speicherkonto mit dem von Ihnen angegebenen Namen. Der gleiche Name wird auch für die Ressourcengruppe verwendet, die das Speicherkonto enthält.

  2. Nachdem Sie das Speicherkonto erstellt haben, öffnen Sie die Befehlspalette (drücken Sie F1), und geben Sie Azure Storage: Create Blob Container... ein. Geben Sie nach entsprechender Aufforderung folgende Informationen ein:

    Prompt Aktion
    Ressource auswählen Wählen Sie das von Ihnen erstellte Speicherkonto aus.
    Eingeben eines Namens für den neuen Blobcontainer Geben Sie samples-workitems ein. Dies ist der Containername, auf den in Ihrem Codeprojekt verwiesen wird.

Nachdem Sie den Blobcontainer erstellt haben, können Sie sowohl die Funktion erstellen, die für diesen Container ausgelöst wird, als auch das Ereignisabonnement, das Ereignisse für Ihre Funktion bereitstellt.

Erstellen einer durch Blob Storage ausgelösten Funktion

Wenn Sie Visual Studio Code zum Erstellen einer durch Blob Storage ausgelösten Funktion verwenden, erstellen Sie auch ein neues Projekt. Anschließend müssen Sie die Funktion ändern, um anstelle des regulär abgefragten Containers ein Ereignisabonnement als Quelle zu nutzen.

  1. Öffnen Sie Ihre Funktions-App in Visual Studio Code.

  2. Öffnen Sie die Befehlspalette (drücken Sie F1), und geben Sie Azure Functions: Create Function... ein. Wählen Sie dann Neues Projekt erstellen aus.

  3. Wählen Sie den Verzeichnisspeicherort für Ihren Projektarbeitsbereich aus. Erstellen Sie entweder einen neuen Ordner, oder wählen Sie einen leeren Ordner für den Projektarbeitsbereich aus.

    Wählen Sie keinen Projektordner aus, der bereits Teil eines Arbeitsbereichs ist.

  4. Geben Sie nach entsprechender Aufforderung folgende Informationen ein:

    Prompt Aktion
    Sprache auswählen Wählen Sie C# aus.
    Auswählen einer .NET-Laufzeit Wählen Sie .NET 6.0 Isolated LTS für die Ausführung in einem isolierten Workerprozess oder .NET 6.0 LTS für In-Process aus.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Wählen Sie Azure Blob Storage trigger aus.
    Angeben eines Funktionsnamens Geben Sie BlobTriggerEventGrid ein.
    Angeben eines Namespaces Geben Sie My.Functions ein.
    Select setting from "local.setting.json" (Eine Einstellung aus „local.setting.json“ auswählen) Wählen Sie Create new local app setting aus.
    Auswählen eines Speicherkontos Wählen Sie das Speicherkonto aus der Liste aus, das Sie erstellt haben.
    Dies ist der Pfad innerhalb Ihres Speicherkontos, das vom Trigger überwacht wird. Übernehmen Sie den Standardwert samples-workitems.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Wählen Sie Open in current window aus.
    Prompt Aktion
    Sprache auswählen Wählen Sie Python aus.
    Auswählen einer Python-Interpreters zum Erstellen einer virtuellen Umgebung Wählen Sie Ihren bevorzugten Python-Interpreter aus. Sollte eine Option nicht angezeigt werden, geben Sie den vollständigen Pfad Ihrer Python-Binärdatei ein.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Wählen Sie Azure Blob Storage trigger aus.
    Angeben eines Funktionsnamens Geben Sie BlobTriggerEventGrid ein.
    Select setting from "local.setting.json" (Eine Einstellung aus „local.setting.json“ auswählen) Wählen Sie Create new local app setting aus.
    Auswählen eines Speicherkontos Wählen Sie das Speicherkonto aus der Liste aus, das Sie erstellt haben.
    Dies ist der Pfad innerhalb Ihres Speicherkontos, das vom Trigger überwacht wird. Übernehmen Sie den Standardwert samples-workitems.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Wählen Sie Open in current window aus.
    Prompt Aktion
    Sprache auswählen Wählen Sie Java aus.
    Auswählen einer Java-Version Wählen Sie Java 11 oder Java 8 aus, die Java-Version, in der Ihre Funktionen in Azure ausgeführt werden und die Sie lokal überprüft haben.
    Angeben einer Gruppen-ID Wählen Sie com.function aus.
    Angeben einer Artefakt-ID Wählen Sie BlobTriggerEventGrid aus.
    Angeben einer Version Wählen Sie 1.0-SNAPSHOT aus.
    Angeben eines Paketnamens Wählen Sie com.function aus.
    Angeben eines App-Namens Akzeptieren Sie den generierten Namen, der mit BlobTriggerEventGrid beginnt.
    Auswählen des Buildtools für Java-Projekte Wählen Sie Maven aus.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Wählen Sie Open in current window aus.
    Prompt Aktion
    Auswählen einer Sprache für Ihr Funktionsprojekt Wählen Sie TypeScript aus.
    Wählen Sie ein TypeScript-Programmiermodell aus. Wählen Sie Model V4 aus.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Wählen Sie Azure Blob Storage trigger aus.
    Angeben eines Funktionsnamens Geben Sie BlobTriggerEventGrid ein.
    Select setting from "local.setting.json" (Eine Einstellung aus „local.setting.json“ auswählen) Wählen Sie Create new local app setting aus.
    Auswählen eines Speicherkontos Wählen Sie das von Ihnen erstellte Speicherkonto aus.
    Dies ist der Pfad innerhalb Ihres Speicherkontos, das vom Trigger überwacht wird. Übernehmen Sie den Standardwert samples-workitems.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Wählen Sie Open in current window aus.
    Prompt Aktion
    Auswählen einer Sprache für Ihr Funktionsprojekt Wählen Sie JavaScript aus.
    Auswählen eines JavaScript-Programmiermodells Wählen Sie Model V4 aus.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Wählen Sie Azure Blob Storage trigger aus.
    Angeben eines Funktionsnamens Geben Sie BlobTriggerEventGrid ein.
    Select setting from "local.setting.json" (Eine Einstellung aus „local.setting.json“ auswählen) Wählen Sie Create new local app setting aus.
    Auswählen eines Speicherkontos Wählen Sie das von Ihnen erstellte Speicherkonto aus.
    Dies ist der Pfad innerhalb Ihres Speicherkontos, das vom Trigger überwacht wird. Übernehmen Sie den Standardwert samples-workitems.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Wählen Sie Open in current window aus.
    Prompt Aktion
    Auswählen einer Sprache für Ihr Funktionsprojekt Wählen Sie PowerShell aus.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Wählen Sie Azure Blob Storage trigger aus.
    Angeben eines Funktionsnamens Geben Sie BlobTriggerEventGrid ein.
    Select setting from "local.setting.json" (Eine Einstellung aus „local.setting.json“ auswählen) Wählen Sie Create new local app setting aus.
    Auswählen eines Speicherkontos Wählen Sie das von Ihnen erstellte Speicherkonto aus.
    Dies ist der Pfad innerhalb Ihres Speicherkontos, das vom Trigger überwacht wird. Übernehmen Sie den Standardwert samples-workitems.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Wählen Sie Open in current window aus.
  5. Wenn Sie dazu aufgefordert werden, wählen Sie Speicherkonto auswählen>Zum Arbeitsbereich hinzufügen aus.

Der Einfachheit halber wird in diesem Tutorial das Speicherkonto für Ihre Funktions-App wiederverwendet. In der Produktion möchten Sie jedoch möglicherweise ein separates Speicherkonto für Ihre Funktions-App verwenden. Weitere Informationen finden Sie unter Speicheraspekte für Azure Functions.

Upgrade der Storage-Erweiterung

Zur Verwendung des Event Grid-basierten Blob Storage-Triggers benötigt Ihre Funktion mindestens Version 5.x der Storage-Erweiterung.

Führen Sie zum Upgrade Ihres Projekts auf die benötigte Erweiterungsversion im Terminalfenster den folgenden Befehl aus: dotnet add package

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs --version 6.1.0
  1. Öffnen Sie die Projektdatei „host.json“, und untersuchen Sie das extensionBundle-Element.

  2. Wenn extensionBundle.version nicht mindestens 3.3.0 ist, ersetzen Sie extensionBundle durch die neueste Version:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

Aktualisieren der Funktion für die Verwendung von Ereignissen

Fügen Sie in der Datei „BlobTriggerEventGrid.cs“ den Parametern für das Blobtriggerattribut Source = BlobTriggerSource.EventGrid hinzu, z. B.:

[Function("BlobTriggerCSharp")]
public async Task Run([BlobTrigger("samples-workitems/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myBlob, string name, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("BlobTriggerCSharp");
    logger.LogInformation($"C# Blob trigger function Processed blob\n Name: {name} \n Size: {myBlob.Length} Bytes");
}

Fügen Sie nach dem Erstellen der Funktion in der Konfigurationsdatei „function.json“ "source": "EventGrid" der myBlob-Bindung hinzu, wie im folgenden Beispiel gezeigt:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-workitems/{name}",
      "source": "EventGrid",
      "connection": "<NAMED_STORAGE_CONNECTION>"
    }
  ]
}
  1. Ersetzen Sie den Inhalt der generierten Datei Function.java durch den folgenden Code, und benennen Sie die Datei in BlobTriggerEventGrid.java um:

    package com.function;
    
    import com.microsoft.azure.functions.annotation.*;
    import com.microsoft.azure.functions.*;
    
    /**
    * Azure Functions with Azure Blob trigger.
    */
    public class BlobTriggerEventGrid {
        /**
        * This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
        */
        @FunctionName("BlobTriggerEventGrid")
        @StorageAccount("glengatesteventgridblob_STORAGE")
        public void run(
            @BlobTrigger(name = "content", path = "samples-workitems/{name}", dataType = "binary", source = "EventGrid" ) byte[] content,
            @BindingName("name") String name,
            final ExecutionContext context
        ) {
              context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n  Size: " + content.length + " Bytes");
          }
    }
    
  2. Entfernen Sie die zugeordnete Komponententestdatei, die nicht mehr auf den neuen Triggertyp anwendbar ist.

Nachdem Sie die Funktion erstellt haben, fügen Sie source: "EventGrid" dem options-Objekt in Ihrer TypeScript-Datei hinzu, z. B.:

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: storageBlobTrigger1,
});

Nachdem Sie die Funktion erstellt haben, fügen Sie source: "EventGrid" dem options-Objekt in Ihrer JavaScript-Datei hinzu, z. B.:

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

Fügen Sie nach dem Erstellen der Funktion in der Konfigurationsdatei „function.json“ "source": "EventGrid" der myBlob-Bindung hinzu, wie im folgenden Beispiel gezeigt:

{
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "source": "EventGrid",
            "connection": "<NAMED_STORAGE_CONNECTION>"
        }
    ]
}

Starten des lokalen Debuggens

Event Grid überprüft die Endpunkt-URL, wenn Sie ein Ereignisabonnement im Azure-Portal erstellen. Diese Überprüfung bedeutet, dass Ihre Funktion lokal mit durch das ngrok-Hilfsprogramm aktiviertem Remotezugriff ausgeführt werden muss, bevor Sie ein Ereignisabonnement für das lokale Debuggen erstellen können. Wenn Ihr lokaler Funktionscode nicht ausgeführt wird und Azure nicht darauf zugreifen kann, können Sie das Ereignisabonnement nicht erstellen.

Bestimmen des Blobtriggerendpunkts

Wenn Ihre Funktion lokal ausgeführt wird, sieht der Standardendpunkt für einen ereignisgesteuerten Blobspeichertrigger wie die folgende URL aus:

http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid
http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid

Speichern Sie diesen Pfad, den Sie später zum Erstellen von Endpunkt-URLs für Ereignisabonnements verwenden. Wenn Sie einen anderen Namen für die durch Blob Storage ausgelöste Funktion verwendet haben, müssen Sie den functionName-Wert in der Abfragezeichenfolge ändern.

Hinweis

Da der Endpunkt Ereignisse für einen Blob Storage-Trigger verarbeitet, enthält der Endpunktpfad blobs. Die Endpunkt-URL für einen Event Grid-Trigger würde stattdessen eventgrid im Pfad verwenden.

Ausführen von ngrok

Um in eine Funktion einzugreifen, die auf Ihrem Computer debuggt wird, müssen Sie Azure Event Grid eine Möglichkeit bieten, mit Funktionen zu kommunizieren, die auf Ihrem lokalen Computer ausgeführt werden.

Das ngrok-Hilfsprogramm leitet externe Anforderungen für eine zufällig generierte Proxyserveradresse an eine bestimmte Adresse und einen Port auf Ihrem lokalen Computer weiter. um den Webhookendpunkt der Funktion aufzurufen, die auf Ihrem Computer ausgeführt wird.

  1. Starten Sie ngrok über den folgenden Befehl:

    ngrok.exe http http://localhost:7071
    

    Während das Hilfsprogramm gestartet wird, sollte das Befehlsfenster in etwa wie im folgenden Screenshot aussehen:

    Screenshot that shows the Command Prompt after starting the

  2. Kopieren Sie die HTTPS-URL, die beim Ausführen von ngrok generiert wird. Dieser Wert wird verwendet, um den Webhookendpunkt auf Ihrem Computer zu bestimmen, der mithilfe von ngrok verfügbar gemacht wird.

Wichtig

Halten Sie an diesem Punkt ngrok nicht an. Bei jedem Start von ngrok wird die HTTPS-URL mit einem anderen Wert neu generiert. Da der Endpunkt eines Ereignisabonnements nicht geändert werden kann, müssen Sie bei jeder Ausführung von ngrok jedes Mal ein neues Ereignisabonnement erstellen.

Wenn Sie kein ngrok-Konto erstellen, ist die maximale ngrok-Sitzungszeit auf zwei Stunden begrenzt.

Erstellen der Endpunkt-URL

Der Endpunkt, der im Ereignisabonnement verwendet wird, besteht aus drei verschiedenen Komponenten: einem Servernamen mit Präfix, einem Pfad und einer Abfragezeichenfolge. In der folgenden Tabelle werden diese Komponenten beschrieben:

URL-Teil BESCHREIBUNG
Präfix und Servername Wenn Ihre Funktion lokal ausgeführt wird, stammt der Servername mit einem https://-Präfix aus der Weiterleitungs-URL, die von ngrok generiert wird. In der localhost-URL ersetzt die ngrok-URLhttp://localhost:7071. Wenn die Ausführung in Azure erfolgt, verwenden Sie stattdessen den veröffentlichten Funktions-App-Server, der in der Regel die Form https://<FUNCTION_APP_NAME>.azurewebsites.net aufweist.
Pfad Der Pfadteil der Endpunkt-URL stammt aus der zuvor kopierten localhost-URL und sieht wie /runtime/webhooks/blobs einem Blob Storage-Trigger aus. Der Pfad für einen Event Grid-Trigger wäre /runtime/webhooks/EventGrid.
Abfragezeichenfolge Für alle Sprachen, einschließlich .NET Isolated, legt der Parameter functionName=Host.Functions.BlobTriggerEventGrid den Namen der Funktion fest, die das Ereignis behandelt, mit Ausnahme von .NET In-Process, wo er in der Abfragezeichenfolge functionName=BlobTriggerEventGrid lauten sollte. Wenn Sie einen anderen Namen für Ihre Funktion verwendet haben, müssen Sie diesen Wert ändern. Ein Zugriffsschlüssel ist bei lokaler Ausführung nicht erforderlich. Wenn die Ausführung in Azure erfolgt, müssen Sie auch einen code=-Parameter in die URL einbinden, der einen Schlüssel enthält, den Sie aus dem Portal abrufen können.

Der folgende Screenshot zeigt ein Beispiel dafür, wie die endgültige Endpunkt-URL aussehen sollte, wenn ein Blob Storage-Trigger namens BlobTriggerEventGrid verwendet wird:

Endpoint selection

Starten des Debugvorgangs

Starten Sie ihr lokales Projekt wie folgt, während ngrok bereits ausgeführt wird:

  1. Legen Sie einen Haltepunkt in Ihrer Funktion in der Zeile fest, welche die Protokollierung verarbeitet.

  2. Starten einer Debugsitzung.

    Öffnen Sie ein neues Terminalfenster, und führen Sie den folgenden mvn-Befehl aus, um die Debugsitzung zu starten.

    mvn azure-functions:run -DenableDebug
    

    Drücken Sie anschließend F5, um eine Debugsitzung zu starten.

Wenn Ihr Code ausgeführt wird und ngrok Anforderungen weiterleitet, ist es an der Zeit, ein Ereignisabonnement für den Blobcontainer zu erstellen.

Erstellen des Ereignisabonnements

Ein Ereignisabonnement, das von Azure Event Grid unterstützt wird, löst Ereignisse basierend auf Änderungen im verknüpften Blobcontainer aus. Dieses Ereignis wird dann an den Webhookendpunkt für den Trigger Ihrer Funktion gesendet. Nachdem ein Ereignisabonnement erstellt wurde, kann die Endpunkt-URL nicht mehr geändert werden. Dies bedeutet, dass Sie nach Abschluss des lokalen Debuggens (oder wenn Sie ngrok neu starten) das Ereignisabonnement löschen und neu erstellen müssen.

  1. Wählen Sie das Azure-Symbol auf der Aktivitätsleiste in Visual Studio Code aus. Erweitern Sie in Ressourcen Ihr Abonnement, erweitern Sie Speicherkonten, klicken Sie mit der rechten Maustaste auf das zuvor erstellte Speicherkonto, und wählen Sie Im Portal öffnen aus.

  2. Melden Sie sich am Azure-Portal an, und notieren Sie sich die Ressourcengruppe für Ihr Speicherkonto. Sie erstellen Ihre anderen Ressourcen in derselben Gruppe, um Ressourcen leichter bereinigen zu können, wenn Sie fertig sind.

  3. Wählen Sie die Option Ereignisse im linken Menü aus.

    Add storage account event

  4. Wählen Sie im Fenster Ereignisse die Schaltfläche + Ereignisabonnement aus, und geben Sie Werte aus der folgenden Tabelle auf der Registerkarte Grundlagen an:

    Einstellung Vorgeschlagener Wert Beschreibung
    Name myBlobLocalNgrokEventSub Der Name, der das Ereignisabonnement identifiziert. Sie können den Namen verwenden, um das Ereignisabonnement schnell zu finden.
    Ereignisschema Event Grid-Schema Verwenden Sie das Standardschema für Ereignisse.
    Name des Systemthemas samples-workitems-blobs Der Name für das Thema, das den Container darstellt. Das Thema wird mit dem ersten Abonnement erstellt, und Sie verwenden es für zukünftige Ereignisabonnements.
    Nach Ereignistypen filtern Blob erstellt
    Endpunkttyp Webhook Der Blobspeichertrigger verwendet einen Webhookendpunkt. Sie würden Azure Functions für einen Event Grid-Trigger verwenden.
    Endpunkt Ihr ngrok-basierter URL-Endpunkt Verwenden Sie den ngrok-basierten URL-Endpunkt, den Sie zuvor bestimmt haben.
  5. Wählen Sie die Auswahl bestätigen aus, um die Endpunkt-URL zu überprüfen.

  6. Wählen Sie Erstellen aus, um das Ereignisabonnement zu erstellen.

Hochladen einer Datei in den Container

Wenn das Ereignisabonnement vorhanden ist und Ihr Codeprojekt und ngrok weiterhin ausgeführt werden, können Sie jetzt eine Datei in Ihren Speichercontainer hochladen, um Ihre Funktion auszulösen. Sie können eine Datei von Ihrem Computer in Ihren Blobspeichercontainer mithilfe von Visual Studio Code hochladen.

  1. Öffnen Sie in Visual Studio Code die Befehlspalette (drücken Sie F1), und geben Sie Azure Storage: Upload Files... ein.

  2. Wählen Sie im Dialogfeld Öffnen eine Datei aus, vorzugsweise eine binäre Imagedatei, die nicht zu groß ist. Wählen Sie dann Hochladen aus.

  3. Geben Sie nach entsprechender Aufforderung Folgendes ein:

    Einstellung Vorgeschlagener Wert BESCHREIBUNG
    Ressource auswählen Speicherkontoname Wählen Sie den Namen des Speicherkontos aus, das Sie in einem vorherigen Schritt erstellt haben.
    Auswählen eines Ressourcentyps Blobcontainer Sie laden in einen Blobcontainer hoch.
    Auswählen des Blobcontainers samples-workitems Dieser Wert ist der Name des Containers, den Sie in einem vorherigen Schritt erstellt haben.
    Eingeben des Zielverzeichnisses dieses Uploads default Akzeptieren Sie einfach den Standardwert von /, der der Containerstamm ist.

Dieser Befehl lädt eine Datei von Ihrem Computer in den Speichercontainer in Azure hoch. An diesem Punkt sollte Ihre aktuell ausgeführte ngrok-Instanz melden, dass eine Anforderung weitergeleitet wurde. Sie sehen auch in der Ausgabe von „func.exe“ für Ihre Debugsitzung, dass Ihre Funktion gestartet wurde. Zu diesem Zeitpunkt wartet hoffentlich Ihre Debugsitzung an der Stelle auf Sie, an der Sie den Breakpoint festgelegt haben.

Veröffentlichen des Projekts in Azure

Nachdem Sie ihren Funktionscode lokal erfolgreich überprüft haben, ist es an der Zeit, das Projekt in einer neuen Funktions-App in Azure zu veröffentlichen.

Erstellen der Funktionen-App

Die folgenden Schritte erstellen die Ressourcen, die Sie in Azure benötigen, und stellen Sie Ihre Projektdateien bereit.

  1. Geben Sie in der Befehlspalette Azure Functions: Funktions-App in Azure erstellen... (Erweitert) ein.

  2. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Auswahl
    Geben Sie einen global eindeutigen Namen für die neue Funktions-App ein. Geben Sie einen eindeutigen Namen ein, der Ihre neue Funktions-App identifiziert, und drücken Sie dann die EINGABETASTE. Gültige Zeichen für den Namen einer Funktions-App sind a-z, 0-9 und -. Notieren Sie sich diesen Namen. Sie benötigen ihn später beim Erstellen der neuen Endpunkt-URL.
    Wählen Sie einen Runtimestapel aus. Wählen Sie die lokal ausgeführte Sprachversion aus.
    Wählen Sie ein Betriebssystem aus. Wählen Sie Linux oder Windows aus. Python-Apps müssen unter Linux ausgeführt werden.
    „Select a resource group for new resources.“ (Wählen Sie eine Ressourcengruppe für neue Ressourcen aus.) Wählen Sie den Namen der Ressourcengruppe aus, die Sie mit Ihrem Speicherkonto erstellt haben, den Sie sich zuvor im Portal notiert haben.
    „Select a location for new resources.“ (Wählen Sie einen Standort für neue Ressourcen aus.) Wählen Sie einen Standort in einer Region in Ihrer Nähe oder in der Nähe anderer Dienste aus, auf die Ihre Funktionen zugreifen.
    Wählen Sie einen Hostingplan aus. Wählen Sie Verbrauch für serverloses Verbrauchsplanhosting aus, bei dem Sie nur Kosten anfallen, wenn Ihre Funktionen ausgeführt werden.
    Wählen Sie ein Speicherkonto aus. Wählen Sie den Namen des vorhandenen Speicherkontos aus, das Sie verwendet haben.
    Wählen Sie eine Application Insights-Ressource für Ihre App aus. Wählen Sie Neue Application Insights-Ressource erstellen aus, und geben Sie an der Eingabeaufforderung einen Namen für die Instanz ein, die zum Speichern von Laufzeitdaten aus Ihren Funktionen verwendet wird.

    Nach der Erstellung der Funktions-App wird eine Benachrichtigung angezeigt, und das Bereitstellungspaket wird angewendet. Wählen Sie in dieser Benachrichtigungen Ausgabe anzeigen aus, um die Erstellungs- und Bereitstellungsergebnisse (auch für die von Ihnen erstellten Azure-Ressourcen) anzuzeigen.

Bereitstellen des Funktionscodes

Wichtig

Bei der Bereitstellung in einer vorhandenen Funktions-App wird der Inhalt dieser App in Azure immer überschrieben.

  1. Suchen Sie im Bereich Ressourcen der Azure-Aktivität die soeben erstellte Funktions-App-Ressource, klicken Sie mit der rechten Maustaste auf die Ressource, und wählen Sie Bereitstellen für Funktions-App... aus.

  2. Wenn Sie aufgefordert werden, vorherige Bereitstellungen zu überschreiben, wählen Sie Bereitstellen aus, um Ihren Funktionscode in der neuen Funktions-App-Ressource bereitzustellen.

  3. Wählen Sie nach Abschluss der Bereitstellung Ausgabe anzeigen aus, um die Erstellungs- und Bereitstellungsergebnisse (auch für die von Ihnen erstellten Azure-Ressourcen) anzuzeigen. Wenn Sie die Benachrichtigung übersehen haben, wählen Sie das Glockensymbol in der unteren rechten Ecke aus, um sie erneut anzuzeigen.

    Screenshot of the View Output window.

Veröffentlichen von Anwendungseinstellungen

Da die lokalen Einstellungen von „local.settings.json“ nicht automatisch veröffentlicht werden, müssen Sie sie jetzt hochladen, damit Ihre Funktion ordnungsgemäß in Azure ausgeführt wird.

Geben Sie in der Befehlspalette Azure Functions: Lokale Einstellungen hochladen... aus, und wählen Sie in der Eingabeaufforderung Ressource auswählen den Namen Ihrer Funktions-App aus.

Erneutes Erstellen des Ereignisabonnements

Nachdem die Funktions-App in Azure ausgeführt wird, müssen Sie ein neues Ereignisabonnement erstellen. Dieses neue Ereignisabonnement verwendet den Endpunkt Ihrer Funktion in Azure. Außerdem fügen Sie dem Ereignisabonnement einen Filter hinzu, sodass die Funktion nur ausgelöst wird, wenn dem Container JPEG-Dateien hinzugefügt werden. In Azure enthält die Endpunkt-URL auch einen Zugriffsschlüssel, der dazu beiträgt, dass andere Akteure als Event Grid nicht auf den Endpunkt zugreifen können.

Abrufen des Bloberweiterungsschlüssels

  1. Wählen Sie das Azure-Symbol auf der Aktivitätsleiste in Visual Studio Code aus. Erweitern Sie in Ressourcen Ihr Abonnement, erweitern Sie Funktions-App, klicken Sie mit der rechten Maustaste auf die von Ihnen erstellte Funktions-App, und wählen Sie dann Im Portal öffnen aus.

  2. Wählen Sie unter Funktionen im linken Menü App-Schlüssel aus.

  3. Wählen Sie unter Systemschlüssel den Schlüssel namens blobs_extension aus, und kopieren Sie den Schlüssel Wert.

Sie fügen diesen Wert in die Abfragezeichenfolge der neuen Endpunkt-URL ein.

Erstellen der Endpunkt-URL

Erstellen Sie eine neue Endpunkt-URL für den Blob Storage-Trigger basierend auf dem folgenden Beispiel:

https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>

Ersetzen Sie in diesem Beispiel <FUNCTION_APP_NAME> durch den Namen Ihrer Funktions-App, und ersetzen Sie <BLOB_EXTENSION_KEY> durch den Wert, den Sie aus dem Portal abgerufen haben. Wenn Sie einen anderen Namen für Ihre Funktion verwendet haben, müssen Sie auch die functionName-Abfragezeichenfolge nach Bedarf ändern.

Erstellen eines gefilterten Ereignisabonnements

Da die Endpunkt-URL eines Ereignisabonnements nicht geändert werden kann, müssen Sie ein neues Ereignisabonnement erstellen. Sie sollten auch das alte Ereignisabonnement zu diesem Zeitpunkt löschen, da es nicht wiederverwendet werden kann.

Dieses Mal fügen Sie den Filter für das Ereignisabonnement ein, sodass nur JPEG-Dateien die Funktion auslösen.

  1. Wählen Sie das Azure-Symbol auf der Aktivitätsleiste in Visual Studio Code aus. Erweitern Sie in Ressourcen Ihr Abonnement, erweitern Sie Speicherkonten, klicken Sie mit der rechten Maustaste auf das zuvor erstellte Speicherkonto, und wählen Sie Im Portal öffnen aus.

  2. Wählen Sie im Azure-Portal die Option Ereignisse im linken Menü aus.

  3. Wählen Sie im Fenster Ereignisse Ihr altes ngrok-basiertes Ereignisabonnement aus, und wählen Sie dannLöschen>Speichern aus. Durch diese Aktion wird das alte Ereignisabonnement entfernt.

  4. Wählen Sie die Schaltfläche + Ereignisabonnement aus, und geben Sie Werte aus der folgenden Tabelle auf der Registerkarte Grundlagen an:

    Einstellung Vorgeschlagener Wert Beschreibung
    Name myBlobAzureEventSub Der Name, der das Ereignisabonnement identifiziert. Sie können den Namen verwenden, um das Ereignisabonnement schnell zu finden.
    Ereignisschema Event Grid-Schema Verwenden Sie das Standardschema für Ereignisse.
    Nach Ereignistypen filtern Blob erstellt
    Endpunkttyp Webhook Der Blobspeichertrigger verwendet einen Webhookendpunkt. Sie würden Azure Functions für einen Event Grid-Trigger verwenden.
    Endpunkt Ihr neuer Azure-basierter URL-Endpunkt Verwenden Sie den von Ihnen erstellten URL-Endpunkt, der den Schlüsselwert enthält.
  5. Wählen Sie die Auswahl bestätigen aus, um die Endpunkt-URL zu überprüfen.

  6. Wählen Sie die Registerkarte Filter aus, aktivieren Sie unter Betrefffilter die Option Betrefffilter aktivierenaus, und geben Sie dann .jpg unter Betreff endet mit ein. Ereignisse werden nun nur für JPEG-Dateien gefiltert.

    Add filter

  7. Wählen Sie Erstellen aus, um das Ereignisabonnement zu erstellen.

Überprüfen der Funktion in Azure

Wenn die gesamte Topologie jetzt Azure ausführt, ist es an der Zeit, zu überprüfen, ob alles ordnungsgemäß funktioniert. Da Sie sich bereits im Portal befinden, ist es am einfachsten, eine Datei von dort aus hochzuladen.

  1. Wählen Sie auf der Seite Ihres Speicherkontos im Portal Container aus, und wählen Sie dann Ihren Container samples-workitems aus.

  2. Wählen Sie die Schaltfläche Hochladen aus, um die Uploadseite auf der rechten Seite zu öffnen, navigieren Sie zum lokalen Dateisystem, um eine .jpg-Datei zum Hochladen auszuwählen, und wählen Sie dann die Schaltfläche Hochladen aus, um das Blob hochzuladen. Jetzt können Sie überprüfen, ob Ihre Funktion basierend auf dem Containeruploadereignis ausgeführt wurde.

  3. Kehren Sie in Ihrem Speicherkonto zur Seite Ereignisse zurück, und wählen Sie Ereignisabonnements aus. Sie sollten sehen, dass ein Ereignis übermittelt wurde.

  4. Wählen Sie auf der Seite Ihrer Funktions-App im Portal unter Funktionen die Option Funktionen und dann Ihre Funktion aus. Es sollte eine Gesamtausführungsanzahl von mindestens Eins angezeigt werden.

  5. Wählen Sie unter Entwickler die Option Überwachen aus. Es sollten Ablaufverfolgungen angezeigt werden, die aus Ihren erfolgreichen Funktionsausführungen geschrieben wurden. Es kann eine Verzögerung von bis zu fünf Minuten auftreten, da Ereignisse von Application Insights verarbeitet werden.

Bereinigen von Ressourcen

Wenn Sie mit dem nächsten Schritt fortfahren und Ihrer Funktion eine Azure Storage-Warteschlangenbindung hinzufügen möchten, müssen alle Ihre Ressourcen erhalten bleiben, um darauf aufbauen zu können.

Andernfalls können Sie die Funktions-App und die zugehörigen Ressourcen wie im Anschluss beschrieben löschen, um weitere Kosten zu vermeiden.

  1. Drücken Sie in Visual Studio Code F1, um die Befehlspalette zu öffnen. Suchen Sie in der Befehlspalette den Befehl Azure: Open in portal, und wählen Sie ihn aus.

  2. Wählen Sie Ihre Funktions-App aus, und drücken Sie die EINGABETASTE. Die Seite der Funktions-App wird im Azure-Portal geöffnet.

  3. Wählen Sie auf der Registerkarte Übersicht den benannten Link neben Ressourcengruppe aus.

    Screenshot of select the resource group to delete from the function app page.

  4. Überprüfen Sie auf der Seite Ressourcengruppe die Liste mit den enthaltenen Ressourcen, und vergewissern Sie sich, dass es sich dabei um die Ressourcen handelt, die Sie löschen möchten.

  5. Klicken Sie auf Ressourcengruppe löschen, und folgen Sie den Anweisungen.

    Der Löschvorgang kann einige Minuten dauern. Nach Abschluss des Vorgangs wird kurz eine Benachrichtigung angezeigt. Sie können auch am oberen Seitenrand auf das Glockensymbol klicken, um die Benachrichtigung anzuzeigen.

Weitere Informationen zu den Kosten von Functions finden Sie unter Abschätzen der Kosten des Verbrauchstarifs.

Nächste Schritte