CloudEvents v1.0-schema gebruiken met Event Grid
Naast het standaard gebeurtenisschema biedt Azure Event Grid systeemeigen ondersteuning voor gebeurtenissen in de JSON-implementatie van CloudEvents v1.0 en HTTP-protocolbinding. CloudEvents is een open specificatie voor het beschrijven van gebeurtenisgegevens.
CloudEvents vereenvoudigt de interoperabiliteit door een gemeenschappelijk gebeurtenisschema te bieden voor het publiceren en gebruiken van cloudgebeurtenissen. Dit schema biedt uniforme tooling, standaard manieren om gebeurtenissen te routeren en te verwerken, en universele manieren om het buitenste gebeurtenisschema te deserialiseren. Met een gemeenschappelijk schema kunt u eenvoudiger werk op verschillende platforms integreren.
CloudEvents wordt gebouwd door verschillende medewerkers, waaronder Microsoft, via de Cloud Native Computing Foundation. Het is momenteel beschikbaar als versie 1.0.
In dit artikel wordt beschreven hoe u het CloudEvents-schema gebruikt met Event Grid.
CloudEvent-schema
Hier volgt een voorbeeld van een Azure Blob Storage-gebeurtenis in CloudEvents-indeling:
{
"specversion": "1.0",
"type": "Microsoft.Storage.BlobCreated",
"source": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-account}",
"id": "9aeb0fdf-c01e-0131-0922-9eb54906e209",
"time": "2019-11-18T15:13:39.4589254Z",
"subject": "blobServices/default/containers/{storage-container}/blobs/{new-file}",
"dataschema": "#",
"data": {
"api": "PutBlockList",
"clientRequestId": "4c5dd7fb-2c48-4a27-bb30-5361b5de920a",
"requestId": "9aeb0fdf-c01e-0131-0922-9eb549000000",
"eTag": "0x8D76C39E4407333",
"contentType": "image/png",
"contentLength": 30699,
"blobType": "BlockBlob",
"url": "https://gridtesting.blob.core.windows.net/testcontainer/{new-file}",
"sequencer": "000000000000000000000000000099240000000000c41c18",
"storageDiagnostics": {
"batchId": "681fe319-3006-00a8-0022-9e7cde000000"
}
}
}
Zie CloudEvents v1.0 voor een gedetailleerde beschrijving van de beschikbare velden, hun typen en definities.
De headerwaarden voor gebeurtenissen die worden geleverd in het CloudEvents-schema en het Event Grid-schema zijn hetzelfde, met uitzondering van content-type
. Voor het CloudEvents-schema is "content-type":"application/cloudevents+json; charset=utf-8"
die headerwaarde . Voor het Event Grid-schema is "content-type":"application/json; charset=utf-8"
die headerwaarde .
Configureren voor CloudEvents
U kunt Event Grid gebruiken voor zowel invoer als uitvoer van gebeurtenissen in het CloudEvents-schema. In de volgende tabel worden de mogelijke transformaties beschreven:
Event Grid-resource | Invoerschema | Leveringsschema |
---|---|---|
Systeemonderwerpen | Event Grid-schema | Event Grid-schema of CloudEvents-schema |
Aangepaste onderwerpen/domeinen | Event Grid-schema | Event Grid-schema of CloudEvents-schema |
Aangepaste onderwerpen/domeinen | CloudEvents-schema | CloudEvents-schema |
Aangepaste onderwerpen/domeinen | Aangepast schema | Aangepast schema, Event Grid-schema of CloudEvents-schema |
Partneronderwerpen | CloudEvents-schema | CloudEvents-schema |
Voor alle gebeurtenisschema's vereist Event Grid validatie wanneer u publiceert naar een Event Grid-onderwerp en wanneer u een gebeurtenisabonnement maakt.
Zie Event Grid-beveiliging en -verificatie voor meer informatie.
Invoerschema
U stelt het invoerschema voor een aangepast onderwerp in wanneer u het aangepaste onderwerp maakt.
Gebruik voor de Azure CLI het volgende:
az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0
Gebruik voor PowerShell:
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0
Uitvoerschema
U stelt het uitvoerschema in wanneer u het gebeurtenisabonnement maakt.
Gebruik voor de Azure CLI het volgende:
topicID=$(az eventgrid topic show --name demotopic -g gridResourceGroup --query id --output tsv)
az eventgrid event-subscription create --name demotopicsub --source-resource-id $topicID --endpoint <endpoint_URL> --event-delivery-schema cloudeventschemav1_0
Gebruik voor PowerShell:
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id
New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0
Eindpuntvalidatie met CloudEvents v1.0
Als u al bekend bent met Event Grid, bent u mogelijk op de hoogte van de eindpuntvalidatiehanddruk voor het voorkomen van misbruik. CloudEvents v1.0 implementeert zijn eigen semantiek voor misbruikbeveiliging met behulp van de METHODE HTTP OPTIONS. Zie HTTP 1.1 Web Hooks voor gebeurtenislevering - versie 1.0 voor meer informatie hierover. Wanneer u het CloudEvents-schema voor uitvoer gebruikt, maakt Event Grid gebruik van cloudevents v1.0 misbruikbeveiliging in plaats van het Event Grid-validatiemechanisme.
Gebruiken met Azure Functions
Visual Studio of Visual Studio Code
Als u Visual Studio of Visual Studio Code en de C#-programmeertaal gebruikt om functies te ontwikkelen, moet u ervoor zorgen dat u het nieuwste Microsoft.Azure.WebJobs.Extensions.EventGrid NuGet-pakket (versie 3.3.1 of hoger) gebruikt.
Gebruik in Visual Studio de Tools ->NuGet Pakketbeheer ->Pakketbeheer Console en voer de Install-Package
opdracht (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1
). U kunt ook met de rechtermuisknop op het project klikken in het venster Solution Explorer en het menu NuGet-pakketten beheren selecteren om naar het NuGet-pakket te bladeren en het te installeren of bij te werken naar de nieuwste versie.
Werk in VS Code het versienummer voor het pakket Microsoft.Azure.WebJobs.Extensions.EventGrid bij in het csproj-bestand voor uw Azure Functions-project.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.EventGrid" Version="3.3.1" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
In het volgende voorbeeld ziet u een Azure Functions-functie versie 3.x die is ontwikkeld in Visual Studio of Visual Studio Code. Het maakt gebruik van een CloudEvent
bindingsparameter en EventGridTrigger
.
using Azure.Messaging;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public static class CloudEventTriggerFunction
{
[FunctionName("CloudEventTriggerFunction")]
public static void Run(ILogger logger, [EventGridTrigger] CloudEvent e)
{
logger.LogInformation("Event received {type} {subject}", e.Type, e.Subject);
}
}
}
Ontwikkelervaring in Azure Portal
Als u Azure Portal gebruikt om een Azure-functie te ontwikkelen, voert u de volgende stappen uit:
Werk de naam van de parameter in
function.json
het bestand bij naarcloudEvent
.{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
Werk het
run.csx
bestand bij zoals wordt weergegeven in de volgende voorbeeldcode.#r "Azure.Core" using Azure.Messaging; public static void Run(CloudEvent cloudEvent, ILogger logger) { logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject); }
Notitie
Zie de Azure Event Grid-trigger voor Azure Functions voor meer informatie.
Volgende stappen
- Zie Event Grid-berichtbezorging bewaken voor informatie over het bewaken van gebeurtenisleveringen.
- We raden u aan om cloudevents te testen, er commentaar op te geven en bij te dragen.
- Zie het Event Grid-abonnementsschema voor meer informatie over het maken van een Azure Event Grid-abonnement.