Использование схемы CloudEvents версии 1.0 со службой "Сетка событий"

В дополнение к схеме событий по умолчанию, служба "Сетка событий Azure" поддерживает события в реализации JSON схемы CloudEvents версии 1.0 и привязку протокола HTTP. CloudEventsоткрытая спецификация для описания данных о событиях.

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

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

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

Схема CloudEvent

Здесь приведен пример события хранилища BLOB-объектов Azure в формате 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"
        }
    }
}

Подробное описание доступных полей, их типов и определений см. в 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
Пользовательские разделы/домены Схема Сетки событий Схема "Сетка событий" или схема CloudEvents
Пользовательские разделы/домены Схема CloudEvents Схема CloudEvents
Пользовательские разделы/домены Пользовательская схема Пользовательская схема, схема "Сетка событий" или схема CloudEvents
Партнерские разделы Схема CloudEvents Схема CloudEvents

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

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

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

Схема ввода для пользовательского раздела указывается при создании этого раздела.

При работе с интерфейсом командной строки 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

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

Схема вывода указывается при создании подписки на событие.

При работе с интерфейсом командной строки 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

Проверка конечной точки с помощью CloudEvents версии 1.0

Если вы уже знакомы со службой "Сетка событий", то, возможно, знаете о проверке конечной точки для предотвращения нарушений. CloudEvents версии 1.0 реализует собственную семантику защиты от нарушений с помощью метода HTTP OPTIONS. Дополнительные сведения см. в статье Веб-перехватчики HTTP 1.1 для доставки событий – версия 1.0. При использовании схемы CloudEvents для вывода служба "Сетка событий" используется с защитой CloudEvents версии 1.0 вместо механизма событий проверки Сетки событий.

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

Visual Studio или Visual Studio Code

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

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

Следующие шаги