Tutorial: Automatisieren der Größenänderung von hochgeladenen Bildern mit Event GridTutorial: Automate resizing uploaded images using Event Grid

Azure Event Grid ist ein Ereignisdienst für die Cloud.Azure Event Grid is an eventing service for the cloud. Event Grid ermöglicht Ihnen das Erstellen von Abonnements für Ereignisse, die von Azure-Diensten oder Drittanbieterressourcen ausgelöst werden.Event Grid enables you to create subscriptions to events raised by Azure services or third-party resources.

Dieses Tutorial stellt Teil zwei einer Reihe von Tutorials zu Storage dar.This tutorial is part two of a series of Storage tutorials. Es erweitert das vorherige Tutorial zu Storage, um serverlose automatische Miniaturansichtengenerierung mithilfe von Azure Event Grid und Azure Functions hinzuzufügen.It extends the previous Storage tutorial to add serverless automatic thumbnail generation using Azure Event Grid and Azure Functions. Event Grid ermöglicht, dass Azure Functions auf Ereignisse von Azure Blob Storage reagieren kann und Miniaturansichten hochgeladener Bilder generiert.Event Grid enables Azure Functions to respond to Azure Blob storage events and generate thumbnails of uploaded images. Ein Ereignisabonnement wird für das Blob Storage-Erstellungsereignis erstellt.An event subscription is created against the Blob storage create event. Wenn ein Blob einem bestimmten Blob Storage-Container hinzugefügt wird, wird ein Funktionsendpunkt aufgerufen.When a blob is added to a specific Blob storage container, a function endpoint is called. Aus Event Grid an die Funktionsbindung übergebene Daten werden für den Zugriff auf das Blob und zum Generieren der Miniaturansicht verwendet.Data passed to the function binding from Event Grid is used to access the blob and generate the thumbnail image.

Sie verwenden die Azure-CLI und das Azure-Portal, um die Größenänderungsfunktionalität einer vorhandenen Bildupload-App hinzuzufügen.You use the Azure CLI and the Azure portal to add the resizing functionality to an existing image upload app.

In diesem Tutorial lernen Sie Folgendes:In this tutorial, you learn how to:

  • Erstellen eines neuen Azure Storage-KontosCreate a general Azure Storage account
  • Bereitstellen von serverlosem Code mit Azure FunctionsDeploy serverless code using Azure Functions
  • Erstellen eines Blob Storage-Ereignisabonnements in Event GridCreate a Blob storage event subscription in Event Grid

VoraussetzungenPrerequisites

Hinweis

Dieser Artikel wurde aktualisiert und beinhaltet jetzt das neue Az-Modul von Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Sie können das AzureRM-Modul weiterhin verwenden, das bis mindestens Dezember 2020 weiterhin Fehlerbehebungen erhält.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Weitere Informationen zum neuen Az-Modul und zur Kompatibilität mit AzureRM finden Sie unter Introducing the new Azure PowerShell Az module (Einführung in das neue Az-Modul von Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Anweisungen zur Installation des Az-Moduls finden Sie unter Install Azure PowerShell (Installieren von Azure PowerShell).For Az module installation instructions, see Install Azure PowerShell.

Für dieses Tutorial benötigen Sie Folgendes:To complete this tutorial:

Sie müssen das vorherige Blob Storage-Tutorial abgeschlossen haben: Hochladen von Bilddaten in die Cloud mit Azure Storage.You must have completed the previous Blob storage tutorial: Upload image data in the cloud with Azure Storage.

Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

Falls Sie den Event Grid-Ressourcenanbieter noch nicht in Ihrem Abonnement registriert haben, stellen Sie sicher, dass er registriert ist.If you've not previously registered the Event Grid resource provider in your subscription, make sure it's registered.

az provider register --namespace Microsoft.EventGrid

Verwenden von Azure Cloud ShellUse Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell ermöglicht die Verwendung von bash oder PowerShell, um mit Azure-Diensten zu arbeiten.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Starten von Azure Cloud Shell:To launch Azure Cloud Shell:

OptionOption Beispiel/LinkExample/Link
Klicken Sie in der rechten oberen Ecke eines Codeblocks auf Ausprobieren.Select Try It in the upper-right corner of a code block. Durch die Auswahl von Ausprobieren wird der Code nicht automatisch in Cloud Shell kopiert.Selecting Try It doesn't automatically copy the code to Cloud Shell. Beispiel für „Testen Sie es.“ für Azure Cloud Shell
Rufen Sie https://shell.azure.com auf, oder wählen Sie die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Starten von Cloud Shell in einem neuen FensterLaunch Cloud Shell in a new window
Wählen Sie im Azure-Portal oben rechts in der Menüleiste die Schaltfläche Cloud Shell.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Cloud Shell-Schaltfläche im Azure-Portal

Ausführen des Codes in diesem Artikel in Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Öffnen Sie Cloud Shell.Open Cloud Shell.
  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock, um den Code zu kopieren.Select the Copy button on a code block to copy the code.
  3. Fügen Sie den Code mit STRG+UMSCHALT+V unter Windows und Linux oder Cmd+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Drücken Sie die EINGABETASTE, um den Code auszuführen.Press Enter to run the code.

Wenn Sie die CLI lokal installieren und verwenden möchten, erfordert dieses Tutorial die Azure CLI-Version 2.0.14 oder höher.If you choose to install and use the CLI locally, this tutorial requires the Azure CLI version 2.0.14 or later. Führen Sie az --version aus, um die Version zu finden.Run az --version to find the version. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.If you need to install or upgrade, see Install Azure CLI.

Falls Sie nicht Cloud Shell verwenden, müssen Sie sich erst mithilfe von az login anmelden.If you are not using Cloud Shell, you must first sign in using az login.

Erstellen eines Azure-SpeicherkontosCreate an Azure Storage account

Für Azure Functions ist ein allgemeines Speicherkonto erforderlich.Azure Functions requires a general storage account. Erstellen Sie zusätzlich zu dem Blobspeicherkonto, das Sie im vorherigen Tutorial erstellt haben, ein separates allgemeines Speicherkonto in der Ressourcengruppe. Verwenden Sie dazu den Befehl az storage account create.In addition to the Blob storage account you created in the previous tutorial, create a separate general storage account in the resource group by using the az storage account create command. 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.

  1. Legen Sie eine Variable fest, die den Namen der Ressourcengruppe enthält, die Sie im vorherigen Tutorial erstellt haben.Set a variable to hold the name of the resource group that you created in the previous tutorial.

    resourceGroupName=myResourceGroup
    
  2. Legen Sie eine Variable für den Namen des neuen Speicherkontos fest, das für Azure Functions erforderlich ist.Set a variable for the name of the new storage account that Azure Functions requires.

    functionstorage=<name of the storage account to be used by the function>
    
  3. Erstellen Sie das Speicherkonto für die Azure-Funktion.Create the storage account for the Azure function.

    az storage account create --name $functionstorage --location southeastasia \
    --resource-group $resourceGroupName --sku Standard_LRS --kind storage
    

Erstellen einer Funktionen-AppCreate a function app

Sie müssen über eine Funktions-App verfügen, die die Ausführung Ihrer Funktion in Azure hostet.You must have a function app to host the execution of your function. Die Funktionen-App bietet eine Umgebung für die serverlose Ausführung des Funktionscodes.The function app provides an environment for serverless execution of your function code. Erstellen Sie eine Funktionen-App mithilfe des Befehls az functionapp create.Create a function app by using the az functionapp create command.

Geben Sie im Befehl unten Ihren eigenen eindeutigen Funktions-App-Namen an.In the following command, provide your own unique function app name. Da der Name der Funktions-App als DNS-Standarddomäne für die Funktions-App verwendet wird, muss der Name für alle Apps in Azure eindeutig sein.The function app name is used as the default DNS domain for the function app, and so the name needs to be unique across all apps in Azure.

  1. Geben Sie einen Namen für die Funktions-App an, die erstellt werden soll.Specify a name for the function app that's to be created.

    functionapp=<name of the function app>
    
  2. Erstellen Sie die Azure-Funktion.Create the Azure function.

    az functionapp create --name $functionapp --storage-account $functionstorage \
    --resource-group $resourceGroupName --consumption-plan-location southeastasia
    

Jetzt müssen Sie die Funktions-App für die Verbindung mit dem Blob Storage-Konto konfigurieren,das Sie im vorhergehenden Tutorial erstellt haben.Now you must configure the function app to connect to the Blob storage account you created in the previous tutorial.

Konfigurieren der Funktions-AppConfigure the function app

Die Funktion benötigt Anmeldeinformationen für das Blobspeicherkonto, die den Anwendungseigenschaften der Funkions-App mit dem Befehl az functionapp config appsettings set hinzugefügt werden.The function needs credentials for the Blob storage account, which are added to the application settings of the function app using the az functionapp config appsettings set command.

blobStorageAccount=<name of the Blob storage account you created in the previous tutorial>
storageConnectionString=$(az storage account show-connection-string --resource-group $resourceGroupName \
--name $blobStorageAccount --query connectionString --output tsv)

az functionapp config appsettings set --name $functionapp --resource-group $resourceGroupName \
--settings AzureWebJobsStorage=$storageConnectionString THUMBNAIL_CONTAINER_NAME=thumbnails \
THUMBNAIL_WIDTH=100 FUNCTIONS_EXTENSION_VERSION=~2

Die Einstellung FUNCTIONS_EXTENSION_VERSION=~2 legt fest, dass die Funktions-App unter der Version 2.x der Azure Functions-Runtime ausgeführt wird.The FUNCTIONS_EXTENSION_VERSION=~2 setting makes the function app run on version 2.x of the Azure Functions runtime.

Sie können nun ein Funktionscodeprojekt für diese Funktions-App bereitstellen.You can now deploy a function code project to this function app.

Bereitstellen des FunktionscodesDeploy the function code

Die C#-Beispielfunktion für die Größenänderung ist auf GitHub verfügbar.The sample C# resize function is available on GitHub. Stellen Sie dieses Codeprojekt für die Funktions-App mithilfe des Befehls az functionapp deployment source config bereit.Deploy this code project to the function app by using the az functionapp deployment source config command.

az functionapp deployment source config --name $functionapp --resource-group $resourceGroupName --branch master --manual-integration --repo-url https://github.com/Azure-Samples/function-image-upload-resize

Die Funktion für die Bildgrößenänderung wird durch HTTP-Anforderungen ausgelöst, die sie vom Event Grid-Dienst empfängt.The image resize function is triggered by HTTP requests sent to it from the Event Grid service. Erstellen Sie ein Ereignisabonnement, um Event Grid zu informieren, dass Sie diese Benachrichtigungen unter der URL Ihrer Funktion erhalten möchten.You tell Event Grid that you want to get these notifications at your function's URL by creating an event subscription. Für dieses Tutorial abonnieren Sie durch Blobs erstellte Ereignisse.For this tutorial you subscribe to blob-created events.

Die von der Event Grid-Benachrichtigung an die Funktion übergebenen Daten enthalten die URL des Blobs.The data passed to the function from the Event Grid notification includes the URL of the blob. Diese URL wird wiederum an die Eingabebindung übergeben, um das hochgeladene Bild aus dem Blob-Speicher abzurufen.That URL is in turn passed to the input binding to obtain the uploaded image from Blob storage. Die Funktion generiert eine Miniaturansicht und schreibt den sich ergebenden Datenstrom in einen separaten Container in Blob Storage.The function generates a thumbnail image and writes the resulting stream to a separate container in Blob storage.

In diesem Projekt wird EventGridTrigger als Triggertyp verwendet.This project uses EventGridTrigger for the trigger type. Es wird empfohlen, anstelle generischer HTTP-Trigger den Event Grid-Trigger zu verwenden.Using the Event Grid trigger is recommended over generic HTTP triggers. Event Grid überprüft automatisch Event Grid-Funktionstrigger.Event Grid automatically validates Event Grid Function triggers. Bei generischen HTTP-Triggern müssen Sie die Überprüfungsantwort implementieren.With generic HTTP triggers, you must implement the validation response.

Weitere Informationen zu dieser Funktion finden Sie unter in den Dateien „function.json“ und „run.csx“.To learn more about this function, see the function.json and run.csx files.

Der Funktionsprojektcode wird direkt aus dem öffentlichen Beispielrepository bereitgestellt.The function project code is deployed directly from the public sample repository. Weitere Informationen zu den Bereitstellungsoptionen für Azure Functions finden Sie unter Continuous Deployment für Azure Functions.To learn more about deployment options for Azure Functions, see Continuous deployment for Azure Functions.

Erstellen eines EreignisabonnementsCreate an event subscription

Ein Ereignisabonnement gibt an, welche vom Anbieter generierten Ereignisse an einen bestimmten Endpunkt gesendet werden sollen.An event subscription indicates which provider-generated events you want sent to a specific endpoint. In diesem Fall wird der Endpunkt durch Ihre Funktion zur Verfügung gestellt.In this case, the endpoint is exposed by your function. Führen Sie die folgenden Schritte durch, um ein Ereignisabonnement zu erstellen, dass Benachrichtigungen an Ihre Funktion im Azure-Portal sendet:Use the following steps to create an event subscription that sends notifications to your function in the Azure portal:

  1. Wählen Sie im Azure-Portal im linken Menü Alle Dienste und anschließend Funktions-Apps aus.In the Azure portal, select All Services on the left menu, and then select Function Apps.

    Navigieren zu Funktions-Apps im Azure-Portal

  2. Erweitern Sie Ihre Funktions-App, wählen Sie die Funktion Vorschauminiatur aus, und wählen Sie dann Event Grid-Abonnement hinzufügen aus.Expand your function app, choose the Thumbnail function, and then select Add Event Grid subscription.

    Navigieren zu Funktions-Apps im Azure-Portal

  3. Verwenden Sie die in der Tabelle angegebenen Einstellungen für das Ereignisabonnement.Use the event subscription settings as specified in the table.

    Erstellen eines Ereignisabonnements aus der Funktion im Azure-Portal

    EinstellungSetting Empfohlener WertSuggested value BeschreibungDescription
    NameName imageresizersubimageresizersub Der Name, der Ihr neues Ereignisabonnement angibt.Name that identifies your new event subscription.
    ThementypTopic type SpeicherkontenStorage accounts Wählen Sie den Speicherkonto-Ereignisanbieter aus.Choose the Storage account event provider.
    AbonnementSubscription Ihr Azure-AbonnementYour Azure subscription Ihr aktuelles Azure-Abonnement ist standardmäßig ausgewählt.By default, your current Azure subscription is selected.
    RessourcengruppeResource group myResourceGroupmyResourceGroup Wählen Sie Vorhandene verwenden und anschließend die Ressourcengruppe aus, die Sie in diesem Tutorial verwendet haben.Select Use existing and choose the resource group you have been using in this tutorial.
    RessourceResource Ihr Blob Storage-KontoYour Blob storage account Wählen Sie das Blob Storage-Konto aus, das Sie erstellt haben.Choose the Blob storage account you created.
    EreignistypenEvent types Blob erstelltBlob created Deaktivieren Sie alle Typen außer Blob erstellt.Uncheck all types other than Blob created. Nur Ereignistypen mit Microsoft.Storage.BlobCreated werden an die Funktion übergeben.Only event types of Microsoft.Storage.BlobCreated are passed to the function.
    AbonnententypSubscriber type Automatisch generiertautogenerated Als Webhook vordefiniertPre-defined as Web Hook.
    AbonnentenendpunktSubscriber endpoint Automatisch generiertautogenerated Verwenden Sie die Endpunkt-URL, die für Sie generiert wird.Use the endpoint URL that is generated for you.
  4. Wechseln Sie zur Registerkarte Filter, und führen Sie die folgenden Aktionen durch:Switch to the Filter tab, and do the following actions:

    1. Wählen Sie die Option Betrefffilter aktivieren aus.Select Enable subject filtering option.

    2. Geben Sie für Betreff beginnt mit den folgenden Wert ein: /blobServices/default/containers/images/blobs/.For Subject begins with, enter the following value : /blobServices/default/containers/images/blobs/.

      Festlegen eines Filters für das Ereignisabonnement

  5. Wählen Sie Erstellen aus, um das Ereignisabonnement hinzuzufügen.Select Create to add the event subscription. Dadurch wird ein Ereignisabonnement erstellt, das die Funktion Thumbnail auslöst, wenn ein Blob dem Container images hinzugefügt wird.This creates an event subscription that triggers Thumbnail function when a blob is added to the images container. Die Funktion ändert die Größe der Bilder und fügt sie dem Container thumbnails hinzu.The function resizes the images and adds them to the thumbnails container.

Nachdem die Back-End-Dienste konfiguriert wurden, testen Sie die Funktion für die Größenänderung von Bildern in der Beispiel-Web-App.Now that the backend services are configured, you test the image resize functionality in the sample web app.

Testen der Beispiel-AppTest the sample app

Navigieren Sie zum Testen der Größenänderung von Bildern in der Web-App zur URL Ihrer veröffentlichten App.To test image resizing in the web app, browse to the URL of your published app. Die Standard-URL der Web-App lautet https://<web_app>.azurewebsites.net.The default URL of the web app is https://<web_app>.azurewebsites.net.

Klicken Sie auf den Bereich Fotos hochladen, um eine Datei auszuwählen und hochzuladen.Click the Upload photos region to select and upload a file. Sie können auch ein Foto in diese Region ziehen.You can also drag a photo to this region.

Beachten Sie, dass eine Kopie des hochgeladenen Bilds im Karussell Generierte Miniaturansichten angezeigt wird, nachdem das hochgeladene Bild nicht mehr angezeigt wird.Notice that after the uploaded image disappears, a copy of the uploaded image is displayed in the Generated thumbnails carousel. Die Größe dieses Bilds wurde von der Funktion angepasst, und das Bild wurde dem Container thumbnails hinzugefügt und vom Webclient heruntergeladen.This image was resized by the function, added to the thumbnails container, and downloaded by the web client.

Veröffentlichte Web-App im Browser