CloudEvents v1.0-schema med Azure Event Grid
Azure Event Grid har inbyggt stöd för 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, standard sätt att dirigera och hantera händelser och 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.
I den här artikeln beskrivs hur du använder CloudEvents-schema med Event Grid.
Exempelhändelse med CloudEvents-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}",
"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 i CloudEvents v1.0 finns här.
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-schema är "content-type":"application/cloudevents+json; charset=utf-8"
det huvudvärdet . För Event Grid-schema är "content-type":"application/json; charset=utf-8"
det rubrikvärdet .
Konfiguration för CloudEvents
Du kan använda Event Grid för både in- och utdata för händelser i CloudEvents-schemat. Du kan använda CloudEvents för systemhändelser, till exempel Blob Storage-händelser och IoT Hub-händelser och anpassade händelser. Förutom att stödja CloudEvents stöder Event Grid ett proprietärt, obefintligt, men ändå fullt funktionellt Event Grid-händelseformat. I följande tabell beskrivs den omvandling som stöds när du använder CloudEvents- och Event Grid-format som ett indataschema i ämnen och som ett utdataschema i händelseprenumerationer. Ett Event Grid-utdataschema kan inte användas när du använder CloudEvents som indataschema eftersom CloudEvents stöder tilläggsattribut som inte stöds av Event Grid-schemat.
Indataschema | Utdataschema |
---|---|
CloudEvents-format | CloudEvents-format |
Event Grid-format | CloudEvents-format |
Event Grid-format | Event Grid-format |
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 med hjälp av parametern input-schema
.
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 med hjälp av parametern event-delivery-schema
.
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
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);
}
}
}
Azure Portal utvecklingsupplevelse
Om du använder Azure Portal 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.
Relaterat innehåll
Information om slutpunktsverifiering med molnhändelser finns i Slutpunktsverifiering med CloudEvents 1.0.