CloudEvents v1.0-schema met Azure Event Grid
Azure Event Grid biedt 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 voor routering en verwerking van gebeurtenissen 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 een CloudEvents-schema gebruikt met Event Grid.
Voorbeeldgebeurtenis met cloudEvents-schema
Hier volgt een voorbeeld van een Azure Blob Storage-gebeurtenis in de 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}",
"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"
}
}
}
Hier vindt u een gedetailleerde beschrijving van de beschikbare velden, de bijbehorende typen en definities in CloudEvents v1.0.
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 .
Configuratie voor CloudEvents
U kunt Event Grid gebruiken voor zowel invoer als uitvoer van gebeurtenissen in het CloudEvents-schema. U kunt CloudEvents gebruiken voor systeemevenementen, zoals Blob Storage-gebeurtenissen en IoT Hub-gebeurtenissen en aangepaste gebeurtenissen. Naast het ondersteunen van CloudEvents ondersteunt Event Grid een eigen, nonextensible, maar volledig functionele Event Grid-gebeurtenisindeling. In de volgende tabel wordt de transformatie beschreven die wordt ondersteund bij het gebruik van CloudEvents en Event Grid-indelingen als invoerschema in onderwerpen en als een uitvoerschema in gebeurtenisabonnementen. Een Event Grid-uitvoerschema kan niet worden gebruikt bij het gebruik van CloudEvents als invoerschema omdat CloudEvents extensiekenmerken ondersteunt die niet worden ondersteund door het Event Grid-schema.
Invoerschema | Uitvoerschema |
---|---|
CloudEvents-indeling | CloudEvents-indeling |
Event Grid-indeling | CloudEvents-indeling |
Event Grid-indeling | Event Grid-indeling |
Voor alle gebeurtenisschema's vereist Event Grid validatie bij het publiceren naar een Event Grid-onderwerp en bij het maken van een gebeurtenisabonnement. 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 met behulp van de input-schema
parameter.
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 met behulp van de event-delivery-schema
parameter.
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
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.
Gerelateerde inhoud
Zie Eindpuntvalidatie met CloudEvents 1.0 voor informatie over eindpuntvalidatie met CloudEvents.