Použití schématu CloudEvents v1.0 se službou Event Grid

Kromě výchozího schématu událostí azure Event Grid nativně podporuje události v implementaci JSON vazby protokolu CloudEvents v1.0 a HTTP. CloudEvents je otevřená specifikace pro popis dat událostí.

CloudEvents zjednodušuje interoperabilitu tím, že poskytuje společné schéma událostí pro publikování a využívání cloudových událostí. Toto schéma umožňuje jednotné nástroje, standardní způsoby směrování a zpracování událostí a univerzální způsoby deserializace vnějšího schématu událostí. Pomocí běžného schématu můžete snadněji integrovat práci napříč platformami.

CloudEvents je sestavený několika spolupracovníky, včetně Microsoftu , prostřednictvím Cloud Native Computing Foundation. Aktuálně je k dispozici ve verzi 1.0.

Tento článek popisuje, jak používat schéma CloudEvents se službou Event Grid.

Schéma CloudEvent

Tady je příklad události Azure Blob Storage ve formátu CloudEvents:

{
    "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"
        }
    }
}

Podrobný popis dostupných polí, jejich typů a definic najdete v tématu CloudEvents v1.0.

Hodnoty hlaviček pro události doručené ve schématu CloudEvents a schéma Event Gridu jsou stejné s výjimkou content-type. Pro schéma CloudEvents je "content-type":"application/cloudevents+json; charset=utf-8"tato hodnota hlavičky . Pro schéma Event Gridu je "content-type":"application/json; charset=utf-8"tato hodnota hlavičky .

Konfigurace pro CloudEvents

Event Grid můžete použít pro vstup i výstup událostí ve schématu CloudEvents. Následující tabulka popisuje možné transformace:

Prostředek Event Gridu Vstupní schéma Schéma doručení
Systémová témata Schéma služby Event Grid Schéma Event Gridu nebo schéma CloudEvents
Vlastní témata/domény Schéma služby Event Grid Schéma Event Gridu nebo schéma CloudEvents
Vlastní témata/domény Schéma CloudEvents Schéma CloudEvents
Vlastní témata/domény Vlastní schéma Vlastní schéma, schéma Event Gridu nebo schéma CloudEvents
Témata pro partnery Schéma CloudEvents Schéma CloudEvents

Pro všechna schémata událostí služba Event Grid vyžaduje ověření při publikování do tématu Event Gridu a při vytváření odběru událostí.

Další informace najdete v tématu Zabezpečení a ověřování služby Event Grid.

Vstupní schéma

Při vytváření vlastního tématu nastavíte vstupní schéma vlastního tématu.

Pro Azure CLI použijte:

az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0

Pokud používáte PowerShell, použijte:

New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0

Výstupní schéma

Při vytváření odběru událostí nastavíte výstupní schéma.

Pro Azure CLI použijte:

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

Pokud používáte PowerShell, použijte:

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id

New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0

Ověření koncového bodu pomocí CloudEvents v1.0

Pokud už službu Event Grid znáte, možná znáte metodu handshake ověření koncového bodu, abyste zabránili zneužití. CloudEvents v1.0 implementuje vlastní sémantiku ochrany před zneužitím pomocí metody HTTP OPTIONS. Další informace najdete v tématu HTTP 1.1 Web Hooks pro doručování událostí – verze 1.0. Když pro výstup použijete schéma CloudEvents, služba Event Grid místo mechanismu událostí ověření služby Event Grid používá ochranu před zneužitím CloudEvents v1.0.

Použití se službou Azure Functions

Visual Studio nebo Visual Studio Code

Pokud k vývoji funkcí používáte Visual Studio nebo Visual Studio Code a programovací jazyk C#, ujistěte se, že používáte nejnovější balíček NuGet Microsoft.Azure.WebJobs.Extensions.EventGrid (verze 3.3.1 nebo vyšší).

V sadě Visual Studio použijte konzolu Tools ->NuGet Správce balíčků ->Správce balíčků a spusťte Install-Package příkaz (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1). Případně klikněte pravým tlačítkem myši na projekt v okně Průzkumník řešení a výběrem nabídky Spravovat balíčky NuGet vyhledejte balíček NuGet a nainstalujte ho nebo aktualizujte na nejnovější verzi.

Ve VS Code aktualizujte číslo verze balíčku Microsoft.Azure.WebJobs.Extensions.EventGrid v souboru csproj pro váš projekt Azure Functions.

<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>

Následující příklad ukazuje funkci Azure Functions verze 3.x vyvinutou v sadě Visual Studio nebo Visual Studio Code. Používá parametr vazby CloudEvent a 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);
        }
    }
}

Prostředí pro vývoj na webu Azure Portal

Pokud k vývoji funkce Azure používáte Azure Portal, postupujte takto:

  1. Aktualizujte název parametru v function.json souboru na cloudEvent.

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. run.csx Aktualizujte soubor, jak je znázorněno v následujícím vzorovém kódu.

    #r "Azure.Core"
    
    using Azure.Messaging;
    
    public static void Run(CloudEvent cloudEvent, ILogger logger)
    {
        logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject);
    }
    

Poznámka:

Další informace najdete v tématu Trigger služby Azure Event Grid pro Azure Functions.

Další kroky