Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:
IoT Edge 1.5
Внимание
IoT Edge 1.5 LTS — это поддерживаемый выпуск. IoT Edge 1.4 LTS достиг срока окончания службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update IoT Edge.
Используйте Azure Functions для развертывания кода, который выполняет бизнес-логику непосредственно на Azure IoT Edge устройствах. В этом руководстве показано, как создать и развернуть функцию Azure, которая фильтрует данные датчика на имитированном устройстве IoT Edge. Используйте симулированное устройство IoT Edge, созданное в руководствах для быстрого старта. В этом руководстве описано следующее:
- Создание функции Azure с помощью Visual Studio Code
- Использование Visual Studio Code и Docker для создания образа Docker и публикации его в реестре контейнеров
- Развертывание модуля из реестра контейнеров на устройстве IoT Edge
- Просмотр отфильтрованных данных
Функция Azure, созданная в этом руководстве, фильтрует данные температуры, созданные устройством. Функция отправляет сообщения только вверх по Azure IoT Hub, если температура превышает указанное пороговое значение.
Если у вас нет учетной записи Azure, создайте учетную запись free перед началом работы.
Предварительные требования
Перед началом работы с этим руководством следуйте инструкциям по настройке среды разработки для контейнеров Linux: Develop Azure IoT Edge с помощью модулей Visual Studio Code. По завершении у вас должны быть выполнены следующие предварительные условия:
- Бесплатный или стандартный уровень IoT Hub в Azure.
- Устройство AMD64 под управлением Azure IoT Edge с контейнерами Linux. Используйте быстрое руководство для настройки устройства Linux или устройства Windows.
- Реестр контейнеров, например Azure Container Registry.
- Visual Studio Code настроен с помощью расширений Azure IoT Edge и Azure IoT Hub. Средство Azure IoT Edge tools для Visual Studio Code находится в режиме поддержки.
- Скачайте и установите совместимую систему управления контейнерами Docker на компьютере разработки. Установите его для запуска контейнеров Linux.
Чтобы разработать модуль IoT Edge с Azure Functions, установите следующие дополнительные предварительные требования на компьютере разработки:
Создание проекта функции
Azure IoT Edge для Visual Studio Code предоставляет возможности управления и шаблоны кода. В этом разделе вы используете Visual Studio Code для создания решения IoT Edge с помощью функции Azure.
Создание нового проекта
Выполните следующие действия, чтобы создать настраиваемый шаблон решения функции C#.
Откройте Visual Studio Code на компьютере разработки.
Откройте палитру команд Visual Studio Code, выбрав View > Command Palette.
В палитре команд добавьте и запустите команду Azure IoT Edge: новое решение IoT Edge. Выполните следующие запросы в палитре команд, чтобы создать решение:
- Выберите папку: выберите расположение на машине для разработки, чтобы Visual Studio Code смог создать файлы решения.
- Укажите имя решения: добавьте описательное имя решения, например FunctionSolution, или примите значение по умолчанию.
- Выберите шаблон модуля: выберите Azure Functions — C#.
- Укажите имя модуля: назовите модуль CSharpFunction.
- Укажите репозиторий образов Docker для модуля: репозиторий образов включает имя реестра контейнеров и имя образа контейнера. Портал предварительно заполняет образ контейнера из предыдущего шага. Замените localhost:5000 значением сервера входа из реестра контейнеров Azure. Вы можете получить сервер входа на странице Обзор реестра контейнеров на портале Azure. Последняя строка выглядит следующим образом
<registry name>.azurecr.io/csharpfunction.
Добавление учетных данных реестра
Файл среды в решении сохраняет учетные данные для реестра контейнеров и предоставляет им общий доступ к среде выполнения IoT Edge. Среде выполнения нужны эти учетные данные для загрузки частных образов на устройство IoT Edge.
Расширение IoT Edge в Visual Studio Code пытается извлечь учетные данные реестра контейнеров из Azure и заполнить их в файле среды. Проверьте, уже ли учетные данные находятся в файле. В противном случае добавьте их:
- В обозревателе Visual Studio Code откройте файл .env.
- Обновите поля с помощью значений username и password скопированных из реестра контейнеров Azure. Чтобы найти их снова, перейдите в реестр контейнеров в Azure и просмотрите страницу Settings > ключи доступа.
- Сохраните этот файл.
Примечание.
В этом руководстве используются учетные данные для входа администратора для Azure Container Registry, которые удобны для сценариев разработки и тестирования. Для производственной среды используйте параметр проверки подлинности с минимальными привилегиями, такие как служебные участники. Дополнительные сведения см. в разделе Управление доступом к реестру контейнеров.
Установка целевой архитектуры в AMD64
модули Azure Functions в IoT Edge поддерживаются только в контейнерах на основе Linux AMD64. Целевая архитектура по умолчанию для Visual Studio Code — Linux AMD64, но вы можете явно задать ее для Linux AMD64 здесь.
- Откройте палитру команд и найдите Azure IoT Edge: задайте целевую платформу по умолчанию для пограничного решения.
- В палитре команд выберите целевую архитектуру AMD64 из списка параметров.
Обновление модуля с помощью пользовательского кода
Добавьте код, чтобы модуль CSharpFunction обрабатывает сообщения на границе перед пересылкой их в IoT Hub.
В обозревателе Visual Studio Code откройте modules > CSharpFunction > CSharpFunction.cs.
Измените содержимое файла CSharpFunction.cs на код, приведенный ниже. Этот код получает данные телеметрии о температуре окружающей среды и компьютера и пересылает сообщение в IoT Hub только в том случае, если температура компьютера превышает определенное пороговое значение.
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Functions.Samples { public static class CSharpFunction { [FunctionName("CSharpFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. class MessageBody { public Machine machine {get; set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} } }Сохраните файл.
Создание и отправка решения IoT Edge
В предыдущем разделе вы создали решение IoT Edge и изменили CSharpFunction, чтобы отфильтровать сообщения с указанными температурами компьютера ниже допустимого порога. Теперь создайте решение как образ контейнера и отправьте его в реестр контейнеров.
Откройте интегрированный терминал Visual Studio Code. Выберите "Просмотреть > терминал".
Войдите в Docker в терминале. Используйте имя пользователя, пароль и сервер проверки подлинности из реестра контейнеров Azure. Получите эти значения из раздела Ключи доступа вашего реестра на портале Azure.
docker login -u <ACR username> -p <ACR password> <ACR login server>Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать
--password-stdin. Для рабочих сценариев это лучшая методика, но мы не будем рассматривать ее в этом учебнике. Дополнительные сведения см. в описании команды docker login в справочнике.В обозревателе Visual Studio Code щелкните правой кнопкой мыши файл deployment.template.json и выберите Собрать и Отправить решение IoT Edge.
Команда сборки и отправки запускает три операции. Во-первых, он создает новую папку в решении с именем config , которая содержит полный манифест развертывания, созданный из шаблона развертывания и других файлов решения. Во-вторых, запускается
docker buildдля создания образа контейнера на основе определенного Dockerfile для целевой архитектуры. Затем выполняетсяdocker pushдля передачи репозитория образов в реестр контейнеров.Этот процесс может занять несколько минут в первый раз, но это быстрее при следующем выполнении команд.
Просмотр образа контейнера
Visual Studio Code отображает сообщение об успешной загрузке при отправке вашего образа контейнера в ваш реестр контейнеров. Чтобы подтвердить операцию, просмотрите образ в реестре.
- На портале Azure перейдите в реестр контейнеров Azure.
- Выберите репозитории служб>.
- В списке отображается репозиторий csharpfunction . Выберите этот репозиторий, чтобы просмотреть дополнительные сведения.
- В разделе "Теги" отображается тег 0.0.1-amd64 . Этот тег показывает версию и платформу созданного образа. Файл module.json в папке CSharpFunction задает эти значения.
Развертывание и запуск решения
Используйте портал Azure для развертывания модуля функции на устройстве IoT Edge, как показано в кратком руководстве. Вы также можете развертывать и отслеживать модули из Visual Studio Code. В следующих разделах используются Azure IoT Edge и IoT Hub для расширений Visual Studio Code, перечисленных в предварительных требованиях. Установите расширения, если вы еще не сделали этого.
В обозревателе Visual Studio Code в разделе Azure IoT Hub откройте пункт Devices, чтобы просмотреть список IoT-устройств.
Щелкните правой кнопкой мыши имя устройства IoT Edge и выберите Create Deployment for Single Device.
Перейдите в папку решения с CSharpFunction. Откройте папку конфигурации, выберите файл deployment.amd64.json и затем Select Edge Deployment Manifest (Выбрать манифест развертывания Edge).
Разверните меню Модули для своего устройства, чтобы просмотреть список развернутых и запущенных модулей. Нажмите кнопку обновления. Вы можете увидеть новое выполнение CSharpFunction вместе с модулем SimulatedTemperatureSensor , $edgeAgent и $edgeHub.
Для отображения новых модулей может потребоваться несколько минут. Устройство IoT Edge получает новые сведения о развертывании из IoT Hub, запускает новые контейнеры, а затем сообщает о состоянии обратно в IoT Hub.
Просмотр созданных данных
Посмотрите все сообщения, поступающие в Центр Интернета вещей с ваших устройств, запустив Azure IoT Hub: начать мониторинг встроенной конечной точки событий в палитре команд. Чтобы остановить мониторинг сообщений, запустите Azure IoT Hub: остановите мониторинг встроенной конечной точки события в палитре команд.
Чтобы отфильтровать представление и просмотреть сообщения с определенного устройства, щелкните правой кнопкой мыши устройство в разделе Azure IoT Hub > обозревателя Visual Studio Code и выберите Start Monitoring Built-in Event Endpoint.
Очистка ресурсов
Если вы планируете продолжить работу со следующей рекомендуемой статьей, сохраните созданные ресурсы и конфигурации, и используйте их повторно. Вы также можете использовать то же IoT Edge устройство, что и тестовое устройство.
В противном случае удалите локальную конфигурацию и ресурсы Azure, созданные в этой статье, чтобы избежать расходов.
Удаление ресурсов Azure
Отменить удаление Azure ресурсов и групп ресурсов невозможно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали IoT Hub внутри существующей группы ресурсов с ресурсами, которые нужно сохранить, удалите только сам IoT Hub ресурс, а не группу ресурсов.
Чтобы удалить ресурсы:
- Войдите на портал Azure, а затем выберите группы Resource.
- Выберите имя группы ресурсов, содержащей IoT Edge тестовые ресурсы.
- Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, выберите каждый ресурс, чтобы удалить их по отдельности.
Следующие шаги
В этом руководстве вы создали модуль функции Azure с кодом для фильтрации необработанных данных, созданных устройством IoT Edge.
Перейдите к следующим руководствам, чтобы узнать о других способах, которыми Azure IoT Edge может помочь превратить данные в бизнес-аналитику на краю.