Схема CloudEvents версии 1.0 со службой "Сетка событий Azure"
Сетка событий Azure изначально поддерживает события в Реализация JSON для привязки протокола CloudEvents версии 1.0 и ПРОТОКОЛА HTTP. CloudEvents — открытая спецификация для описания данных о событиях. CloudEvents упрощает взаимодействие, предоставляя общую схему событий для публикации и использования событий на основе облака. Эта схема предоставляет обычные средства, стандартные способы маршрутизации и обработки событий, а также универсальные методы десериализации внешней схемы событий. Общая схема позволяет легко интегрировать работу на разных платформах.
Создание CloudEvents — это совместная работа нескольких компаний, включая корпорацию Майкрософт и компанию Cloud Native Computing Foundation. В настоящее время доступна версия 1.0.
В этой статье описывается использование схемы CloudEvents с сеткой событий.
Пример события с использованием схемы CloudEvents
Ниже приведен пример события Хранилище 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}",
"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, Служба "Сетка событий" поддерживает собственный, нетекстенсивный, но полностью функциональный формат событий Сетки событий. В следующей таблице описывается преобразование, поддерживаемое при использовании 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 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, выполните следующие действия:
Обновите имя параметра в
function.json
файлеcloudEvent
до .{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
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".