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:

  1. Uppdatera namnet på parametern i function.json filen till cloudEvent.

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. 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