Routeren van Azure Storage Events met Azure Event Grid

Een paar weken geleden werd de nieuwe PaaS-dienst Event Grid in Azure beschikbaar gesteld. Deze service maakt het op een uniforme manier gecentraliseerd beheer van events mogelijk en is nu in preview mode. Event Grid kan een onderdeel zijn van andere Azure services, bijvoorbeeld Azure Storage. Lees er alles over in dit blog.

Event Grid is een vorm van “serverless computing”. Het heeft namelijk de karakteristieken van Serverless:

  • Betalen naar gebruik: je betaalt per actie (Ingress events, Advanced matches, Leveringspogingen, Beheeroproepen). De prijs in preview mode is 30 eurocent per miljoen acties en zal 60 eurocent zijn zodra de dienst GA is;
  • Servers of infrastructuur is volledig weggeabstraheerd, zoals eerder aangegeven maakt het onderdeel uit van andere diensten (event publishers);
  • De service schaalt makkelijk mee als het aantal events toeneemt, wat mogelijk gemaakt wordt door Service Fabric wat de fundering van de service is. Naast automatische schaling, hoef je de dienst ook niet expliciet te aan te maken in Azure. Enkel bij het routeren van custom events kan een Event Topic worden aangemaakt in Azure.

Azure Event Grid kan het beste worden omschreven als een eventbroker, die één of meer “event publishers” en “event subcribers” heeft. De publishers zijn op dit moment:

  • Azure blob storage;
  • Azure Resource Groups,
  • Azure Subscriptions;
  • Event Hubs;
  • Custom Events.

In de nabije toekomst zullen meer publishers beschikbaar komen, zoals bijvoorbeeld IoT Hub, Service Bus en Azure Active Directory.

Naast event publishers zijn er ook event afnemers (handlers) zoals Azure Functions, Logic Apps en WebHooks. En ook daar komen er in de toekomst meer van bij zoals Azure Data Factory, Service Bus en Storage Queues.

Azure Storage Events met Azure Event Grid Figuur 1. Event Publishers en handlers in Azure Event Grid.

De events vanuit de diverse publishers komen in een zogenaamd Event Topic terecht waar de consumers (handlers) zich op kunnen abonneren (subscriptions). De concepten van Event Grid zijn als volgt:

  • Je hebt een event, een gebeurtenis in het verleden;
  • Een bron (publisher) waar het event heeft plaatsgevonden;
  • Topics, waar de publisher het event naar toe zend;
  • Event subscriptions, wat inhoudt een endpoint of mechanisme om events te routeren naar één of meerdere afnemers (handlers) al dan niet gebruikmakend van filters;
  • Event handlers, de applicatie of service die iets met het event gaat doen.

Event Grid Preview voor Azure Storage

Azure Storage is een van de mogelijke diensten (publishers) waar events door middel van Event Grid kunnen worden gerouteerd naar diverse afnemers (handlers). Echter dien je momenteel je Azure subscription aan te melden voor een preview programma. Zodra de registratie geslaagd is kan je de Azure Blob Storage events routeren naar andere diensten. Dit kan enkel in de regio’s Central West US.

Azure Storage Events met Azure Event Grid Figuur 2. Registratie Azure Subscription voor Azure Blob Storage events.

De Microsoft-documentatie over Event Grid heeft een gedeelte “Reacting to Blob storage events”, welke je kan doorlopen om de registratie uit te voeren.

Voorbeeldscenario

In dit blog gaan we uit van een scenario in het onderstaande diagram, dat afgeleid is van een van de voorbeelden, welke op de landingspagina van Event Grid wordt geschetst. Het is een voorbeeld van een Serverless integratie scenario, waar Event Grid wordt gebruikt om events in Azure Blob Storage af te vangen door meerdere afnemers (handlers). Een van de handlers (namelijk een Azure Function), abonneert zich op het event blobCreated, wat in het scenario een foto van een persoon is. De functie zal met behulp van de Cognitieve dienst “Computer Vision API” de foto analyseren. Azure Storage Events met Azure Event Grid

Het scenario in zijn geheel is als volgt:

  • Een afbeelding (jpg) wordt geüpload naar een Storage blob container, die in feite de bron (publisher) van het event blobCreated zal zijn;
  • Vervolgens zal het event op een Topic belanden, waar meerdere abonnees (subscriptions) aanwezig zijn (zie ook figuur 3);
  • En ten slotte kent Topic drie abonnees, een WebHook (Request Bin) om de output van het evenement vast te leggen, een Logic App om iemand op de hoogte te stellen dat er een blob is gemaakt en een Azure-functie die het beeld dat in de blob-opslag is gemaakt, zal analyseren, door de URL uit het gebeurtenisbericht te extraheren en het te gebruiken om de werkelijke afbeelding te analyseren.

De subscriptions zijn gebaseerd op eventType namelijk blobCreated en in het geval van de Logic App en Functie eveneens op filters (prefix en suffix).

Azure Storage Events met Azure Event Grid Figuur 3. Event Topic Azure Blob Storage subscriptions.


In het bovenstaande figuur zie je duidelijk voorbeeld van de intelligente routingmogelijkheden van Event Grid. De filters geven de mogelijkheid om aan te geven welk onderwerp (subject in dit geval prefix) en type blob je geïnteresseerd bent als abonnee. Als we naar ons scenario kijken, is het evenementabonnement voor Azure Functions als volgt:
Azure Storage Events met Azure Event Grid

  • Event Type : Blob Created
  • Prefix : /blobServices/default/containers/testcontainer/
  • Suffix : .jpg

Het voorvoegsel (prefix), een filterobject, zoekt naar de beginsWith in het onderwerp. En daarnaast kijkt het achtervoegsel (suffix) naar het endsWith in het onderwerp. In de subscription schema hieronder wordt het een en ander duidelijk wat betreft de prefix en suffix filters.
Het schema van de functie ziet er als volgt uit:

{
"properties": {
"destination": {
"endpointType": "webhook",
"properties": {
"endpointUrl": "https://imageanalysisfunctions.azurewebsites.net/api/AnalyseImage?code=Nf301gnvyHy4J44JAKssv23578D5D492f7KbRCaAhcEKkWw/vEM/9Q=="
}
},
"filter": {
"includedEventTypes": [ "blobCreated"],
"subjectBeginsWith": "/blobServices/default/containers/testcontainer/",
"subjectEndsWith": ".jpg",
"subjectIsCaseSensitive": "true"
}
}
}

Azure Function Event Handler

De Azure-functie is alleen enkel geïnteresseerd in een event van Blob met een bepaald onderwerp en inhoudstype (image .jpg). En dit zal duidelijk zijn wanneer je het inkomende event naar de functie bekijkt.

[{
"topic": "/subscriptions/0bf166ac-9aa8-4597-bb2a-a845afe01415/resourceGroups/rgtest/providers/Microsoft.Storage/storageAccounts/teststorage666”,
"subject": "/blobServices/default/containers/testcontainer/blobs/Michel.jpg",
"eventType": "Microsoft.Storage.BlobCreated",
"eventTime": "2017-09-01T13:40:33.1306645Z",
"id": "ff28299b-001e-0045-7227-23b99106c4ae",
"data":
{
"api": "PutBlob",
"clientRequestId": "206999d0-8f1b-11e7-a160-45670ee5a425",
"requestId": "ff28299b-001e-0045-7227-23b991000000",
"eTag": "0x8D4F13F04C48E95",
"contentType": "image/jpeg",
"contentLength": 32905,
"blobType": "BlockBlob",
"url": "https://teststorage666.blob.core.windows.net/testcontainer/Michel.jpg",
"sequencer": "0000000000000AB100000000000437A7",
"storageDiagnostics": { "batchId": "f11739ce-c83d-425c-8a00-6bd76c403d03"
}
}
}]

Dezelfde intelligentie is van toepassing op de Logic App die geïnteresseerd is in hetzelfde event. De WebHook is in feite geabonneerd op elke event vanuit Blob Storage.

Het scenario live

De oplossing bevat dus een Azure Storage Account (blob), een registratie voor Event Grid Azure Storage (als bron van events), Request Bin (WebHook), een Logic App en een Functie App, die een functie bevat voor analyse van een afbeelding. De Logic App en Azure functie abonneren beide op het blobCreated event met de eerder beschreven filterinstellingen.

Logic App
De Logic App abonneert op het event door middel van een geconfigureerde trigger action. De configuratie is in onderstaande afbeelding weergegeven.Azure Storage Events met Azure Event Grid

Figuur 4. Configuratie van een Event Grid Logic App Trigger Action.

Let op dat de Resource Type expliciet moet worden opgegeven als Microsoft.Storage, wat niet een van de beschikbare waarden uit de lijst is. De beschikbare Resource Types momenteel zijn:

  • Resource Groups,
  • Subscriptions,
  • Event Grid Topics en
  • Event Hub Namespace.

Daarom is registratie zoals eerder beschreven, vereist om de bron Azure Storage te herkennen. Als gevolg van de bovenstaande configuratie kunnen de gewenste events worden geëvalueerd en verwerkt. In het geval van de Logic App is dat het parsen van de events en een e-mailbericht versturen.

Beeldanalyse Functie

De Azure functie is geïnteresseerd in hetzelfde event als de Logic App. En zodra er een blob is gemaakt in een Azure Storage container, wordt event blobCreated aangemaakt en verstuurd naar de Event Grid Topic binnen de Azure Storage account. De URL element in het event is in ons geval https://teststorage666.blob.core.windows.net/testcontainer/Michel.jpg en dat is wordt gebruikt om de afbeelding te analyseren. De afbeelding is een foto van mijn collega Michel.
Azure Storage Events met Azure Event Grid

Deze afbeelding wordt gestreamd van de functie naar de Cognitive Services Computer Vision API. Het resultaat van de analyse wordt weergegeven in het tabblad Azure Monitor Monitor.

Azure Storage Events met Azure Event Grid

Figuur 5. Log van de functieanalyse.

Het resultaat is dat Michel voor de camera lacht. En wij als mensen zouden zeggen dat dit duidelijk is als je naar de foto kijkt, maar let op dat een computer nu de analyse maakt. Daarom kun je de Computer Vision API beschouwen als een mogelijke vorm van kunstmatige intelligentie (AI).

Request Bin (WebHook)
De Logic App in ons scenario analyseert het evenement en stuurt een e-mail. De Request Bin op haar beurt zal het rauwe evenement tonen zoals het is. Bijvoorbeeld, als ik een blob verwijder, wordt dit evenement alleen ontvangen door de WebHook (Request Bin), zoals hieronder zichtbaar is.

Azure Storage Events met Azure Event Grid
Figuur 6. WebHook Request bericht en email notificatie.

Samenvatting

Azure Event Grid is uniek in zijn soort, want andere Cloud-leveranciers hebben geen dergelijke platformdienst beschikbaar. Hoewel het nog vroeg is, omdat deze service een paar weken in preview is, heeft het potentie om zeer waardevolle service te worden. Zeker als het aantal Azure service Event Grid gaat ondersteunen als event publisher en/of handler. En je niet meer afhankelijk bent van enkel polling of maatwerk om met events om te gaan.

De service is momenteel alleen beschikbaar in West Central US en West US. Echter, in de loop der tijd wordt het zal de service in elke regio beschikbaar worden. En zodra het GA wordt, zal de prijs stijgen.

Werken met Storage Account als bron (publisher) van events geeft je inzichten in hoe Event Grid functioneert. Bovendien blijkt het voordelen van een centrale dienst in Azure voor events evident. De pub-sub en push van events zijn de belangrijkste kenmerken van Event Grid waarmee het zich onderscheid van twee vergelijkbare diensten in Azure namelijk de Service Bus en Event Hubs. Het complementeert de twee diensten, zodat Microsoft een volledige suite (verzameling) van messaging biedt.