Schéma CloudEvents v1.0 se službou Azure Event Grid

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 použití schématu CloudEvents se službou Event Grid.

Ukázková událost s využitím schématu CloudEvents

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

Tady najdete podrobný popis dostupných polí, jejich typů a definic v CloudEvents verze 1.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. CloudEvents můžete použít pro systémové události, jako jsou události služby Blob Storage a události služby IoT Hub a vlastní události. Kromě podpory CloudEvents podporuje Event Grid proprietární, neextensible, ale plně funkční formát událostí Event Gridu. Následující tabulka popisuje transformaci podporovanou při použití CloudEvents a Event Gridu jako vstupního schématu v tématech a jako výstupní schéma v odběrech událostí. Výstupní schéma Event Gridu nejde použít při použití CloudEvents jako vstupního schématu, protože CloudEvents podporuje atributy rozšíření, které schéma Event Gridu nepodporuje.

Vstupní schéma Výstupní schéma
Formát CloudEvents Formát CloudEvents
Formát Event Gridu Formát CloudEvents
Formát Event Gridu Formát Event Gridu

Pro všechna schémata událostí vyžaduje Event Grid 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 pomocí parametru nastavíte vstupní schéma vlastního input-schema 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í pomocí parametru event-delivery-schema 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

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.

Informace o ověřování koncových bodů s využitím událostí cloudu najdete v tématu Ověření koncového bodu pomocí CloudEvents 1.0.