Содержание
Подготовка
Вводная часть по Azure Blob — в посте Azure: Blob storage.
Логинимся:
$ azure login -u [email protected] -p pass info: Executing command login /info: Added subscription Pay-As-You-Go info: Setting subscription "Pay-As-You-Go" as default + info: login command OK
Выбираем подписку:
$ azure account set 0a4f2b9c-b34a-4521-ae89-40b17ef8c3ab info: Executing command account set info: Setting subscription to "Pay-As-You-Go" with id "0a4f2b9c-b34a-4521-ae89-40b17ef8c3ab". info: Changes saved info: account set command OK
Выбираем группу, в которую будем добавлять storage-аккаунт:
$ azure group list info: Executing command group list + Listing resource groups data: Name Location Provisioning State Tags: data: --------- ---------- ------------------ ----- data: DNS westeurope Succeeded null data: europe-jm westeurope Succeeded null
Создаем аккаунт:
$ azure storage account create -l westeurope --type RAGRS -g europe-jm jmblob info: Executing command storage account create + Creating storage account info: storage account create command OK
Проверяем:
$ azure storage account list info: Executing command storage account list + Getting storage accounts data: Name Type Location Resource Group data: ------ -------------- ---------- -------------- data: jmblob Standard_RAGRS westeurope europe-jm info: storage account list command OK
Получаем ключи авторизации:
$ azure storage account keys list jmblob -g europe-jm info: Executing command storage account keys list + Getting storage account keys data: Primary: 38N***dEA== data: Secondary: RVE***QTQ== info: storage account keys list command OK
Python SDK и blob-ы
Устанавливаем SDK:
$ sudo pip install azure
Создаем подключение:
>>> from azure.storage.blob import BlobService >>> blob = BlobService(account_name='jmblob', account_key='38N***dEA==')
Создаем контейнер:
>>> blob.create_container('jmtest') True
Проверяем:
$ azure storage container list info: Executing command storage container list + Getting storage containers data: Name Public-Access Last-Modified data: ------ ------------- ----------------------------- data: jmtest Off Thu, 31 Mar 2016 13:39:37 GMT info: storage container list command OK
По умолчанию — все контейнеры создаются без общего доступа к ним.
Что бы создать контейнер, доступный другим — добавьте public_access
при его создании:
>>> blob.create_container('jmtest2', x_ms_blob_public_access='container') True
Проверяем:
$ azure storage container list info: Executing command storage container list + Getting storage containers data: Name Public-Access Last-Modified data: ------- ------------- ----------------------------- data: jmtest Off Thu, 31 Mar 2016 13:39:37 GMT data: jmtest2 Container Thu, 31 Mar 2016 13:47:43 GMT
Что бы открыть общий доступ к уже созданному контейнеру — используйте set_container_acl
:
>>> blob.set_container_acl('jmtest2', x_ms_blob_public_access='blob')
$ azure storage container list info: Executing command storage container list + Getting storage containers data: Name Public-Access Last-Modified data: ------- ------------- ----------------------------- data: jmtest Off Thu, 31 Mar 2016 13:39:37 GMT data: jmtest2 Blob Thu, 31 Mar 2016 13:50:08 GMT
Загрузка данных в контейнер
Для создания объекта и загрузки данных можно использовать методы:
put_block_blob_from_path
— загружает заданный в пути, но не открытый для чтения файл в хранилище;put_block_blob_from_file
— загружает заданный и открытый для чтения в пути файл в хранилище;put_block_blob_from_text
— для загрузки Unicode-строк;put_block_blob_from_bytes
— для загрузки двоичных данных.
Например — загрузить файл /home/setevoy/Downloads/README.md
в контейнер jmtest
можно так:
>>> blob.put_block_blob_from_path('jmtest', 'readme.md', '/home/setevoy/Downloads/README.md', max_connections=5)
max_connections
позволяет выполнять загрузку или выгрузку данных в несколько потоков.
Проверяем:
$ azure storage blob list jmtest info: Executing command storage blob list + Getting blobs in container jmtest data: Name BlobType Length Content-Type Last-Modified SnapshotTime data: --------- --------- ------ -------------------------------------- ----------------------------- ------------ data: readme.md BlockBlob 8471 application/octet-stream Charset=UTF-8 Thu, 31 Mar 2016 14:02:11 GMT
Что бы проверить доступ по URL — окрываем доступ:
>>> blob.set_container_acl('jmtest', x_ms_blob_public_access='blob')
И проверяем:
$ curl -s http://jmblob.blob.core.windows.net/jmtest/readme.md | head # Microsoft Azure Xplat-CLI for Windows, Mac and Linux [](http://badge.fury.io/js/azure-cli) [](https://travis-ci.org/Azure/azure-xplat-cli) This project provides a cross-platform command line interface for developers and IT administrators to develop, deploy and manage Microsoft Azure applications. ## Features * Accounts Management * Azure Service Management
А что бы загрузить файл из хранилища на локальную машину — используем get_blob_to_path
:
>>> blob.get_blob_to_path('jmtest', 'readme.md', '/tmp/README.md', max_connections=5)
Проверяем:
$ head /tmp/README.md # Microsoft Azure Xplat-CLI for Windows, Mac and Linux [](http://badge.fury.io/js/azure-cli) [](https://travis-ci.org/Azure/azure-xplat-cli) This project provides a cross-platform command line interface for developers and IT administrators to develop, deploy and manage Microsoft Azure applications. ## Features * Accounts Management * Azure Service Management
Получить список всех данных в контейнере можно так:
>>> objs = blob.list_blobs('jmtest')
Объект objs содержит объектыиз указанного контейнера, но не сами данные — а толкьо метаданные и свойства.
Посмотреть — что именно содержится в каждом объекте можно так:
>>> for obj in objs: ... pprint (vars(obj)) ... {'metadata': None, 'name': u'readme.md', 'properties': <azure.storage.blob.models.BlobProperties object at 0x7f3e5d1bdc90>, 'snapshot': u'', 'url': u''}
И получить только имя объекта в контейнере:
>>> objs = blob.list_blobs('jmtest') >>> for obj in objs: ... print(obj.name) ... readme.md
Ссылки по теме
How to Use the Blob Storage Service from Python
Stupid Azure Trick #4 – C#, Node.js, and Python
How to use Azure Blob storage from Python
Azure Storage SDK for Python