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


Руководство по развертыванию Azure Functions в виде модулей IoT Edge

Применимо к:IoT Edge 1.5 флажок 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#.

  1. Откройте Visual Studio Code на компьютере разработки.

  2. Откройте палитру команд Visual Studio Code, выбрав View > Command Palette.

  3. В палитре команд добавьте и запустите команду Azure IoT Edge: новое решение IoT Edge. Выполните следующие запросы в палитре команд, чтобы создать решение:

    • Выберите папку: выберите расположение на машине для разработки, чтобы Visual Studio Code смог создать файлы решения.
    • Укажите имя решения: добавьте описательное имя решения, например FunctionSolution, или примите значение по умолчанию.
    • Выберите шаблон модуля: выберите Azure Functions — C#.
    • Укажите имя модуля: назовите модуль CSharpFunction.
    • Укажите репозиторий образов Docker для модуля: репозиторий образов включает имя реестра контейнеров и имя образа контейнера. Портал предварительно заполняет образ контейнера из предыдущего шага. Замените localhost:5000 значением сервера входа из реестра контейнеров Azure. Вы можете получить сервер входа на странице Обзор реестра контейнеров на портале Azure. Последняя строка выглядит следующим образом <registry name>.azurecr.io/csharpfunction.

    Скриншот, показывающий, где добавить имя репозитория образов Docker в Visual Studio Code.

Добавление учетных данных реестра

Файл среды в решении сохраняет учетные данные для реестра контейнеров и предоставляет им общий доступ к среде выполнения IoT Edge. Среде выполнения нужны эти учетные данные для загрузки частных образов на устройство IoT Edge.

Расширение IoT Edge в Visual Studio Code пытается извлечь учетные данные реестра контейнеров из Azure и заполнить их в файле среды. Проверьте, уже ли учетные данные находятся в файле. В противном случае добавьте их:

  1. В обозревателе Visual Studio Code откройте файл .env.
  2. Обновите поля с помощью значений username и password скопированных из реестра контейнеров Azure. Чтобы найти их снова, перейдите в реестр контейнеров в Azure и просмотрите страницу Settings > ключи доступа.
  3. Сохраните этот файл.

Примечание.

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

Установка целевой архитектуры в AMD64

модули Azure Functions в IoT Edge поддерживаются только в контейнерах на основе Linux AMD64. Целевая архитектура по умолчанию для Visual Studio Code — Linux AMD64, но вы можете явно задать ее для Linux AMD64 здесь.

  1. Откройте палитру команд и найдите Azure IoT Edge: задайте целевую платформу по умолчанию для пограничного решения.
  2. В палитре команд выберите целевую архитектуру AMD64 из списка параметров.

Обновление модуля с помощью пользовательского кода

Добавьте код, чтобы модуль CSharpFunction обрабатывает сообщения на границе перед пересылкой их в IoT Hub.

  1. В обозревателе Visual Studio Code откройте modules > CSharpFunction > CSharpFunction.cs.

  2. Измените содержимое файла 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;}
        }
    }
    
  3. Сохраните файл.

Создание и отправка решения IoT Edge

В предыдущем разделе вы создали решение IoT Edge и изменили CSharpFunction, чтобы отфильтровать сообщения с указанными температурами компьютера ниже допустимого порога. Теперь создайте решение как образ контейнера и отправьте его в реестр контейнеров.

  1. Откройте интегрированный терминал Visual Studio Code. Выберите "Просмотреть > терминал".

  2. Войдите в Docker в терминале. Используйте имя пользователя, пароль и сервер проверки подлинности из реестра контейнеров Azure. Получите эти значения из раздела Ключи доступа вашего реестра на портале Azure.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать --password-stdin. Для рабочих сценариев это лучшая методика, но мы не будем рассматривать ее в этом учебнике. Дополнительные сведения см. в описании команды docker login в справочнике.

  3. В обозревателе Visual Studio Code щелкните правой кнопкой мыши файл deployment.template.json и выберите Собрать и Отправить решение IoT Edge.

    Команда сборки и отправки запускает три операции. Во-первых, он создает новую папку в решении с именем config , которая содержит полный манифест развертывания, созданный из шаблона развертывания и других файлов решения. Во-вторых, запускается docker build для создания образа контейнера на основе определенного Dockerfile для целевой архитектуры. Затем выполняется docker push для передачи репозитория образов в реестр контейнеров.

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

Просмотр образа контейнера

Visual Studio Code отображает сообщение об успешной загрузке при отправке вашего образа контейнера в ваш реестр контейнеров. Чтобы подтвердить операцию, просмотрите образ в реестре.

  1. На портале Azure перейдите в реестр контейнеров Azure.
  2. Выберите репозитории служб>.
  3. В списке отображается репозиторий csharpfunction . Выберите этот репозиторий, чтобы просмотреть дополнительные сведения.
  4. В разделе "Теги" отображается тег 0.0.1-amd64 . Этот тег показывает версию и платформу созданного образа. Файл module.json в папке CSharpFunction задает эти значения.

Развертывание и запуск решения

Используйте портал Azure для развертывания модуля функции на устройстве IoT Edge, как показано в кратком руководстве. Вы также можете развертывать и отслеживать модули из Visual Studio Code. В следующих разделах используются Azure IoT Edge и IoT Hub для расширений Visual Studio Code, перечисленных в предварительных требованиях. Установите расширения, если вы еще не сделали этого.

  1. В обозревателе Visual Studio Code в разделе Azure IoT Hub откройте пункт Devices, чтобы просмотреть список IoT-устройств.

  2. Щелкните правой кнопкой мыши имя устройства IoT Edge и выберите Create Deployment for Single Device.

  3. Перейдите в папку решения с CSharpFunction. Откройте папку конфигурации, выберите файл deployment.amd64.json и затем Select Edge Deployment Manifest (Выбрать манифест развертывания Edge).

  4. Разверните меню Модули для своего устройства, чтобы просмотреть список развернутых и запущенных модулей. Нажмите кнопку обновления. Вы можете увидеть новое выполнение CSharpFunction вместе с модулем SimulatedTemperatureSensor , $edgeAgent и $edgeHub.

    Для отображения новых модулей может потребоваться несколько минут. Устройство IoT Edge получает новые сведения о развертывании из IoT Hub, запускает новые контейнеры, а затем сообщает о состоянии обратно в IoT Hub.

    Screenshot, показывающий, как просматривать развернутые модули в Visual Studio Code.

Просмотр созданных данных

Посмотрите все сообщения, поступающие в Центр Интернета вещей с ваших устройств, запустив 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 ресурс, а не группу ресурсов.

Чтобы удалить ресурсы:

  1. Войдите на портал Azure, а затем выберите группы Resource.
  2. Выберите имя группы ресурсов, содержащей IoT Edge тестовые ресурсы.
  3. Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, выберите каждый ресурс, чтобы удалить их по отдельности.

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

В этом руководстве вы создали модуль функции Azure с кодом для фильтрации необработанных данных, созданных устройством IoT Edge.

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