Dela via


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:

  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.

Information om slutpunktsverifiering med molnhändelser finns i Slutpunktsverifiering med CloudEvents 1.0.