我是Azure云服务的新手,因为我不知道如何使用python将我的blob从Azure存储帐户复制到Linux虚拟机(vm)。 在我的应用程序中,我将上传的文件存储到Azure存储中,并且每当新文件上传时,我也触发了Azure函数,现在我需要将该文件从Azure函数复制到Azure VM。 任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用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)
答案 1 :(得分:0)
听起来您想将Azure函数与Blob存储触发器一起使用,以使用Python将blob从Azure存储复制到Linux虚拟机。
因此,可行的解决方案是在Azure Function上将一些Python软件包scp
或ssh2-python
与Azure存储Python SDK一起使用,以实现可以下载blob并通过这些Python软件包传输到Linux VM的功能。像linux命令scp
。
众所周知,在Linux azure-storage-fuse
上有一个用于Azure Blob存储的虚拟文件系统适配器,可以将带有blobfuse
的Blob容器作为目录挂载到Linux本地文件系统。根据我的经验,另一种解决方法是安装指定的Blob容器,然后将文件上传到Linux VM,然后可以像在本地一样直接访问这些文件。带有Blob触发器的Azure Function仅需要将新的上传文件的事件通知到Linux VM上的相关应用程序。
答案 2 :(得分:0)
下面是专门针对Python Azure Functions的代码段。它将文件从Blob存储读取到内存中,然后使用SSH(特别是SSH上的SFTP)将其传输到远程位置。它使用名为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()