Разработка собственных модулей IoT Edge
Область применения: IoT Edge 1.5 IoT Edge 1.4
Внимание
Поддерживаются выпуски IoT Edge 1.5 LTS и IoT Edge 1.4 LTS. IoT Edge 1.4 LTS заканчивается жизнью 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.
Модули Azure IoT Edge можно подключить к другим службам Azure, чтобы расширить свой облачный конвейер данных. В этой статье описывается, как можно разрабатывать модули для взаимодействия со средой выполнения IoT Edge и Центром Интернета вещей, то есть с остальной частью облака Azure.
Среда выполнения IoT Edge
Среда выполнения IoT Edge предоставляет инфраструктуру для интеграции функциональных возможностей нескольких модулей IoT Edge и их развертывания на пограничных устройствах Интернета вещей. Любую программу можно упаковать как модуль IoT Edge. Чтобы использовать все преимущества функций обмена данными и управления, которые есть в IoT Edge, программа, работающая в модуле, может подключаться к локальному центру IoT Edge с помощью пакета SDK для устройств Интернета вещей Azure.
Упаковка программы в виде модуля IoT Edge
Чтобы развернуть программу на устройстве IoT Edge, ее сначала необходимо поместить в контейнер и запустить с помощью подсистемы, совместимой с Docker. В качестве подсистемы, совместимой с Docker, в IoT Edge используется Moby, проект с открытым исходным кодом для Docker. Те же параметры, которые вы используете с Docker, можно передавать в модули IoT Edge. Дополнительные сведения см. в разделе Настройка параметров создания контейнера для модулей IOT Edge.
Использование концентратора IoT Edge
Центр IoT Edge предоставляет две основные функции: прокси-сервер для Центр Интернета вещей и локальных коммуникаций.
Подключение к концентратору IoT Edge из модуля
При подключении к локальному центру IoT Edge из модуля выполняются те же действия, что и для любых клиентов. Дополнительные сведения см. в разделе Подключение к центру IoT Edge.
Чтобы использовать маршрутизацию IoT Edge по AMQP, можно использовать ModuleClient из пакета SDK Для Интернета вещей Azure. Создайте экземпляр ModuleClient для подключения модуля к центру IoT Edge, запущенному на устройстве, аналогично тому, как экземпляры DeviceClient подключают устройства Интернета вещей к Центру Интернета вещей. Дополнительные сведения о классе ModuleClient и его методах для обмена данными см. в справочнике по API для предпочитаемого языкового пакета для пакета SDK: C#, C, Python, Java или Node.js.
Основные сведения о Центре Интернета вещей
Центр Интернета вещей отображает экземпляр модуля аналогично устройству. Экземпляр модуля может:
- Отправка сообщений устройства в облако
- Получение прямых методов, предназначенных специально для его удостоверения
- У вас есть двойник модуля, который отличается и изолирован от двойника устройства и других двойников модуля этого устройства
Сейчас модули не могут получать сообщения из облака на устройство или использовать функцию передачи файлов.
При написании модуля можно подключиться к центру IoT Edge и использовать примитивы Центра Интернета вещей так же, как при использовании Центра Интернета вещей с приложением для устройства. Единственное различие между модулями IoT Edge и приложениями устройств Интернета вещей заключается в том, что с модулями необходимо ссылаться на удостоверение модуля вместо удостоверения устройства.
Отправка сообщений с устройства в облако
Модуль IoT Edge может отправлять сообщения в облако через центр IoT Edge, который выступает в качестве локального брокера и пересылает сообщения в облако. Чтобы обеспечить сложную обработку сообщений из устройства в облако, модуль IoT Edge может перехватывать и обрабатывать сообщения, отправленные другими модулями или устройствами в локальный центр IoT Edge. Затем модуль IoT Edge отправляет новые сообщения с обработанными данными. Благодаря этому можно создавать цепочки модулей IoT Edge для формирования конвейеров локальной обработки.
Для отправки сообщений телеметрии устройства в облако с помощью маршрутов:
- Используйте класс "Клиент модуля" пакета SDK для Интернета вещей Azure. Каждый модуль имеет конечные точки ввода и вывода .
- Используйте метод отправки сообщений из класса Клиента модуля для отправки сообщений на выходную конечную точку модуля.
- Настройте маршрут в модуле edgeHub устройства, чтобы отправить эту выходную конечную точку в Центр Интернета вещей.
Обработка сообщений с помощью маршрутов:
- Настройте маршрут для отправки сообщений из другой конечной точки (модуля или устройства) в входную конечную точку модуля.
- Прослушивание сообщений в входной конечной точке модуля. При каждом возвращении нового сообщения пакета SDK для Интернета вещей Azure активирует функции обратного вызова.
- Обработайте сообщение с помощью этой функции обратного вызова и (необязательно) отправьте новые сообщения в очередь конечной точки модуля.
Примечание.
Дополнительные сведения об объявлении маршрута см. в статье Развертывание модулей и установка маршрутов в IoT Edge.
Двойники
Двойники являются одним из примитивов, предоставляемых Центром Интернета вещей. Существуют документы JSON, в которых хранятся сведения о состоянии, включая метаданные, конфигурации и условия. У каждого модуля или устройства есть собственный двойник.
Чтобы получить двойник модуля с пакетом SDK для Интернета вещей Azure, вызовите
ModuleClient.getTwin
метод.Чтобы получить исправление двойника модуля с помощью пакета SDK для Интернета вещей Azure, реализуйте функцию обратного вызова и зарегистрируйте ее с
ModuleClient.moduleTwinCallback
помощью метода из пакета SDK Для Интернета вещей Azure, чтобы функция обратного вызова активируется каждый раз, когда происходит исправление двойника.
Получение прямых методов
Чтобы получить прямой метод с пакетом SDK Для Интернета вещей Azure, реализуйте функцию обратного вызова и зарегистрируйте ее с ModuleClient.methodCallback
помощью метода из пакета SDK Для Интернета вещей Azure, чтобы функция обратного вызова активируется при каждом запуске прямого метода.
Поддерживаемые языки и архитектуры
IoT Edge поддерживает несколько операционных систем, архитектур устройств и языков разработки, чтобы создать сценарий, соответствующий вашим потребностям. В этом разделе вы ознакомитесь с вариантами разработки пользовательских модулей IoT Edge. Дополнительные сведения о поддержке средств и требованиях для каждого языка приведены в статье Подготовка среды разработки и тестирования для IOT Edge.
Linux
Для всех языков в следующей таблице IoT Edge поддерживает разработку для AMD64 и большинства контейнеров Linux ARM64. Также поддерживается контейнеры Debian 11 ARM32.
Язык разработки | Средства разработки |
---|---|
C | Visual Studio Code Visual Studio 2019/2022 |
C# | Visual Studio Code Visual Studio 2019/2022 |
Java | Visual Studio Code |
Node.js | Visual Studio Code |
Python | Visual Studio Code |
Примечание.
Для кроссплатформенной компиляции, например компиляции модуля ARM32 IoT Edge на компьютере разработки AMD64, необходимо настроить компьютер разработки для компиляции кода на целевой архитектуре устройств, соответствующей модулю IoT Edge. Дополнительные сведения об архитектуре целевых устройств см. в статье "Разработка модулей Azure IoT Edge с помощью Visual Studio Code".
Windows
Мы больше не поддерживаем контейнеры Windows. Для запуска IoT Edge на устройствах Windows сейчас рекомендуется использовать Azure IoT Edge для Linux в Windows.
Безопасность модуля
Следует разрабатывать модули с учетом безопасности. Дополнительные сведения о защите модулей см. в разделе "Безопасность Docker".
Чтобы повысить безопасность модуля, IoT Edge отключает некоторые функции контейнера по умолчанию. При необходимости можно переопределить значения по умолчанию, чтобы предоставить привилегированные возможности модулям.
Разрешить повышенные разрешения Docker
В файле конфигурации на устройстве IoT Edge есть параметр с именем allow_elevated_docker_permissions
. Если задано значение true, этот флаг позволяет --privileged
флагу и любым дополнительным возможностям, заданным в CapAdd
поле Docker HostConfig в параметрах создания контейнера.
Примечание.
В настоящее время этот флаг по умолчанию имеет значение true, что позволяет развертываниям предоставлять привилегированные разрешения модулям. Рекомендуется задать для этого флага значение false, чтобы повысить безопасность устройств.
Включение CAP_CHOWN и CAP_SETUID
Возможности Docker CAP_CHOWN и CAP_SETUID отключены по умолчанию. Эти возможности можно использовать для записи для защиты файлов на хост-устройстве и потенциально получения корневого доступа.
Если вам нужны эти возможности, их можно повторно включить вручную с помощью CapADD в параметрах создания контейнера.
Следующие шаги
Подготовка среды разработки и тестирования для IoT Edge
Разработка модулей Azure IoT Edge с помощью Visual Studio Code
Отладка модулей Azure IoT Edge с помощью Visual Studio Code
Понимание и использование пакетов SDK для Центра Интернета вещей Azure