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
Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
.NET 6.0 SDK und optional .NET 7.0 SDK bei .NET 7.0
Visual Studio Code auf einer der unterstützten Plattformen
C#-Erweiterung für Visual Studio Code.
Azure Functions-Erweiterung für Visual Studio Code
Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Node.js 14.x oder höher. Verwenden Sie den Befehl
node --version
, um Ihre Version zu überprüfen.Visual Studio Code auf einer der unterstützten Plattformen
Azure Functions-Erweiterung für Visual Studio Code Diese Erweiterung installiert Azure Functions Core Tools für Sie, wenn Sie Ihre Funktionen zum ersten Mal lokal ausführen.
Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Visual Studio Code auf einer der unterstützten Plattformen
Azure Functions-Erweiterung für Visual Studio Code
Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Von Azure Functions unterstützte Python-Versionen. Weitere Informationen finden Sie unter Installieren von Python.
Visual Studio Code auf einer der unterstützten Plattformen
Python-Erweiterung für Visual Studio Code
Azure Functions-Erweiterung für Visual Studio Code
Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Java Development Kit, Version 8, 11, 17 oder 21 (Linux)
Apache Maven, Version 3.0 oder höher
Visual Studio Code auf einer der unterstützten Plattformen
Azure Functions-Erweiterung für Visual Studio Code
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.
Ö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.
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.
Öffnen Sie Ihre Funktions-App in Visual Studio Code.
Öffnen Sie die Befehlspalette (drücken Sie F1), und geben Sie
Azure Functions: Create Function...
ein. Wählen Sie dann Neues Projekt erstellen aus.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.
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
oderJava 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.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
Öffnen Sie die Projektdatei „host.json“, und untersuchen Sie das
extensionBundle
-Element.Wenn
extensionBundle.version
nicht mindestens3.3.0
ist, ersetzen SieextensionBundle
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>"
}
]
}
Ersetzen Sie den Inhalt der generierten Datei
Function.java
durch den folgenden Code, und benennen Sie die Datei inBlobTriggerEventGrid.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"); } }
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.
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:
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:
Starten des Debugvorgangs
Starten Sie ihr lokales Projekt wie folgt, während ngrok bereits ausgeführt wird:
Legen Sie einen Haltepunkt in Ihrer Funktion in der Zeile fest, welche die Protokollierung verarbeitet.
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.
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.
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.
Wählen Sie die Option Ereignisse im linken Menü aus.
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. Wählen Sie die Auswahl bestätigen aus, um die Endpunkt-URL zu überprüfen.
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.
Öffnen Sie in Visual Studio Code die Befehlspalette (drücken Sie F1), und geben Sie
Azure Storage: Upload Files...
ein.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.
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.
Geben Sie in der Befehlspalette Azure Functions: Funktions-App in Azure erstellen... (Erweitert) ein.
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.
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.
Wenn Sie aufgefordert werden, vorherige Bereitstellungen zu überschreiben, wählen Sie Bereitstellen aus, um Ihren Funktionscode in der neuen Funktions-App-Ressource bereitzustellen.
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.
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
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.
Wählen Sie unter Funktionen im linken Menü App-Schlüssel aus.
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.
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.
Wählen Sie im Azure-Portal die Option Ereignisse im linken Menü aus.
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.
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. Wählen Sie die Auswahl bestätigen aus, um die Endpunkt-URL zu überprüfen.
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.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.
Wählen Sie auf der Seite Ihres Speicherkontos im Portal Container aus, und wählen Sie dann Ihren Container samples-workitems aus.
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.Kehren Sie in Ihrem Speicherkonto zur Seite Ereignisse zurück, und wählen Sie Ereignisabonnements aus. Sie sollten sehen, dass ein Ereignis übermittelt wurde.
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.
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.
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.Wählen Sie Ihre Funktions-App aus, und drücken Sie die EINGABETASTE. Die Seite der Funktions-App wird im Azure-Portal geöffnet.
Wählen Sie auf der Registerkarte Übersicht den benannten Link neben Ressourcengruppe aus.
Ü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.
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.