Как скопировать BLOB-объект из хранилища Azure на виртуальную машину Linux с помощью Python? - PullRequest
0 голосов
/ 27 января 2019

Я новичок в облачных службах Azure, так как не понимаю, как скопировать мой BLOB-объект из учетной записи хранения Azure в виртуальную машину Linux (vm) с помощью python. В моем приложении я сохраняю загруженный файл в хранилище Azure, и я также запускаю функцию Azure всякий раз, когда загружается новый файл, теперь мне нужно скопировать этот файл на виртуальную машину Azure из функции Azure. Любая помощь будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Звучит так, как будто вы хотите использовать функцию Azure с Trigger Storage Blob для копирования больших двоичных объектов из хранилища Azure в виртуальную машину Linux с использованием Python.

Поэтому реальным решением является использование некоторых пакетов Python scp или ssh2-python с пакетом Azure Storage Python SDK вместе с функцией Azure для реализации функции, которая позволяет загружать большие двоичные объекты и передавать их на виртуальную машину Linux через эти пакеты Python, например команду linux scp.

Как я знаю, в Linux существует адаптер виртуальной файловой системы для хранилища BLOB-объектов Azure azure-storage-fuse, который может монтировать контейнер BLOB-объектов с blobfuse в локальную файловую систему Linux в качестве каталога.По моему опыту, другой обходной путь - это смонтировать указанный контейнер BLOB-объектов, который вы загрузили файлы на виртуальную машину Linux, и затем вы можете получить прямой доступ к этим файлам, как на локальном компьютере.Функция Azure с Blob Trigger просто должна уведомить о событии нового загружаемого файла в соответствующее приложение на вашей виртуальной машине Linux.

0 голосов
/ 29 января 2019

Ниже приведен фрагмент кода специально для функций Python Azure. Он считывает файл из хранилища BLOB-объектов в память и затем передает его в удаленное местоположение с использованием SSH (в частности, SFTP через SSH). Он использует библиотеку под названием paramiko для SSH.

import logging
import paramiko

import azure.functions as func


def main(myblob: func.InputStream):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname='YOUR_HOST_NAME', username='USERNAME_FROM_APP_SETTINGS', password='PASSWORD_FROM_APP_SETTINGS')

    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
    with open('LOCAL_FILE_LOCATION', 'wb') as f: 
        f.write(myblob.read()) 

    ftp_client=ssh_client.open_sftp()
    ftp_client.put('LOCAL_FILE_LOCATION','REMOTE_FILE_LOCATION') # same file location written to above
    ftp_client.close()
0 голосов
/ 27 января 2019

Для этого вы можете использовать Azure Storage Python SDK .Вы можете использовать этот файл примеров в качестве базовой и официальной документации:

https://github.com/Azure/azure-storage-python/blob/master/samples/blob/block_blob_usage.py#L329
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python

full_path_to_file2 = os.path.join(local_path, string.replace(local_file_name ,'.txt', '_DOWNLOADED.txt'))
print("\nDownloading blob to " + full_path_to_file2)
block_blob_service.get_blob_to_path(container_name, local_file_name, full_path_to_file2)
...