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

Azure Event Grid nativně podporuje události v implementaci JSON pro CloudEvents v1.0 a vázání protokolu 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.

Několik spolupracovníků, včetně Microsoftu, vytváří CloudEvents prostřednictvím služby 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 hodnota této hlavičky "content-type":"application/cloudevents+json; charset=utf-8". Pro schéma Event Gridu je hodnota této hlavičky "content-type":"application/json; charset=utf-8".

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í, nerozšiřitelný, ale plně funkční formát Event Grid událostí. 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

Nastavte vstupní schéma pro vlastní téma při jeho vytváření pomocí parametru input-schema.

Pokud používáte 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 nastavte výstupní schéma.

Pokud používáte 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 novější).

V sadě Visual Studio použijte Nástroje - NuGet Správce balíčků - Konzole Správce balíčků a spusťte příkaz (Install-Package) (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 ve Visual Studiu nebo ve 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);
        }
    }
}

Vývojové prostředí na Azure portálu

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 spouštěče 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.