Схема CloudEvents версии 1.0 со службой "Сетка событий Azure"

Azure Event Grid изначально поддерживает события в реализации JSON протокола CloudEvents версии 1.0 и привязке протокола HTTP. CloudEventsоткрытая спецификация для описания данных о событиях. CloudEvents упрощает взаимодействие, предоставляя общую схему событий для публикации и использования облачных событий. Эта схема позволяет использовать универсальные средства, стандартные способы маршрутизации и обработки событий, а также универсальные способы десериализации внешней схемы событий. Общая схема позволяет легко интегрировать работу на разных платформах.

Несколько участников совместной работы, включая Корпорацию Майкрософт, создают CloudEvents через Cloud Native Computing Foundation. В настоящее время доступна версия 1.0.

В этой статье описывается использование схемы CloudEvents с сеткой событий.

Пример события с использованием схемы CloudEvents

Ниже приведен пример события Azure Blob Storage в формате 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"
        }
    }
}

Подробное описание доступных полей, их типов и определений в CloudEvents версии 1.0 можно изучить здесь.

Значения заголовков для событий, доставленных в схеме CloudEvents, и схема сетки событий совпадают, за исключением content-type. Для схемы CloudEvents значение заголовка — "content-type":"application/cloudevents+json; charset=utf-8". Для схемы "Сетка событий" значение заголовка — "content-type":"application/json; charset=utf-8".

Конфигурация для CloudEvents

Службу "Сетка событий" можно использовать для ввода и вывода событий в схеме CloudEvents. Кроме того, CloudEvents можно использовать для системных событий, таких как события хранилища BLOB-объектов и Центра Интернета вещей, а также настраиваемые события. Помимо поддержки CloudEvents, Ивент Грид поддерживает собственный, нерасширяемый, но полностью функциональный формат событий Event Grid. В следующей таблице описывается преобразование, поддерживаемое при использовании CloudEvents и форматов Сетки событий в качестве входной схемы в разделах и в качестве выходной схемы в подписках на события. Выходная схема Сетки событий не может использоваться при использовании CloudEvents в качестве входной схемы, так как CloudEvents поддерживает атрибуты расширения, которые не поддерживаются схемой сетки событий.

Входная схема Выходная схема
Формат CloudEvents Формат CloudEvents
Формат сетки событий Формат CloudEvents
Формат сетки событий Формат сетки событий

Для всех схем событий сетка событий требует проверки при публикации в разделе сетки событий и при создании подписки на события. Дополнительные сведения см. в разделе Сетка событий: безопасность и проверка подлинности.

Входная схема

Задайте входную схему для пользовательского топика при его создании с помощью параметра input-schema.

Для интерфейса командной строки Azure:

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

Для PowerShell используйте команду:

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

Выходная схема

Задайте выходную схему при создании подписки на события с помощью event-delivery-schema параметра.

Для интерфейса командной строки Azure:

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

Для PowerShell используйте команду:

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

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

Использование с Функциями Azure

Visual Studio или Visual Studio Code

Если вы используете Visual Studio или Visual Studio Code и язык программирования C# для разработки функций, убедитесь, что вы используете последний пакет NuGet Microsoft.Azure.WebJobs.Extensions.EventGrid (версия 3.3.1 или более поздней версии).

В Visual Studio используйте Инструменты ->Диспетчер пакетов NuGet ->Консоль диспетчера пакетов, и выполните команду Install-Package(Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1). Кроме того, щелкните правой кнопкой мыши проект в окне Обозреватель решений и выберите меню "Управление пакетами NuGet", чтобы перейти к пакету NuGet и установить или обновить его до последней версии.

В VS Code обновите номер версии пакета Microsoft.Azure.WebJobs.Extensions.EventGrid в файле csproj для проекта 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>

В следующем примере показана функция Функции Azure версии 3.x, разработанная в Visual Studio или Visual Studio Code. Он использует параметр привязки CloudEvent и 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

Если вы используете портал Azure для разработки функции Azure, выполните следующие действия:

  1. Обновите имя параметра в файле function.json на cloudEvent.

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. run.csx Обновите файл, как показано в следующем примере кода.

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

Примечание.

Дополнительные сведения см. в статье Триггер Сетки событий Azure для Функций Azure.

Сведения о проверке конечных точек с помощью облачных событий см. в разделе "Проверка конечных точек с помощью CloudEvents 1.0".