Поделиться через


Публикации устойчивых функций в службе "Сетка событий Azure"

В этой статье показано, как настроить Устойчивые функции публикации событий жизненного цикла оркестрации (например, созданных, завершенных и неудачных) в пользовательском разделе Сетка событий Azure.

Ниже приведены некоторые сценарии, где эта функция полезна:

  • Сценарии DevOps, например развертывания Blue-Green. Вам может потребоваться определить, выполняются ли какие-то задачи, перед реализацией стратегии параллельного развертывания.

  • Расширенная поддержка мониторинга и диагностика. Вы можете отслеживать сведения о состоянии оркестрации во внешнем хранилище, оптимизированном для запросов, таких как База данных SQL Azure или Azure Cosmos DB.

  • Продолжительное фоновое действие. При использовании устойчивых функций для продолжительного фонового действия эта функция позволяет вам узнать текущее состояние.

Необходимые компоненты

Создание пользовательского раздела сетки событий

Создайте раздел сетки событий для отправки событий из устойчивых функций. Ниже показано, как создать раздел с помощью Azure CLI. Раздел также можно создать с помощью PowerShell или на портале Azure.

Создание или изменение группы ресурсов

Создайте группу ресурсов с помощью команды az group create. Сейчас служба "Сетка событий Azure" поддерживает не все регионы. Сведения о поддерживаемых регионах службы "Сетка событий Azure" см. в этой статье.

az group create --name eventResourceGroup --location westus2

Создание пользовательской темы

Раздел сетки событий содержит определяемую пользователем конечную точку, в которой можно размещать свое событие. Замените <topic_name> уникальным именем для вашей темы. Имя раздела должно быть уникальным, так как оно становится записью службы доменных имен (DNS).

az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup

Получение конечной точки и ключа

Получите конечную точку раздела. Замените <topic_name> на выбранное имя.

az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv

Получите ключ раздела. Замените <topic_name> на выбранное имя.

az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv

Теперь можно отправлять события в раздел.

Настройка публикации в службе "Сетка событий"

Найдите файл host.json в вашем проекте устойчивых функций.

Устойчивые функции 1.x

Добавьте eventGridTopicEndpoint и eventGridKeySettingName в свойство durableTask.

{
  "durableTask": {
    "eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
    "eventGridKeySettingName": "EventGridKey"
  }
}

Устойчивые функции 2.x

Добавьте раздел notifications в свойство durableTask файла, заменив <topic_name> выбранным вами именем. Если свойства durableTask или extensions не существуют, создайте их, как показано в следующем примере:

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "notifications": {
        "eventGrid": {
          "topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
          "keySettingName": "EventGridKey"
        }
      }
    }
  }
}

Возможные свойства конфигурации службы "Сетка событий Azure" можно найти в документации host.json documentation. После настройки файла host.json приложение-функция будет отправлять события жизненного цикла в службу "Сетки событий". Это действие выполняется при запуске приложения-функции как локально, так и в Azure.

Установите параметр приложения для ключа раздела в приложении-функции и local.settings.json. Следующий код JSON является примером local.settings.json для локальной отладки с помощью эмулятора службы хранилища Azure. Замените <topic_key> на ключ раздела.

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "EventGridKey": "<topic_key>"
    }
}

Если вы используете эмулятор службы хранилища вместо реальной учетной записи хранилища Azure, убедитесь, что он запущен. Перед выполнением рекомендуется очистить все существующие данные хранилища.

Если вы используете реальную учетную запись службы хранилища Azure, замените UseDevelopmentStorage=true в local.settings.json на ее строку подключения.

Создание функций, которые прослушивают события

С помощью портала Azure создайте другое приложение-функцию для прослушивания событий, опубликованных вашим приложением Устойчивых функций. Рекомендуется разместить это приложение функцию в том же регионе, где находится раздел службы "Сетка событий".

Создание функции триггера сетки событий

  1. В приложении-функции выберите Функции, а затем выберите + Добавить.

    Добавьте функцию на портале Azure.

  2. Выполните поиск по фразе Сетка событий. Затем выберите шаблон триггера службы "Сетка событий Azure".

    Выберите шаблон триггера сетки событий в портал Azure.

  3. Присвойте новому триггеру имя. Затем выберите элемент Создать функцию.

    Назовите триггер сетки событий в портал Azure.

    Будет создана функция со следующим кодом:

    #r "Newtonsoft.Json"
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Microsoft.Extensions.Logging;
    
    public static void Run(JObject eventGridEvent, ILogger log)
    {
        log.LogInformation(eventGridEvent.ToString(Formatting.Indented));
    }
    

Добавление подписки в службе "Сетка событий"

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

  1. В новой функции выберите элемент Интеграция а затем выберите параметр триггера Сетки событий (eventGridEvent).

    Выберите ссылку на триггер Сетки событий.

  2. Выберите Create Event Grid Description (Создать описание Сетки событий).

    Создайте подписку на Сетку событий.

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

  4. Выберите подписку. Затем выберите для раздела Сетки событий созданную вами группу ресурсов и ресурс.

  5. Нажмите кнопку создания.

    Создайте подписку в службе

Теперь все готово для получения событий жизненного цикла.

Запуск приложения Устойчивых функций для отправки событий

В проекте Устойчивых функций, который вы настроили ранее, запустите отладку на локальном компьютере и начните оркестрацию. Приложение публикует события жизненного цикла Устойчивых функций в службе "Сетка событий". Убедитесь, что служба "Сетка событий" активирует созданную вами функцию прослушивателя. Для этого просмотрите журналы на портале Azure.

2019-04-20T09:28:21.041 [Info] Function started (Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d)
2019-04-20T09:28:21.104 [Info] {
    "id": "054fe385-c017-4ce3-b38a-052ac970c39d",
    "subject": "durable/orchestrator/Running",
    "data": {
        "hubName": "DurableFunctionsHub",
        "functionName": "Sample",
        "instanceId": "055d045b1c8a415b94f7671d8df693a6",
        "reason": "",
        "runtimeStatus": "Running"
    },
    "eventType": "orchestratorEvent",
    "eventTime": "2019-04-20T09:28:19.6492068Z",
    "dataVersion": "1.0",
    "metadataVersion": "1",
    "topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}

2019-04-20T09:28:21.104 [Info] Function completed (Success, Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d, Duration=65ms)
2019-04-20T09:28:37.098 [Info] Function started (Id=36fadea5-198b-4345-bb8e-2837febb89a2)
2019-04-20T09:28:37.098 [Info] {
    "id": "8cf17246-fa9c-4dad-b32a-5a868104f17b",
    "subject": "durable/orchestrator/Completed",
    "data": {
        "hubName": "DurableFunctionsHub",
        "functionName": "Sample",
        "instanceId": "055d045b1c8a415b94f7671d8df693a6",
        "reason": "",
        "runtimeStatus": "Completed"
    },
    "eventType": "orchestratorEvent",
    "eventTime": "2019-04-20T09:28:36.5061317Z",
    "dataVersion": "1.0",
    "metadataVersion": "1",
    "topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:37.098 [Info] Function completed (Success, Id=36fadea5-198b-4345-bb8e-2837febb89a2, Duration=0ms)

Схема событий

В приведенном ниже списке описана схема событий жизненного цикла:

  • id: уникальный идентификатор события Сетки событий.
  • subject: Путь к теме события. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus} будет Running, Completed, Failed и Terminated.
  • data: Устойчивые функции определенные параметры.
    • hubName: имя TaskHub .
    • functionName: имя функции Orchestrator.
    • instanceId: Устойчивые функции instanceId.
    • reason: дополнительные данные, связанные с событием отслеживания. Дополнительные сведения см. в статье Диагностика в устойчивых функциях (Функции Azure).
    • runtimeStatus: состояние среды выполнения оркестрации. "Running", "Completed", "Failed", "Canceled".
  • eventType: "orchestratorEvent"
  • eventTime: время события (UTC).
  • dataVersion: версия схемы события жизненного цикла.
  • metadataVersion: Версия метаданных.
  • topic: ресурс раздела сетки событий.

Локальное тестирование

Чтобы выполнить тестирование локально, см. раздел Локальное тестирование с веб-приложением средства просмотра.

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