Как сохранить файл в облако python

Обновлено: 06.07.2024

Облачные вычисления стали популярными среди широких масс примерно полтора-два года назад, и огромную роль в этом сыграл сервис Amazon EC2. Постепенно активность обсуждений этой технологии только возрастала, появлялись сторонники и противники, считающие что это всего лишь очередное модное веяние и ничего больше; некоторые же стали экспериментировать и применять облачные вычисления для решения свох задач.

Довольно долго у EC2 было не много альтернатив, поэтому мало кто задумывался о проблемах миграции с одного клауд провайдера на другой. Однако, в последний год стало появляться все больше и больше компаний, предоставляющих клауд-сервисы адекватного качества по приемлемой цене.

На данный момент EC2, пожалуй, до сих пор остается лидером, однако появилось еще несколько крупных игроков — думаю, такие имена как Rackspace и GoGrid на слуху у всех, кто хотя бы поверхностно интересуется темой. Помимо них на рынке сейчас активны еще не меньше десятка компаний, предлагающих подобные услуги.

Подобное разнообразие уже заставляет внимательнее относиться к вопросу выбора провайдера и задумываться о возможном плане миграции.

Зачем нужен libcloud?

Неотъемлемой частью клауд сервисов является наличие API, как правило RESTful или REST-like, который позволяет полностью контролировать клауд инфраструктуру. К сожалению, практически каждый провайдер создает свой API, несовместимый с уже существующими, что весьма неудобно, если вы решите перейти с одного сервиса на другой, и создает дополнительные сложности, если приходится поддерживать несколько разных сервисов одновременно.

Когда libcloud зарождался в компании Cloudkick (которую, кстати, совсем недавно купил Rackspace), цель была не только создать инструмент для работы с клаудами из Python, но и сформулировать видение того, каким должен (может) быть обобщенный интерфейс для работы с клаудами, как со стороны API сервисов, как и с клиентской стороны при работе с разными платформами. Например, параллельно с Python версией, развивается Java версия, принцип работы и концепции точно такие же.

Впрочем, не буду углубляться в философские аспекты, а продемонстрирую, что позволяет делать libcloud.

Приступаем к работе

Установка и настройка

Процесс установки вряд-ли покажется кому-нибудь новым:

Терминология и интерфейс

В libcloud используется следующая терминология:

  • Нода — экземпляр одного виртуального сервера. У провайдеров обычно называется просто сервером
  • Размер ноды — физический размер ноды. Для разных провайдеров характеристики отличаются, обычно сюда включается размер оперативной памяти, количество ядер процессора, иногда размер дискового пространства
  • Образ ноды — образ операционной системы, которая используется для загрузки ноды

Над всеми вышеописанными объектами возможна операция list — получить актуальный список объектов. Для нод поддерживается больше операций: их можно создавать (create), удалять (destroy), а так же перегружать (reboot).

Просмотр доступных размеров и образов нод

Начнем с простого примера: подключимся к сервису и получим список всех образов с CentOS, а так же список всех возможных размеров нод:

Для запуска потребуется создать файл «secret.py» и объявить там переменные access_id и secret_key с нужным пользователем и паролем для доступа к API вашего провейдера. Обратите внимание на строку:

Здесь мы говорим, что хотим использовать драйвер для GoGrid. Для того, чтобы получить список всех поддерживаемых провайдеров, в шелле нужно выполнить следующую команду:

Создание и удаление нод

Рассмотрим пример создания и удаления ноды. Для создания нам нужно определиться с основными параметрами ноды, такими как имя, размер и образ. В качестве образа опять же выберем первый образ, содержащий в имени CentOS, и возьмем первый попавшийся размер.

Заключение

Как видим, тут тоже все довольно просто и прозрачно; и двумя коротенькими скриптами удалось покрыть почти весь общий интерфейс. Конечно же, функционал libcloud'а на этом не ограничивается, и я не ставлю перед собой задачу составить подробное руководство по использованию, а лишь заинтересовать тех, кто только начинает работать с клаудами и, в особенности, тех людей, которые используют правайдер-специфичные библиотеки.

У более опытных пользователей облаков наверняка возникнет ощущение, что описанного функционала недостаточно. Да, в большинстве случаев действительно требуется использовать нечто большее, и, понятно, что все провайдер-специфичные вещи невозможно покрыть единым интерфейсом.

На этот случай libcloud поддерживает так называемые 'extra' методы в драйверах провайдеров, которые позволяют, например, создавать пары ssh ключей, создавать свои собственные образы нод и т.д. По моим наблюдениям, драйверы популярных провайдеров довольно хорошо покрывают весь функционал и оперативно обновляются. Информацию о том, что поддерживает каждый из драйверов, можно найти в документации API самого libcloud.

Надеюсь, libcloud упростит жизнь тем, кто работает с облаками, а моя статья поможет быстро сориентироваться в проекте.

В этой статье описано, как использовать возможности передачи файлов Центра Интернета вещей, чтобы передать файл в хранилище BLOB-объектов Azure. В этом руководстве описаны следующие процедуры.

Безопасное предоставление контейнера хранилища для передачи файла.

Использование клиента Python для передачи файла через Центр Интернета вещей.

По завершении работы с этим руководством вы запустите консольное приложение Python:

  • FileUpload.py, которое отправляет файл в хранилище с помощью пакета SDK для устройств для Python.

В Центре Интернета вещей реализована поддержка для пакетов SDK для многих платформ устройств и языков (включая C, Java, Javascript и Python). Эти пакеты работают на основе пакетов SDK для устройств Azure IoT. Инструкции по использованию Python для связывания устройства с кодом из этого руководства, а также по подключению к Центру Интернета вещей Azure см. в разделе Пакет SDK Python для Интернета вещей Azure.

Функция отправки файлов на устройствах, использующих проверку подлинности на основе сертификата X.509, доступна в общедоступной предварительной версии, при этом должен быть включен режим предварительного просмотра. Она обычно доступна на устройствах, использующих проверку подлинности X.509 с помощью отпечатка пальца. Дополнительные сведения о проверке подлинности на основе сертификата X.509 с помощью Центра Интернета вещей см. в разделе Поддерживаемые сертификаты X.509.

Предварительные требования

  • Убедитесь, что в брандмауэре открыт порт 8883. Пример устройства в этой статье использует протокол MQTT, который передает данные через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.

Создание Центра Интернета вещей

В этом разделе описывается создание центра Интернета вещей с помощью портала Azure.

На начальной странице портала Azure нажмите кнопку +Создать ресурс и введите текст Центр Интернета вещей в поле поиска в Marketplace.

В результатах поиска выберите Центр Интернета вещей и щелкните Создать.

Заполните следующие поля на вкладке Основные сведения.

Группа ресурсов. Выберите группу ресурсов или создайте новую. Чтобы создать новую, щелкните Создать и введите нужное имя. Чтобы выбрать существующую группу ресурсов, щелкните ее. Дополнительные сведения о группах ресурсов см. в статье об управлении группами ресурсов в Azure Resource Manager.

Регион. Выберите регион, в котором будет расположен концентратор. Выберите ближайшее к вам расположение. Некоторые функции, такие как потоки устройств Центра Интернета вещей, доступны только в определенных регионах. Для функций с такими ограничениями необходимо выбрать один из поддерживаемых регионов.

Имя Центра Интернета вещей. Введите имя для концентратора. Это имя должно быть глобально уникальным и содержать от 3 до 50 буквенно-цифровых символов. Имя может также содержать знак тире ( '-' ).

Так как центр Интернета вещей будет общедоступен в качестве конечной точки DNS, убедитесь, что в его имени не фигурируют конфиденциальные или персональные сведения.

Создание центра на портале Azure.

По завершении выберите Next: Networking (Далее: сеть), чтобы продолжить создание центра.

Выберите конечные точки, с помощью которых устройства смогут подключаться к Центру Интернета вещей. Можете выбрать параметр по умолчанию Общедоступная конечная точка (все сети) либо выбрать Общедоступная конечная точка (выбранные диапазоны IP-адресов) или Частная конечная точка. Для нашего примера примите параметр по умолчанию.

Выбор конечных точек для подключения.

По завершении выберите Next: Management (Далее: управление), чтобы продолжить создание центра.

Настройка параметров размера и масштаба для нового центра на портале Azure.

Здесь вы можете принять настройки по умолчанию. При необходимости можете изменить любое из следующих полей:

Если вы используете функцию "Быстрое начало" для потоков устройств Центра Интернета вещей, выберите уровень "Бесплатный".

Defender для Интернета вещей. Включите это решение, чтобы обеспечить дополнительный уровень защиты от угроз для ваших устройств и устройств Интернета вещей. Этот параметр недоступен для концентраторов на уровне "Бесплатный". Дополнительные сведения см. в документации по Microsoft Defender для Интернета вещей.

По завершении выберите Next: Теги, чтобы перейти к следующему экрану.

Теги — это пары "имя — значение". Один и тот же тег можно присвоить нескольким ресурсам и группам ресурсов для их классификации и объединения счетов. В этом документе не будут добавляться какие-либо теги. Дополнительные сведения см. в статье Использование тегов для организации ресурсов в Azure.

Назначение тегов для центра с помощью портала Azure.

По завершении выберите Next: Просмотр и создание, чтобы просмотреть выбранные параметры. Отобразится примерно следующий экран только со значениями, которые вы задали при создании центра.

Просмотр сведений при создании центра.

Щелкните Создать, чтобы начать развертывание центра. Развертывание будет выполняться несколько минут, пока будет создаваться центр. Когда развертывание будет завершено, выберите Перейти к ресурсу, чтобы открыть новый центр.

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

В меню навигации Центра Интернета вещей выберите Устройства IoT, а затем щелкните Создать, чтобы добавить устройство в Центр Интернета вещей.

Создание удостоверения устройства на портале

В разделе Создать устройство укажите имя нового устройства, например myDeviceId, и щелкните Сохранить. После этого для вашего Центра Интернета вещей будет создано удостоверение устройства. Не снимайте флажок Автоматически формировать ключи, чтобы первичный и вторичный ключи создавались автоматически.

Добавление нового устройства

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

Создав устройство, откройте его из списка области Устройства IoT. Скопируйте основную строку подключения. Эта строка подключения используется кодом устройства для взаимодействия с центром.

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

Строка подключения к устройству.

В реестре удостоверений в Центре Интернета вещей хранятся только идентификаторы устройств, необходимые для безопасного доступа к Центру Интернета вещей. В этом реестре хранятся идентификаторы и ключи устройств, которые используются в качестве учетных данных безопасности, и флажок включения или выключения, который позволяет вам отключить доступ для отдельного устройства. Если в приложении необходимо хранить другие метаданные для конкретного устройства, следует использовать хранилище конкретного приложения. Дополнительные сведения см. в разделе Руководство разработчика для Центра Интернета вещей.

Связывание учетной записи хранения Azure с Центром Интернета вещей

Для загрузки файлов с устройства у вас должна быть учетная запись хранилища Azure и контейнер хранилища BLOB-объектов Azure, связанный с вашим центром Интернета вещей. После связывания учетной записи хранения и контейнера с центром Интернета вещей, центр Интернета вещей сможет предоставлять элементы универсального кода ресурса подписанного URL-адреса по запросу устройства. Затем устройство может использовать эти элементы для создания универсального кода ресурса подписанного URL-адреса, применяемого для проверки подлинности в службе хранилища Azure и отправки файлов в контейнер больших двоичных объектов.

Чтобы связать учетную запись хранения Azure с центром Интернета вещей, выполните следующее.

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

На панели Загрузка файла выберите Контейнер хранилища Azure. В этой статье рекомендуется размещать учетную запись хранения и центр Интернета вещей в одном регионе.

Если у вас уже есть учетная запись хранения, которую вы хотите использовать, выберите ее в списке.

Чтобы создать новую учетную запись хранения, выберите +Учетная запись хранения. Укажите имя для учетной записи хранения и убедитесь, что для параметра Расположение задан тот же регион, что и для вашего центра Интернета вещей, затем нажмите OK. Новая учетная запись создается в той же группе ресурсов, что и центр Интернета вещей. По завершении развертывания выберите учетную запись хранения в списке.

После выбора учетной записи хранения откроется панель Контейнеры.

На странице Контейнеры выберите созданный контейнер больших двоичных объектов.

Если у вас уже есть контейнер больших двоичных объектов, который вы хотите использовать, выберите его в списке и нажмите кнопку Выбрать.

Вернувшись на панель Загрузка файла, убедитесь, что для уведомлений о файлах установлено значение Вкл. Для других параметров можно оставить значения по умолчанию. Выберите Сохранить и дождитесь завершения настроек, прежде чем переходить к следующему разделу.

Снимок экрана с подтверждением параметров отправки файла на портале.

Более подробные инструкции по созданию учетной записи хранения Azure см. в статье Создание учетной записи хранения. Более подробные инструкции по связыванию учетной записи хранения и контейнера больших двоичных объектов с центром Интернета вещей см. в статье Настройка отправки файлов с помощью портал Azure.

Передача файла из приложения устройства

В этом разделе вы создадите приложение для устройства, чтобы отправлять файлы в Центр Интернета вещей.

В командной строке выполните приведенную ниже команду, чтобы установить пакет azure-iot-device. Этот пакет используется для координации передачи файлов с Центром Интернета вещей.

В командной строке выполните приведенную ниже команду, чтобы установить пакет azure.storage.blob. Этот пакет используется для отправки файла.

В текстовом редакторе создайте в рабочей папке файл FileUpload.py.

Добавьте следующие инструкции import и переменные в начало файла FileUpload.py.

В файле замените [Device Connection String] строкой подключения устройства Центра Интернета вещей. Замените [Full path to local file] путем к созданному тестовому файлу или любому файлу на устройстве, который требуется передать.

Создайте функцию для передачи файла в хранилище BLOB-объектов:

Эта функция анализирует полученную структуру blob_info и создает на ее основе URL-адрес для инициализации объекта azure.storage.blob.BlobClient. Затем она с помощью этого клиента отправляет нужный файл в хранилище BLOB-объектов Azure.

Добавьте следующий код, который отвечает за подключение клиента и отправку файла.

Этот код создает объект IoTHubDeviceClient и с помощью указанных ниже API управляет отправкой файлов в центр Интернета вещей.

get_storage_info_for_blob получает от центра Интернета вещей информацию о ранее созданной и связанной учетной записи хранения. Эти сведения включают имена узла, контейнера и BLOB-объекта, а также маркер SAS. Сведения о хранилище передаются в функцию store_blob, которую мы создали на предыдущем шаге, чтобы BlobClient в этой функции смог выполнить проверку подлинности в хранилище Azure. Кроме того, метод get_storage_info_for_blob возвращает идентификатор correlation_id, который используется далее в методе notify_blob_upload_status. Этот идентификатор корреляции используется для маркировки BLOB-объекта, с которым вы работаете.

notify_blob_upload_status извещает Центр Интернета вещей о состоянии текущей операции с хранилищем BLOB-объектов. В него передается значение correlation_id, полученное методом get_storage_info_for_blob. Оно используется Центром Интернета вещей для извещения о состоянии задачи передачи файлов любых служб, которых может интересовать это состояние.

Сохраните и закройте файл FileUpload.py.

Выполнение приложения

Теперь все готово к запуску приложения.

В командной строке в рабочей папке выполните следующую команду.

На следующем снимке экрана показаны выходные данные приложения FileUpload.

Выходные данные приложения simulated-device

На портале можно просмотреть отправленный файл в контейнере хранилища, который вы настроили.

Отправленный файл

Дальнейшие действия

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

Дополнительные сведения о Хранилище BLOB-объектов доступны в следующих статьях:

Читайте также: