Zelfstudie: Formaat van geüploade afbeeldingen automatisch wijzigen met Event Grid

Azure Event Grid is een gebeurtenisservice voor de cloud. Met Event Grid kunt u abonnementen nemen op gebeurtenissen die worden gegenereerd door Azure-services of resources van derden.

Deze zelfstudie is deel twee in een reeks zelfstudies over Azure Storage en is een vervolg op de vorige zelfstudie over Storage met als doel om zonder tussenkomst van een server automatisch miniaturen te genereren met behulp van Azure Event Grid en Azure Functions. Event Grid zorgt ervoor dat Azure Functions kan reageren op gebeurtenissen van Azure Blob-opslag om miniaturen van geüploade afbeeldingen te genereren. Een gebeurtenisabonnement wordt gekoppeld aan gebeurtenis waarmee Blob-opslag wordt gemaakt. Wanneer er een blob wordt toegevoegd aan een specifieke Blob-opslagcontainer, wordt er een functie-eindpunt aangeroepen. Aan de hand van gegevens die vanuit Event Grid worden doorgegeven aan de functiebinding, wordt er toegang verkregen tot de blob en wordt de miniatuurafbeelding gegenereerd.

Met behulp van de Azure CLI en Azure Portal kunt u de functionaliteit voor formaatwijziging toevoegen aan een bestaande app voor het uploaden van afbeeldingen.

In deze zelfstudie leert u het volgende:

  • Een Azure Storage-account maken
  • Serverloze code implementeren met behulp van Azure Functions
  • Een gebeurtenisabonnement voor Blob-opslag maken in Event Grid

Vereisten

Notitie

In dit artikel wordt de Azure Az PowerShell-module gebruikt. Dit is de aanbevolen PowerShell-module voor interactie met Azure. Raadpleeg Azure PowerShell installeren om aan de slag te gaan met de Az PowerShell-module. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Vereisten voor het voltooien van deze zelfstudie:

Een Azure Storage-account maken

Voor Azure Functions is een algemeen opslagaccount vereist. Naast het Blob Storage-account dat u in de vorige zelfstudie hebt gemaakt, maakt u een afzonderlijk algemeen opslagaccount in de resourcegroep. Namen van opslagaccounts moeten tussen 3 en 24 tekens lang zijn en mogen alleen cijfers en kleine letters bevatten.

Stel variabelen in voor de naam van de resourcegroep die u in de vorige zelfstudie hebt gemaakt, de locatie voor resources die moeten worden gemaakt en de naam van het nieuwe opslagaccount dat Azure Functions vereist. Maak vervolgens het opslagaccount voor de Azure-functie.

Gebruik de opdracht New-AzStorageAccount.

  1. Geef een naam op voor de resourcegroep.

    $resourceGroupName="myResourceGroup"
    
  2. Geef de locatie voor het opslagaccount op.

    $location="eastus"    
    
  3. Geef de naam op van het opslagaccount dat door de functie moet worden gebruikt.

    $functionstorage="<name of the storage account to be used by the function>"    
    
  4. Een opslagaccount maken.

    New-AzStorageAccount -ResourceGroupName $resourceGroupName -AccountName $functionstorage -Location $location -SkuName Standard_LRS -Kind StorageV2        
    

Een functie-app maken

U moet een functie-app hebben die als host fungeert voor de uitvoering van uw functie. De functie-app biedt een omgeving waarin uw functiecode zonder server kan worden uitgevoerd.

Geef de naam van uw eigen unieke functie-app op in de volgende opdracht. De naam van de functie-app wordt gebruikt als het standaard DNS-domein voor de functie-app. Om die reden moet de naam uniek zijn in alle apps in Azure.

Geef een naam op voor de functie-app die moet worden gemaakt en maak vervolgens de Azure-functie.

Maak een functie-app met behulp van de opdracht New-AzFunctionApp.

  1. Geef een naam op voor de functie-app.

    $functionapp="<name of the function app>"    
    
  2. Een functie-app maken.

    New-AzFunctionApp -Location $location -Name $functionapp -ResourceGroupName $resourceGroupName -Runtime PowerShell -StorageAccountName $functionstorage    
    

Nu moet u de functie-app configureren om verbinding te maken met het Blob-opslagaccount dat u in de vorige zelfstudie hebt gemaakt.

De functie-app configureren

De functie heeft referenties nodig voor het Blob Storage-account, dat wordt toegevoegd aan de toepassingsinstellingen van de functie-app met behulp van de opdracht az functionapp config appsettings set of de opdracht Update-AzFunctionAppSetting.

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 FUNCTIONS_WORKER_RUNTIME=dotnet"
$storageConnectionString=$(az storage account show-connection-string --resource-group $resourceGroupName --name $blobStorageAccount --query connectionString --output tsv)

Update-AzFunctionAppSetting -Name $functionapp -ResourceGroupName $resourceGroupName -AppSetting @{AzureWebJobsStorage=$storageConnectionString; THUMBNAIL_CONTAINER_NAME=thumbnails; THUMBNAIL_WIDTH=100 FUNCTIONS_EXTENSION_VERSION=~2; 'FUNCTIONS_WORKER_RUNTIME'='dotnet'}

De instelling FUNCTIONS_EXTENSION_VERSION=~2 zorgt ervoor dat de functie-app wordt uitgevoerd met versie 2.x van de runtime van Azure Functions.

U kunt nu een codeproject van Functions implementeren naar deze functie-app.

De functiecode implementeren

De C#-voorbeeldfunctie van resize is beschikbaar op GitHub. Implementeer dit codeproject naar de functie-app met behulp van de opdracht az functionapp deployment source config.

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

De functie om afbeeldingen in grootte aan te passen wordt geactiveerd door HTTP-aanvragen die vanaf de Event Grid-service worden verzonden. U kunt Event Grid laten weten dat u deze meldingen bij de URL van uw functie wilt ontvangen door een gebeurtenisabonnement te maken. Voor deze zelfstudie abonneert u zich op gebeurtenissen die door een blob zijn gemaakt.

De gegevens die aan de functie worden doorgegeven in de Event Grid-melding bevatten de URL van de blob. Die URL is op zijn beurt doorgegeven aan de invoerbinding om de geüploade installatiekopie uit de Blob-opslag op te halen. De functie genereert een miniatuurafbeelding en de resulterende stroom wordt weggeschreven naar een afzonderlijke container in de Blob-opslag.

Dit project gebruikt EventGridTrigger als het type trigger. Het wordt aangeraden om de trigger van Event Grid te gebruiken in plaats van algemene HTTP-triggers. Functie-triggers van Event Grid worden namelijk automatisch gevalideerd. Bij gebruik van algemene HTTP-triggers moet u een validatie-antwoord implementeren.

Als u meer wilt leren over deze functie, bekijk dan de bestanden function.json en run.csx.

Het codeproject van Functions wordt rechtstreeks vanuit de openbare opslagplaats met voorbeelden geïmplementeerd. Zie Doorlopende implementatie voor Azure Functions voor meer informatie over implementatieopties voor Azure Functions.

Een gebeurtenisabonnement maken

Een gebeurtenisabonnement geeft aan welke door de provider gegenereerde gebeurtenissen u naar een bepaald eindpunt wilt versturen. In dit geval wordt het eindpunt bepaald door de functie. Gebruik de volgende stappen om in Azure Portal een gebeurtenisabonnement te maken die meldingen aan uw functie verzendt:

  1. Zoek in de Azure Portal bovenaan de pagina naar Function App, selecteer het kies de functie-app die u zojuist hebt gemaakt. Selecteer Functies en kies de functie Miniatuur.

    De functie Miniatuur in de portal kiezen

  2. Selecteer Integratie, kies vervolgens de Event Grid-trigger en vervolgens Event Grid-abonnement maken.

    Navigeren naar Event Grid-abonnement toevoegen in de Azure Portal

  3. Gebruik de instellingen voor het gebeurtenisabonnement zoals die zijn opgegeven in de tabel onder de afbeelding.

    Een gebeurtenisabonnement maken voor de functie in Azure Portal

    Instelling Voorgestelde waarde Beschrijving
    Naam imageresizersub De naam voor het nieuwe gebeurtenisabonnement.
    Onderwerptype Opslagaccounts Kies de provider voor de gebeurtenissen van het opslagaccount.
    Abonnement Uw Azure-abonnement Uw huidige Azure-abonnement is standaard geselecteerd.
    Resourcegroep myResourceGroup Selecteer Bestaande gebruiken en kies de resourcegroep die u in deze zelfstudie hebt gebruikt.
    Resource Uw Blob-opslagaccount Kies het Blob-opslagaccount dat u hebt gemaakt.
    Naam van systeemonderwerp imagestoragesystopic Geef een naam op voor het systeemonderwerp. Zie Overzicht van systeemonderwerpen voor meer informatie over systeemonderwerpen.
    Gebeurtenistypen BlobCreated Schakel alle typen uit behalve BlobCreated. Alleen gebeurtenistypen van Microsoft.Storage.BlobCreated worden doorgegeven aan de functie.
    Eindpunttype automatisch gegenereerd Vooraf gedefinieerd als Azure-functie.
    Eindpunt automatisch gegenereerd Naam van de functie. In dit geval is deze Miniatuur.
  4. Open het tabblad Filters en voer de volgende acties uit:

    1. Selecteer de optie Filteren van onderwerpen inschakelen.

    2. Voer bij Onderwerp begint met de volgende waarde in: /blobServices/default/containers/images/.

      Een filter opgeven voor het gebeurtenisabonnement

  5. Selecteer Maken om het gebeurtenisabonnement toe te voegen. Er wordt een gebeurtenisabonnement gemaakt die de functie Thumbnail activeert op het moment dat er een blob wordt toegevoegd aan de container images. De functie past de afbeelding in grootte aan en voegt deze toe aan de container thumbnails.

De services in de back-end zijn nu geconfigureerd. Dit betekent dat u de functionaliteit voor het aanpassen van het formaat van afbeeldingen kunt gaan testen in de voorbeeld-web-app.

De voorbeeld-app testen

U kunt de formaatwijziging door de web-app testen door naar de URL van de gepubliceerde app te gaan. De standaard-URL van de web-app is https://<web_app>.azurewebsites.net.

Klik ergens in het gebied Foto's uploaden om een bestand te selecteren en te uploaden. U kunt ook een foto naar dit gebied slepen.

Zodra de geüploade afbeelding is verdwenen, ziet u een kopie van de geüploade afbeelding in de carrousel Gegenereerde miniaturen. Het formaat van deze afbeelding werd gewijzigd door de functie, waarna de afbeelding werd toegevoegd aan de container thumbnails en gedownload door de webclient.

Schermopname van de gepubliceerde web-app ImageResizer in een browser voor de .NET v12 SDK.

Volgende stappen

In deze zelfstudie heeft u het volgende geleerd:

  • Een algemene Azure Storage-account maken
  • Serverloze code implementeren met behulp van Azure Functions
  • Een gebeurtenisabonnement voor Blob-opslag maken in Event Grid

Ga naar deel drie van de reeks met zelfstudies over Azure Storage om te leren hoe u de toegang tot het opslagaccount beveiligt.