Хранение данных на пограничных устройствах с использованием хранилища BLOB-объектов Azure в 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.
Хранилище BLOB-объектов Azure в IoT Edge предоставляет решение для хранения блочных BLOB-объектов и добавочных BLOB-объектов на пограничных устройствах. Модуль хранилища BLOB-объектов на устройстве IoT Edge функционирует как служба BLOB-объектов Azure, но BLOB-объекты хранятся локально на вашем устройстве IoT Edge. Вы можете получить доступ к BLOB-объектам с помощью тех же методов SDK для службы хранилища Azure или вызовов API BLOB-объектов, к которым вы уже привыкли. В этой статье объясняются основные понятия, связанные с использованием Хранилища BLOB-объектов Azure в контейнере IoT Edge, где выполняется служба BLOB-объектов на устройстве IoT Edge.
Этот модуль полезен в следующих ситуациях.
- Данные должны храниться локально, пока они не будут обработаны или переданы в облако. Это могут быть видеозаписи, изображения, финансовые данные, данные больницы или любые другие неструктурированные данные.
- Устройства располагаются в месте с ограниченными возможностями подключения.
- Требуется эффективно обрабатывать данные локально для получения доступа к ним с низкой задержкой, чтобы обеспечить максимально быстрое реагирование на аварийные ситуации.
- Требуется снизить затраты на пропускную способность и избежать передачи терабайтов данных в облако. Вы можете обрабатывать данные локально и передавать в облако только обработанные данные.
Этот модуль поставляется с функциями deviceToCloudUpload и deviceAutoDelete.
Функция deviceToCloudUpload — это настраиваемая функция. Она автоматически передает данные из локального хранилища BLOB-объектов в Azure, используя периодическое подключение к Интернету. Оно предоставляет следующие возможности.
- Включение или отключение функции deviceToCloudUpload.
- Выбор порядка, в котором данные копируются в Azure, например NewestFirst или OldestFirst.
- Указание учетной записи хранения Azure, в которую будут передаваться данные.
- Указание контейнеров, которые необходимо передать в Azure. Этот модуль позволяет указать имена исходного и целевого контейнеров.
- Включение немедленного удаления BLOB-объектов после передачи в облачное хранилище
- Выполнение полной передачи BLOB-объекта (с помощью операции
Put Blob
) и передача на уровне блоков (с помощью операцийPut Block
,Put Block List
иAppend Block
).
Этот модуль использует передачу на уровне блоков, если BLOB-объект состоит из блоков. Ниже приведены некоторые распространенные сценарии.
- Приложение обновляет некоторые блоки ранее отправленного блочного большого двоичного объекта или добавляет новые блоки к добавлению большого двоичного объекта. Этот модуль отправляет только обновленные блоки, а не весь большой двоичный объект.
- Модуль передает BLOB-объект, и подключение к Интернету прекращается. При повторном подключении он передает только оставшиеся блоки, а не весь BLOB-объект.
Если во время отправки большого двоичного объекта происходит непредвиденное завершение процесса (например, сбой питания), все блоки из-за отправки отправляются снова после возвращения модуля в режим "в сети".
Функция deviceAutoDelete поддерживает настройку. Она автоматически удаляет BLOB-объекты из локального хранилища по истечении заданного времени (в минутах). Оно предоставляет следующие возможности.
- Включение или отключение функции deviceAutoDelete.
- Укажите время в минутах (deleteAfterMinutes), после которого большие двоичные объекты автоматически удаляются.
- Включение хранения BLOB-объекта при его передаче, если срок действия deleteAfterMinutes истек.
Необходимые компоненты
Устройство Azure IoT Edge.
В качестве устройства IoT Edge можно использовать компьютер, на котором ведется разработка, или виртуальную машину. Для этого выполните действия, описанные в кратком руководстве для устройств Linux или Windows.
Список поддерживаемых операционных систем и архитектур см. в разделе Операционные системы. Хранилище BLOB-объектов Azure поддерживает следующие архитектуры для модуля IoT Edge:
- Windows AMD64;
- Linux AMD64;
- Linux ARM32;
- Linux ARM64
Облачные ресурсы.
Центр Интернета вещей цен. категории "Стандартный" в Azure.
Свойства deviceToCloudUpload и deviceAutoDelete
Используйте требуемые свойства модуля, чтобы задать deviceToCloudUploadProperties и deviceAutoDeleteProperties. Требуемые свойства можно задать во время развертывания или изменить позже, изменив двойник модуля, что избавляет от необходимости повторного развертывания. Рекомендуется проверить в двойнике модуля разделы reported configuration
и configurationValidation
, чтобы убедиться, что значения правильно распространены.
deviceToCloudUploadProperties
Имя этого параметра — deviceToCloudUploadProperties
. Если вы используете симулятор IoT Edge, задайте значения соответствующим переменным среды для этих свойств, которые можно найти в разделе объяснения.
Свойство | Возможные значения | Описание |
---|---|---|
uploadOn | true, false | По умолчанию задано значение false . Если вы хотите включить функцию, задайте для этого поля значение true . Переменная среды: deviceToCloudUploadProperties__uploadOn={false,true} |
uploadOrder | NewestFirst, OldestFirst | Позволяет выбрать порядок, в котором данные копируются в Azure. По умолчанию задано значение OldestFirst . Порядок определяется временем последнего изменения большого двоичного объекта. Переменная среды: deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst} |
cloudStorageConnectionString | "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>" — это строка подключения, позволяющая указать учетную запись хранения, в которую будут передаваться данные. Укажите Azure Storage Account Name , Azure Storage Account Key , End point suffix . Добавьте соответствующую конечную точкуSuffix в Azure, где передаются данные, она зависит от глобальной платформы Azure, Azure для государственных организаций и Microsoft Azure Stack. Здесь можно указать строку подключения SAS к службе хранилища Azure. Но это свойство необходимо обновлять по истечении его срока действия. Разрешения SAS могут включать в себя создание прав доступа к контейнерам, а также создание, запись и добавление прав доступа к BLOB-объектам. Переменная среды: deviceToCloudUploadProperties__cloudStorageConnectionString=<connection string> |
|
storageContainersForUpload | "<source container name1>": {"target": "<target container name>"} ,"<source container name1>": {"target": "%h-%d-%m-%c"} , "<source container name1>": {"target": "%d-%c"} |
Позволяет указать имена контейнеров, которые нужно передать в Azure. Этот модуль позволяет указать имена исходного и целевого контейнеров. Если имя целевого контейнера не указано, он автоматически назначает имя контейнера, например <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName> . Вы можете создать строки шаблона для имени целевого контейнера. Ознакомьтесь с возможными значениями в столбце. * %h –> имя Центра Интернета вещей (от 3 до 50 символов). * %d –> ИД устройства IoT Edge (от 1 до 129 символов). * %m –> имя модуля (от 1 до 64 символов). * %c –> имя исходного контейнера (от 3 до 63 символов). Максимальный размер имени контейнера составляет 63 символа. Имя автоматически назначается целевому имени контейнера, если размер контейнера превышает 63 символов. В этом случае имя обрезается в каждом разделе (IoTHubName, IotEdgeDeviceID, ModuleName, SourceContainerName) до 15 символов. Переменная среды: deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName> |
deleteAfterUpload | true, false | По умолчанию задано значение false . Когда задано значение true , данные автоматически удаляются при завершении отправки в облачное хранилище. ПРЕДУПРЕЖДЕНИЕ. Если вы используете большие двоичные объекты, этот параметр удаляет большие двоичные объекты из локального хранилища после успешной отправки, а любые будущие операции добавления блоков к этим BLOB-объектам завершаются ошибкой. Используйте этот параметр с осторожностью. Не включите этот параметр, если приложение нечасто операции добавления или не поддерживает непрерывные операции добавления Переменная среды: deviceToCloudUploadProperties__deleteAfterUpload={false,true} . |
deviceAutoDeleteProperties
Имя этого параметра — deviceAutoDeleteProperties
. Если вы используете симулятор IoT Edge, задайте значения соответствующим переменным среды для этих свойств, которые можно найти в разделе объяснения.
Свойство | Возможные значения | Описание |
---|---|---|
deleteOn | true, false | По умолчанию задано значение false . Если вы хотите включить функцию, задайте для этого поля значение true . Переменная среды: deviceAutoDeleteProperties__deleteOn={false,true} |
deleteAfterMinutes | <minutes> |
Укажите период в минутах. Модуль автоматически удаляет большие двоичные объекты из локального хранилища после истечения срока действия этого значения. Допустимые максимальные минуты : 35791. Переменная среды: deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes> |
retainWhileUploading | true, false | По умолчанию он установлен true и сохраняет большой двоичный объект во время отправки в облачное хранилище при deleteAfterMinutes истечении срока действия. Его можно задать false и удалить данные сразу после deleteAfterMinutes истечения срока действия. Примечание. Чтобы это свойство работало, для свойства uploadOn нужно задать значение true. ПРЕДУПРЕЖДЕНИЕ. Если вы используете большие двоичные объекты для добавления, этот параметр удаляет большие двоичные объекты из локального хранилища после истечения срока действия значения, а любые будущие операции добавления блоков к этим BLOB-объектам завершаются сбоем. Убедитесь, что срок действия достаточно велик для ожидаемой частоты операций добавления, выполняемых приложением. Переменная среды: deviceAutoDeleteProperties__retainWhileUploading={false,true} |
Использование общей папки SMB в качестве локального хранилища
Вы можете указать общую папку SMB в качестве пути к локальному хранилищу при развертывании контейнера Windows для этого модуля на узле Windows.
Убедитесь, что общая папка SMB и устройство IoT находятся в доменах со взаимным доверием.
Вы можете выполнить команду PowerShell New-SmbGlobalMapping
, чтобы локально подключить общую папку SMB на устройстве IoT под управлением Windows.
Действия по настройке:
$creds = Get-Credential
New-SmbGlobalMapping -RemotePath <remote SMB path> -Credential $creds -LocalPath <Any available drive letter>
Например:
$creds = Get-Credential
New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:
Эта команда использует учетные данные для проверки подлинности с помощью удаленного сервера SMB. Затем сопоставите путь удаленной общей папки с буквой диска G (может быть любой другой доступной буквой диска). Устройство Интернета вещей теперь имеет том данных, сопоставленный с путем на диске G: .
Убедитесь, что пользователь на устройстве IoT может выполнять чтение и запись в удаленной общей папке SMB.
Для развертывания значением <storage mount>
может быть G:/ContainerData:C:/BlobRoot.
Предоставление доступа к каталогу пользователю контейнера в Linux
Если вы используете подключение томов для хранилища в параметрах создания контейнеров Linux, вам не нужно выполнять дополнительные действия, но если вы используете подключение привязки, эти действия необходимы для правильного запуска службы.
Следуя принципу минимальных привилегий, предписывающему ограничить права доступа пользователей минимальным набором разрешений, необходимым для выполнения их работы, этот модуль включает в себя пользователя (имя: absie, идентификатор: 11000) и группу пользователей (имя: absie, идентификатор: 11000). Если контейнер запущен как корневой (пользователь по умолчанию является корневым), наша служба запускается как пользователь absie с низким уровнем привилегий.
Это поведение делает настройку разрешений на пути узла привязывается к правильной работе службы, в противном случае служба завершает работу с ошибками, отказано в доступе. Путь, используемый в привязке каталогов, должен быть доступен пользователю контейнера (например, absie 11000). Вы можете предоставить пользователю контейнера доступ к каталогу, выполнив следующие команды на узле:
sudo chown -R 11000:11000 <blob-dir>
sudo chmod -R 700 <blob-dir>
Например:
sudo chown -R 11000:11000 /srv/containerdata
sudo chmod -R 700 /srv/containerdata
Если необходимо запустить службу от имени пользователя, отличного от absie, можно указать настраиваемый идентификатор пользователя в манифесте развертывания, в разделе createOptions в свойстве User. В таком случае используйте идентификатор 0
корневой группы по умолчанию.
"createOptions": {
"User": "<custom user ID>:0"
}
Теперь предоставьте пользователю контейнера доступ к каталогу.
sudo chown -R <user ID>:<group ID> <blob-dir>
sudo chmod -R 700 <blob-dir>
Настройка файлов журнала
Уровень выходного журнала по умолчанию — Info. Чтобы изменить уровень выходного журнала, задайте LogLevel
переменную среды для этого модуля в манифесте развертывания. LogLevel
принимает следующие значения:
- Критически важно
- Ошибка
- Предупреждение
- Сведения
- Отладка
Дополнительные сведения о настройке файлов журнала для модуля доступны в этих рекомендациях для рабочей среды.
Подключение к модулю хранилища BLOB-объектов
Вы можете использовать имя учетной записи и ключ учетной записи, настроенные для вашего модуля, для доступа к хранилищу BLOB-объектов на устройстве IoT Edge.
Укажите устройство IoT Edge в качестве конечной точки большого двоичного объекта для любых запросов к хранилищу. Вы можете создать строку подключения для явной конечной точки хранилища с помощью сведений об устройстве IoT Edge и имени учетной записи.
- Для модулей, которые развернуты на том же устройстве, на котором выполняется Хранилище BLOB-объектов Azure в модуле IoT Edge, конечная точка BLOB-объекта будет следующей:
http://<module name>:11002/<account name>
. - Для модулей или приложений, выполняющихся на другом устройстве, необходимо выбрать правильную конечную точку для своей сети. В зависимости от конфигурации сети, выберите формат конечной точки таким образом, чтобы трафик из внешнего модуля или приложения мог быть передан на устройство, на котором работает Хранилище BLOB-объектов Azure в модуле IoT Edge. Конечная точка большого двоичного объекта для этого сценария является одной из следующих:
http://<device IP >:11002/<account name>
http://<IoT Edge device hostname>:11002/<account name>
http://<fully qualified domain name>:11002/<account name>
Внимание
Azure IoT Edge учитывает регистр при вызове модулей, а имя пакета SDK для службы хранилища по умолчанию также преобразовывается в нижний регистр. Изменение имени на нижний регистр помогает убедиться, что подключения к Хранилище BLOB-объектов Azure в модуле IoT Edge не прерваны.
Краткие руководства с примерами использования Хранилища BLOB-объектов Azure
Документация по Хранилищу BLOB-объектов Azure содержит краткие руководства с примерами кода на нескольких языках. Вы можете запустить эти примеры, чтобы протестировать Хранилище BLOB-объектов Azure в IoT Edge, изменив конечную точку BLOB-объекта для подключения к своему локальному модулю хранилища BLOB-объектов.
В следующих кратких руководствах с примерами используются языки, которые также поддерживаются в IoT Edge, поэтому их можно развернуть как модули IoT Edge наряду с модулями хранилища BLOB-объектов.
- .NET
- Хранилище BLOB-объектов Azure модуля IoT Edge версии 1.4.0 и более ранних версий совместимы с пакетом SDK для WindowsAzure.Storage 9.3.3 и версии 1.4.1 также поддерживает пакет SDK azure.Storage.Blobs 12.8.0.
- Python
- В версиях до версии 2.1 пакета SDK для Python возникла известная проблема, из-за которой модуль не возвращает время создания BLOB-объектов. Из-за этой проблемы некоторые методы, такие как список больших двоичных объектов, не работают. В качестве обходного решения явно задайте в клиенте BLOB-объектов версию API 2017-04-17. Пример:
block_blob_service._X_MS_VERSION = '2017-04-17'
- Пример для добавочного BLOB-объекта
- В версиях до версии 2.1 пакета SDK для Python возникла известная проблема, из-за которой модуль не возвращает время создания BLOB-объектов. Из-за этой проблемы некоторые методы, такие как список больших двоичных объектов, не работают. В качестве обходного решения явно задайте в клиенте BLOB-объектов версию API 2017-04-17. Пример:
- Node.js
- JS/HTML
- Ruby
- Go
- PHP
Подключение к локальному хранилищу с помощью Обозревателя службы хранилища Azure
Можно подключиться к локальной учетной записи хранения с помощью Обозревателя службы хранилища Azure.
Загрузка и установка обозревателя службы хранилища Azure
Последняя версия служба хранилища Azure Explorer использует более новую версию API хранилища, не поддерживаемую модулем хранилища BLOB-объектов. Запустите Azure Storage Explorer. Выберите меню "Изменить". Убедитесь, что выбраны целевые API Azure Stack Hub. Если это не так, выберите "Целевой объект Azure Stack Hub". Перезапустите обозреватель служба хранилища Azure, чтобы изменения вступили в силу. Эта конфигурация необходима для совместимости с средой IoT Edge.
Подключение к службе хранилища Azure с помощью строки подключения
Укажите строку соединения:
DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;
.Выполните действия по подключению.
Создание контейнера в локальной учетной записи хранения
Начните передачу файлов в виде блочных BLOB-объектов или добавочных BLOB-объектов.
Примечание.
Этот модуль не поддерживает страничные BLOB-объекты.
Вы также можете подключить свои учетные записи хранения Azure в Обозревателе службы хранилища. Эта конфигурация обеспечит единое представление для локальной учетной записи хранения и учетной записи хранения Azure.
Поддерживаемые операции в хранилище
Модули Службы хранилища BLOB-объектов в IoT Edge используют пакеты SDK для службы хранилища Azure и согласованы с версией 2017-04-17 API службы хранилища Azure для конечных точек блочных BLOB-объектов.
Так как Хранилище BLOB-объектов Azure в IoT Edge поддерживает не все операции Хранилища BLOB-объектов Azure, в этом разделе приведено состояние каждой из них.
Учетная запись
Поддерживается:
- Перечисление контейнеров
Unsupported.
- Получение и задание свойств службы BLOB-объектов
- Предварительный запрос к BLOB-объектам
- Получение статистики службы BLOB-объектов
- Получение данных об учетной записи
Контейнеры
Поддерживается:
- Создание и удаление контейнера
- Получение свойств и метаданных контейнера
- Список больших двоичных объектов
- Получение и задание списка управления доступом для контейнера
- Определение метаданных контейнера
Unsupported.
- Контейнер аренды
BLOB-объекты
Поддерживается:
- Помещение, получение и удаление BLOB-объекта
- Получение и задание свойств BLOB-объекта
- Получение и задание метаданных BLOB-объекта
Unsupported.
- Аренда BLOB-объекта
- Создание моментального снимка BLOB-объекта
- Копирование и прерывание копирования BLOB-объекта
- Отмена удаления BLOB-объекта
- Установка уровня BLOB-объекта
Блочные BLOB-объекты
Поддерживается:
- Вставка блока
- Размещение и получение списка блокировок
Unsupported.
- Вставка блока по URL-адресу
Добавочные большие двоичные объекты
Поддерживается:
- Добавление блока.
Unsupported.
- Добавление блока по URL-адресу.
Интеграция Сетки событий в IoT Edge
Внимание
Интеграция Сетки событий в IoT Edge находится на этапе предварительной версии.
Теперь это Хранилище BLOB-объектов Azure в модуле IoT Edge обеспечивает интеграцию с Сеткой событий в IoT Edge. Подробные сведения об этой интеграции приведены в руководстве по развертыванию модулей, публикации событий и проверке доставки событий.
Заметки о выпуске
Ниже приведены заметки о выпуске для этого модуля в Docker Hub. Дополнительные сведения об устранении и исправлении ошибок доступны в заметках о выпуске для определенной версии.
Следующие шаги
Узнайте, как развернуть Хранилище BLOB-объектов Azure в IoT Edge.
Будьте в курсе последних обновлений и объявлений на странице заметок о выпуске IoT Edge на Хранилище BLOB-объектов Azure.