Udostępnij za pośrednictwem


Schemat CloudEvents w wersji 1.0 z usługą Azure Event Grid

Usługa Azure Event Grid natywnie obsługuje zdarzenia w implementacji JSON powiązania protokołu CloudEvents w wersji 1.0 i PROTOKOŁU HTTP. CloudEvents to otwarta specyfikacja do opisywania danych zdarzeń. Rozwiązanie CloudEvents upraszcza współdziałanie, udostępniając wspólny schemat zdarzeń do publikowania i używania zdarzeń opartych na chmurze. Ten schemat umożliwia jednolite narzędzia, standardowe sposoby routingu i obsługi zdarzeń oraz uniwersalne sposoby deserializacji zewnętrznego schematu zdarzeń. Za pomocą wspólnego schematu można łatwiej zintegrować pracę między platformami.

Usługa CloudEvents jest tworzona przez kilku współpracowników, w tym firmę Microsoft, za pośrednictwem Natywnej Fundacji Przetwarzania w chmurze. Jest ona obecnie dostępna jako wersja 1.0.

W tym artykule opisano używanie schematu CloudEvents z usługą Event Grid.

Przykładowe zdarzenie przy użyciu schematu CloudEvents

Oto przykład zdarzenia usługi Azure Blob Storage w formacie 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"
        }
    }
}

Szczegółowy opis dostępnych pól, ich typów i definicji w usłudze CloudEvents w wersji 1.0 jest dostępny tutaj.

Wartości nagłówków dla zdarzeń dostarczonych w schemacie CloudEvents i schematu usługi Event Grid są takie same z wyjątkiem content-type. W przypadku schematu CloudEvents ta wartość nagłówka to "content-type":"application/cloudevents+json; charset=utf-8". W przypadku schematu usługi Event Grid ta wartość nagłówka to "content-type":"application/json; charset=utf-8".

Konfiguracja rozwiązania CloudEvents

Usługę Event Grid można użyć zarówno do danych wejściowych, jak i wyjściowych zdarzeń w schemacie CloudEvents. Zdarzenia systemowe, takie jak zdarzenia usługi Blob Storage i zdarzenia usługi IoT Hub oraz zdarzenia niestandardowe, można użyć rozwiązania CloudEvents. Oprócz obsługi usługi CloudEvents usługa Event Grid obsługuje zastrzeżony, niewyciągalny, ale w pełni funkcjonalny format zdarzeń usługi Event Grid. W poniższej tabeli opisano transformację obsługiwaną w przypadku używania formatów CloudEvents i Event Grid jako schematu wejściowego w tematach i jako schematu wyjściowego w subskrypcjach zdarzeń. Schemat danych wyjściowych usługi Event Grid nie może być używany w przypadku używania rozwiązania CloudEvents jako schematu wejściowego, ponieważ usługa CloudEvents obsługuje atrybuty rozszerzenia, które nie są obsługiwane przez schemat usługi Event Grid.

Schemat wejściowy Schemat danych wyjściowych
Format CloudEvents Format CloudEvents
Format usługi Event Grid Format CloudEvents
Format usługi Event Grid Format usługi Event Grid

W przypadku wszystkich schematów zdarzeń usługa Event Grid wymaga weryfikacji podczas publikowania w temacie usługi Event Grid i podczas tworzenia subskrypcji zdarzeń. Aby uzyskać więcej informacji, zobacz Zabezpieczenia i uwierzytelnianie usługi Event Grid.

Schemat wejściowy

Schemat wejściowy dla tematu niestandardowego można ustawić podczas tworzenia tematu niestandardowego przy użyciu parametru input-schema .

W przypadku interfejsu wiersza polecenia platformy Azure użyj:

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

W przypadku programu PowerShell użyj polecenia:

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

Schemat danych wyjściowych

Schemat danych wyjściowych można ustawić podczas tworzenia subskrypcji zdarzeń przy użyciu parametru event-delivery-schema .

W przypadku interfejsu wiersza polecenia platformy Azure użyj:

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

W przypadku programu PowerShell użyj polecenia:

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

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

Używanie z usługą Azure Functions

Visual Studio lub Visual Studio Code

Jeśli używasz programu Visual Studio lub Visual Studio Code i języka programowania C# do tworzenia funkcji, upewnij się, że używasz najnowszej wersji pakietu NuGet Microsoft.Azure.WebJobs.Extensions.EventGrid (wersja 3.3.1 lub nowsza).

W programie Visual Studio użyj polecenia Tools ->NuGet Menedżer pakietów ->Menedżer pakietów Console i uruchom Install-Package polecenie (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1). Alternatywnie kliknij prawym przyciskiem myszy projekt w oknie Eksplorator rozwiązań i wybierz polecenie Zarządzaj pakietami NuGet, aby wyszukać pakiet NuGet, a następnie zainstalować lub zaktualizować go do najnowszej wersji.

W programie VS Code zaktualizuj numer wersji pakietu Microsoft.Azure.WebJobs.Extensions.EventGrid w pliku csproj projektu usługi 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>

W poniższym przykładzie przedstawiono funkcję usługi Azure Functions w wersji 3.x, która jest opracowana w programie Visual Studio lub Visual Studio Code. Używa parametru CloudEvent powiązania i 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);
        }
    }
}

Środowisko programistyczne witryny Azure Portal

Jeśli używasz witryny Azure Portal do tworzenia funkcji platformy Azure, wykonaj następujące kroki:

  1. Zaktualizuj nazwę parametru w function.json pliku na cloudEvent.

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. run.csx Zaktualizuj plik, jak pokazano w poniższym przykładowym kodzie.

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

Uwaga

Aby uzyskać więcej informacji, zobacz Wyzwalacz usługi Azure Event Grid dla usługi Azure Functions.

Aby uzyskać informacje na temat walidacji punktu końcowego za pomocą zdarzeń w chmurze, zobacz Walidacja punktu końcowego za pomocą rozwiązania CloudEvents 1.0.