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


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

Область применения:Отметка IoT Edge 1.5 IoT Edge 1.5

Внимание

IoT Edge 1.5 LTS является поддерживаемым выпуском. IoT Edge 1.4 LTS заканчивается жизнью с 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Используйте Функции Azure для развертывания кода, который выполняет бизнес-логику непосредственно на устройствах Azure IoT Edge. В этом руководстве показано, как создать и развернуть функцию Azure, которая фильтрует данные датчика на имитированном устройстве IoT Edge. Используйте имитированное устройство IoT Edge, созданное в рамках быстрого старта. В этом руководстве описано следующее:

  • Использование Visual Studio Code для создания функции Azure
  • Создание образа Docker и публикация в реестре контейнеров с помощью Visual Studio Code и Docker
  • Развертывание модуля из реестра контейнеров на устройстве IoT Edge
  • Просмотр отфильтрованных данных

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

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

Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.

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

Прежде чем приступить к работе с этим руководством, следуйте инструкциям по настройке среды разработки для контейнеров Linux: разработка модулей Azure IoT Edge с помощью Visual Studio Code. По завершении у вас должны быть выполнены следующие предварительные условия:

Чтобы разработать модуль IoT Edge с помощью Функций Azure, установите следующие дополнительные предварительные требования на компьютере разработки:

Создание проекта функции

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

Создание нового проекта

Выполните следующие действия, чтобы создать настраиваемый шаблон решения функции C#.

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

  2. Откройте палитру команд Visual Studio Code, выбрав "Просмотреть>палитру команд".

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

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

    Снимок экрана: добавление имени репозитория образов Docker в Visual Studio Code.

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

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

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

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

Примечание.

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

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

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

  1. Откройте палитру команд и найдите Azure IoT Edge: задайте целевую платформу по умолчанию для решения Edge.

  2. В палитре команд выберите целевую архитектуру AMD64 из списка параметров.

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

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

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

  2. Измените содержимое файла CSharpFunction.cs на код, приведенный ниже. Этот код получает данные телеметрии о температуре окружающей среды и компьютера и пересылает сообщение в Центр Интернета вещей, только если температура компьютера превышает определенное пороговое значение.

    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 и Центра Интернета вещей для Visual Studio Code, перечисленные в предварительных требованиях. Установите расширения, если вы еще не сделали этого.

  1. В обозревателе Visual Studio Code в разделе Azure IoT Hub разверните Устройства, чтобы увидеть список устройств 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 получает новые сведения о развертывании из Центра Интернета вещей, запускает новые контейнеры, а затем сообщает о состоянии обратно в Центр Интернета вещей.

    Снимок экрана: просмотр развернутых модулей в Visual Studio Code.

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

Просмотрите все сообщения, которые поступают в ваш центр Интернета вещей от устройств, запустив команду Azure IoT Hub: Начать мониторинг встроенной конечной точки событий в палитре команд. Чтобы остановить мониторинг сообщений, запустите Центр Интернета вещей Azure: остановить мониторинг встроенной конечной точки событий в палитре команд.

Чтобы отфильтровать представление и просмотреть сообщения с определенного устройства, щелкните правой кнопкой мыши устройство в разделе"Устройства> Интернета вещей Azure" обозревателя Visual Studio Code и выберите "Начать мониторинг встроенной конечной точки события".

Очистка ресурсов

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

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

Удаление ресурсов Azure

Удаление ресурсов и групп ресурсов Azure является необратимым. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали Центр Интернета вещей в существующей группе ресурсов с ресурсами, которые необходимо сохранить, удалите только сам ресурс Центра Интернета вещей, а не группу ресурсов.

Удаление ресурсов:

  1. Войдите на портал Azure и щелкните Группы ресурсов.

  2. Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.

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

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

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

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