Använda CloudEvents v1.0-schema med Event Grid
Utöver standardhändelseschemat stöder Azure Event Grid inbyggt händelser i JSON-implementeringen av CloudEvents v1.0- och HTTP-protokollbindning. CloudEvents är en öppen specifikation för att beskriva händelsedata.
CloudEvents förenklar samverkan genom att tillhandahålla ett gemensamt händelseschema för publicering och användning av molnbaserade händelser. Det här schemat möjliggör enhetliga verktyg, standardsätt för routning och hantering av händelser samt universella sätt att deserialisera det yttre händelseschemat. Med ett gemensamt schema kan du enklare integrera arbete mellan plattformar.
CloudEvents byggs av flera medarbetare, inklusive Microsoft, via Cloud Native Computing Foundation. Den är för närvarande tillgänglig som version 1.0.
Den här artikeln beskriver hur du använder CloudEvents-schemat med Event Grid.
CloudEvent-schema
Här är ett exempel på en Azure Blob Storage-händelse i CloudEvents-format:
{
"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"
}
}
}
En detaljerad beskrivning av tillgängliga fält, deras typer och definitioner finns i CloudEvents v1.0.
Värdena för sidhuvuden för händelser som levereras i CloudEvents-schemat och Event Grid-schemat är desamma förutom content-type
. För CloudEvents-schemat är "content-type":"application/cloudevents+json; charset=utf-8"
det huvudvärdet . För Event Grid-schemat är "content-type":"application/json; charset=utf-8"
det rubrikvärdet .
Konfigurera för CloudEvents
Du kan använda Event Grid för både in- och utdata för händelser i CloudEvents-schemat. I följande tabell beskrivs möjliga transformeringar:
Event Grid-resurs | Indataschema | Leveransschema |
---|---|---|
Systemämnen | Event Grid-schema | Event Grid-schema eller CloudEvents-schema |
Anpassade ämnen/domäner | Event Grid-schema | Event Grid-schema eller CloudEvents-schema |
Anpassade ämnen/domäner | CloudEvents-schema | CloudEvents-schema |
Anpassade ämnen/domäner | Anpassat schema | Anpassat schema, Event Grid-schema eller CloudEvents-schema |
Partnerämnen | CloudEvents-schema | CloudEvents-schema |
För alla händelsescheman kräver Event Grid validering när du publicerar till ett Event Grid-ämne och när du skapar en händelseprenumeration.
Mer information finns i Säkerhet och autentisering för Event Grid.
Indataschema
Du anger indataschemat för ett anpassat ämne när du skapar det anpassade ämnet.
För Azure CLI använder du:
az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0
Om du använder PowerShell använder du:
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0
Utdataschema
Du anger utdataschemat när du skapar händelseprenumerationen.
För Azure CLI använder du:
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
Om du använder PowerShell använder du:
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id
New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0
Slutpunktsverifiering med CloudEvents v1.0
Om du redan är bekant med Event Grid kanske du känner till handskakningen för slutpunktsvalidering för att förhindra missbruk. CloudEvents v1.0 implementerar sin egen semantik för missbruksskydd med hjälp av metoden HTTP OPTIONS. Mer information finns i HTTP 1.1 Web Hooks för händelseleverans – version 1.0. När du använder CloudEvents-schemat för utdata använder Event Grid CloudEvents v1.0-missbruksskydd i stället för event grid-valideringshändelsemekanismen.
Använda med Azure Functions
Visual Studio eller Visual Studio Code
Om du använder Visual Studio eller Visual Studio Code och C#-programmeringsspråket för att utveckla funktioner kontrollerar du att du använder det senaste Microsoft.Azure.WebJobs.Extensions.EventGrid NuGet-paketet (version 3.3.1 eller senare).
I Visual Studio använder du Tools ->NuGet Package Manager ->Package Manager Console och kör Install-Package
kommandot (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1
). Du kan också högerklicka på projektet i Solution Explorer-fönstret och välja Hantera NuGet-paket-menyn för att bläddra efter NuGet-paketet och installera eller uppdatera det till den senaste versionen.
I VS Code uppdaterar du versionsnumret för paketet Microsoft.Azure.WebJobs.Extensions.EventGrid i csproj-filen för ditt Azure Functions-projekt.
<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>
I följande exempel visas en Azure Functions version 3.x-funktion som har utvecklats i antingen Visual Studio eller Visual Studio Code. Den använder en CloudEvent
bindningsparameter och 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);
}
}
}
Utveckling av Azure-portalen
Om du använder Azure-portalen för att utveckla en Azure-funktion följer du dessa steg:
Uppdatera namnet på parametern i
function.json
filen tillcloudEvent
.{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
run.csx
Uppdatera filen enligt följande exempelkod.#r "Azure.Core" using Azure.Messaging; public static void Run(CloudEvent cloudEvent, ILogger logger) { logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject); }
Kommentar
Mer information finns i Azure Event Grid-utlösare för Azure Functions.
Nästa steg
- Information om övervakning av händelseleveranser finns i Övervaka Event Grid-meddelandeleverans.
- Vi rekommenderar att du testar, kommenterar och bidrar till CloudEvents.
- Mer information om hur du skapar en Azure Event Grid-prenumeration finns i Event Grid-prenumerationsschema.