Настройка обработки событий типа "двойник — двойник"

В этой статье показано, как отправлять события от двойника к двойнику, чтобы при обновлении одного цифрового двойника в графе, связанные двойники в графе, затронутые этой информацией, также могут обновляться. Эта обработка событий поможет вам создать полностью подключенный граф Azure Digital Twins, где данные, поступающие в Azure Digital Twins из внешних источников, таких как Центр Интернета вещей, распространяются по всему графу.

Чтобы настроить эту обработку событий двойника к двойнику, вы создадите функцию Azure, которая наблюдает за событиями жизненного цикла двойника. Функция распознает, какие события должны влиять на другие двойники в графе, и использует данные события для обновления затронутых двойников соответствующим образом.

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

Чтобы настроить обработку типа "двойник — двойник", вам потребуется экземпляр Azure Digital Twins. Чтобы создать экземпляр Azure Digital Twins, следуйте инструкциям в разделе Настройка экземпляра Azure Digital Twins и аутентификация (портал). Этот экземпляр должен содержать по крайней мере два двойника, между которыми необходимо передавать данные.

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

Отправка событий двойника в конечную точку

Чтобы настроить обработку событий типа "двойник — двойник", сначала создайте конечную точку в Azure Digital Twins и маршрут к этой конечной точке. Обновляемые двойники будет использовать этот маршрут для отправки сведений о событиях обновления в конечную точку (где Сетка событий сможет позже их извлечь и передать их в функцию Azure для обработки).

Создание раздела "Сетка событий"

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

В Azure CLI выполните следующую команду, чтобы создать раздел сетки событий:

az eventgrid topic create --resource-group <your-resource-group> --name <name-for-your-event-grid-topic> --location <region>

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

Создание конечной точки

Затем создайте конечную точку сетки событий в Azure Digital Twins, которая подключит экземпляр к разделу "Сетка событий". Используйте приведенную ниже команду, заполнив имя раздела сетки событий из предыдущего шага и других полей заполнителей по мере необходимости.

az dt endpoint create eventgrid --dt-name <Azure-Digital-Twins-instance> --eventgrid-resource-group <your-resource-group> --eventgrid-topic <your-event-grid-topic> --endpoint-name <name-for-your-Azure-Digital-Twins-endpoint>

Выходные данные этой команды содержат сведения о созданной конечной точке.

Найдите поле provisioningState в выходных данных и убедитесь, что оно имеет значение Succeeded (Успешно).

Screenshot of the result of the endpoint query in the Cloud Shell of the Azure portal, showing the endpoint with a provisioningState of Succeeded.

Если отображается значение Provisioning (Подготовка), конечная точка все еще создается. Если это так, подождите несколько секунд и выполните указанную ниже команду, чтобы проверить состояние конечной точки. Выполняйте это, пока provisioningState не отобразит значение Succeeded (Успешно).

az dt endpoint show --dt-name <your-Azure-Digital-Twins-instance> --endpoint-name <your-Azure-Digital-Twins-endpoint> 

Сохраните имя конечной точки, так как оно понадобится вам позже.

Создание маршрута

Затем создайте маршрут Azure Digital Twins, который отправляет события в созданную конечную точку сетки событий.

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

Совет

При необходимости с помощью фильтров можно ограничить список событий.

az dt route create --dt-name <your-Azure-Digital-Twins-instance> --endpoint-name <your-Azure-Digital-Twins-endpoint> --route-name <name-for-your-Azure-Digital-Twins-route>

Выходные данные этой команды содержат сведения о созданном маршруте.

Примечание.

Конечные точки (из предыдущего шага) должны завершить подготовку до настройки маршрута события, в котором они используются. Если создание маршрута завершается сбоем из-за неготовности конечных точек, подождите несколько минут и повторите попытку.

Создание функции Azure для обновления двойников

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

  1. Сначала создайте проект Функции Azure.

    Это можно сделать с помощью Visual Studio (инструкции см. в статье "Разработка Функции Azure с помощью Visual Studio"), Visual Studio Code (инструкции см. в статье "Создание функции C# в Azure с помощью Visual Studio Code") или Azure CLI (инструкции см. в статье "Создание функции C# в Azure из командной строки").

  2. Добавьте в проект следующие пакеты (диспетчер пакетов NuGet Visual Studio или команду dotnet add package в средстве командной строки).

  3. Заполните логику функции. Вы можете просмотреть пример кода функций для нескольких сценариев в репозитории azure-digital-twins-getting-started, чтобы вам было проще приступить к работе.

  4. Опубликуйте функцию в Azure с помощью предпочтительного метода.

    Инструкции по публикации функции с помощью Visual Studio см. в статье "Разработка Функции Azure с помощью Visual Studio". Инструкции по публикации функции с помощью Visual Studio Code см. в статье "Создание функции C# в Azure с помощью Visual Studio Code". Инструкции по публикации функции с помощью Azure CLI см. в статье "Создание функции C# в Azure из командной строки".

После завершения публикации функции можно использовать эту команду Azure CLI для проверки успешной публикации. Заполнители для группы ресурсов, имя приложения-функции и имя конкретной функции. Команда будет выводить сведения о функции.

az functionapp function show --resource-group <your-resource-group> --name <your-function-app> --function-name <your-function>

Настройка приложения-функции

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

Выполните указанные ниже команды в Azure Cloud Shell или локальном экземпляре Azure CLI.

Примечание.

Данный раздел должен быть заполнен пользователем Azure, у которого имеются разрешения на управление доступом пользователей к ресурсам Azure, включая предоставление и делегирование разрешений. Общие роли, отвечающие этому требованию: Владелец или Администратор учетной записи либо сочетание ролей Администратор доступа пользователей и Участник. Дополнительные сведения о требованиях к разрешениям для ролей Azure Digital Twins см. в разделе Настройка экземпляра и аутентификации.

Назначение роли доступа

В функцию Azure необходимо передать токен носителя. Чтобы гарантированно передать токен носителя, предоставьте приложению-функции роль владельца данных Azure Digital Twins для своего экземпляра Azure Digital Twins, который предоставит приложению-функции разрешение на выполнение действий на плоскости данных в экземпляре.

  1. Используйте следующую команду, чтобы создать управляемое системой удостоверение для функции (если функция уже имеет одну, эта команда будет выводить сведения о ней). Запишите principalId поле в выходных данных. Этот идентификатор будет использоваться для обращения к функции, чтобы вы могли предоставить ей разрешения на следующем шаге.

    az functionapp identity assign --resource-group <your-resource-group> --name <your-function-app-name>	
    
  2. Используйте значение principalId в следующей команде, чтобы предоставить функции роль владельца Azure Digital Twins для вашего экземпляра Azure Digital Twins.

    az dt role-assignment create --dt-name <your-Azure-Digital-Twins-instance> --assignee "<principal-ID>" --role "Azure Digital Twins Data Owner"
    

Настройка параметров приложения

Затем сделайте URL-адрес экземпляра Azure Digital Twins доступным для функции, задав переменную среды для нее.

Совет

URL-адрес экземпляра Azure Digital Twins создается путем добавления префикса https:// к значению имени узла вашего экземпляра. Чтобы просмотреть имя узла, а также все свойства экземпляра, выполните команду az dt show --dt-name <your-Azure-Digital-Twins-instance>.

Следующая команда задает переменную среды для URL-адреса экземпляра, который будет использоваться функцией при попытке доступа к экземпляру.

az functionapp config appsettings set --resource-group <your-resource-group> --name <your-function-app-name> --settings "ADT_SERVICE_URL=https://<your-Azure-Digital-Twins-instance-host-name>"

Подключение функцию в конечную точку

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

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

Используйте приведенную ниже команду интерфейса командной строки, заменив заполнители для идентификатора подписки, группы ресурсов, приложения-функции и имени функции.

az eventgrid event-subscription create --name <name-for-your-event-subscription> --source-resource-id /subscriptions/<subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.EventGrid/topics/<your-event-grid-topic> --endpoint-type azurefunction --endpoint /subscriptions/<subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Web/sites/<your-function-app-name>/functions/<function-name> 

Теперь функция может получать события с помощью раздела "Сетка событий". Настройка потока данных завершена.

Тестирование и проверка результатов

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

Чтобы запустить процесс, обновите двойник, который является источником потока событий. Для обновления можно использовать Azure CLI, пакет SDK для Azure Digital Twins или интерфейсы REST API Azure Digital Twins.

Затем запросите у экземпляра Azure Digital Twins связанный двойник. Можно использовать Azure CLI, интерфейсы REST API или пакет SDK для Azure Digital Twins. Убедитесь, что двойник получил данные и обновился должным образом.

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

В этой статье вы настроили обработку событий типа "двойник — двойник" в Azure Digital Twins. Далее вы можете настроить функцию Azure для автоматической активации этого потока на основе входящих данных телеметрии из устройств центра Интернета вещей: Прием данных телеметрии из Центра Интернета вещей.