Google cloud storage 以编程方式将文件从Azure Blob存储传输到Google云存储

Google cloud storage 以编程方式将文件从Azure Blob存储传输到Google云存储,google-cloud-storage,azure-storage-blobs,azure-data-factory,Google Cloud Storage,Azure Storage Blobs,Azure Data Factory,我有许多文件通过Azure数据工厂传输到Azure Blob存储中。不幸的是,这个工具似乎没有为任何值设置Content-MD5值,所以当我从Blob存储API中提取该值时,它是空的 我的目标是将这些文件从Azure Blob存储转移到Google存储。我在上看到的Google的Storagetransfer服务文档表明,如果我提供一个文件列表,其中包含URL、字节长度和每个文件的MD5哈希,我就可以轻松启动这样的传输 嗯,我可以很容易地从Azure存储中提取前两个,但第三个似乎不会自动被Azu

我有许多文件通过Azure数据工厂传输到Azure Blob存储中。不幸的是,这个工具似乎没有为任何值设置Content-MD5值,所以当我从Blob存储API中提取该值时,它是空的

我的目标是将这些文件从Azure Blob存储转移到Google存储。我在上看到的Google的Storagetransfer服务文档表明,如果我提供一个文件列表,其中包含URL、字节长度和每个文件的MD5哈希,我就可以轻松启动这样的传输

嗯,我可以很容易地从Azure存储中提取前两个,但第三个似乎不会自动被Azure存储填充,我也找不到任何方法让它这样做

不幸的是,我的其他选择似乎有限。在目前的可能性方面:

  • 将文件下载到本地计算机,确定哈希值并更新Blob MD5值
  • 查看是否无法在同一区域中编写Azure Functions应用程序,该应用程序可以计算哈希值并将其写入容器中每个对象的blob
  • 从数据工厂使用AmazonS3出口,然后使用Google对从S3导入的支持将其从那里拉出来,但是这看起来真的像是在浪费带宽(而且我必须建立一个Amazon帐户)
  • 理想情况下,我希望能够编写一个脚本,点击go,然后不去管它。我没有Azure上最快的下载速度,因此#1的下载速度不太理想,因为这需要很长时间


    还有其他方法吗?

    您是否考虑过使用用于数据转换的Azure Data Factory支持?在后端,如果您使用ADF自定义活动,您可以使用Azure Batch下载、更新文件并将其上载到Google存储。

    我们已将大约3TB的文件从Azure迁移到Google存储。我们已经在Google计算引擎中启动了一个廉价的Linux服务器,它只有几TB的本地磁盘。通过将Azure文件传输到本地磁盘,然后通过
    gsutil rsync
    将文件从本地磁盘复制到Google存储(
    gsutil cp

    您可以使用其他工具从Azure传输文件,甚至可以在GCE中启动Windows服务器,并在Windows上使用
    gsutils


    这花了几天时间,但简单明了。

    我知道为您回答这个问题有点晚,但它可能会帮助所有试图将数据从Azure Blob存储迁移到谷歌云存储的人

    谷歌云存储和Azure Blob存储,这两个平台都是存储服务,没有命令行界面,我们可以在那里简单地运行传输命令。为此,我们需要一个中间计算实例,它实际上能够运行所需的命令。为了实现云到云的传输,我们将遵循以下步骤

    首先,在谷歌云平台上创建一个计算实例。您不需要创建计算能力强大的实例,只需要一台具有2核CPU和4GB内存的Debian-10GB机器

    在早期,您会将数据下载到GCP中的计算实例,然后将其进一步移动到Google云存储。但是现在随着
    gcsfuse
    的引入,我们可以简单地将Google存储帐户装载为文件系统

    创建计算实例后,只需从Google控制台使用
    SSH
    登录到该实例,并安装以下软件包

    一旦安装了这些包,下一步就是创建共享签名访问密钥。如果您有Azure Blob存储资源管理器,只需右键单击目录树中的存储帐户名,然后选择
    生成共享访问签名

    现在,您必须创建指向blob对象的URL。要实现这一点,只需右键单击任何blob对象,选择
    Properties
    ,然后从对话框复制URL

    您的最终Url应该如下所示

    <https://URL_to_file> + <SAS Token>
    
    https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
    
    以及恢复失败的作业:

    azcopy jobs resume jobid <-source sas->
    
    azcopy作业恢复作业ID
    
    您可以将所有步骤整理成一个bash,让它一直运行,直到数据传输完成


    就这些!我希望它能帮助其他人

    2020年5月更新:谷歌云数据传输现在支持Azure Blob存储作为源。这是一个无代码的解决方案


    我们使用它将约1TB的文件从Azure Blob存储传输到Google云存储。我们还每天进行刷新,以便Azure Blob中的任何新文件都会自动复制到云存储。

    有人能告诉我什么是“”?我曾尝试使用Google Cloud bucket中的链接URL,我想将文件复制到其中,但它不起作用。事实上,我不明白为什么我们需要在计算实例中创建一个新目录!!我们是否先将文件从Azure Blob复制到此实例,然后再复制到Google BukSet?当我使用最后一个命令,但不是目标url,而是在本地目录中复制到计算实例时,它只在文件中起作用,但当我传递最后一个目标bucket url时,它不起作用。@Twin Penguins您可能错过了将google cloud storage bucket作为文件系统装载到该计算实例的步骤。关于目标URL,它只是使用GCSFUSE挂载的文件夹名称。e、 例如,您在您的计算实例上的
    /home/username
    中创建了一个文件夹
    bucket\u mount
    ,那么目标URL将是-
    /home/username/bucket\u mount
    不,我们根本没有将这些文件复制到计算实例,因为我们将bucket用作文件系统。compute实例只是帮助我们装载存储桶并运行copy命令。其他方法包括使用GCP或Azure提供的付费数据传输服务。这对我也很有效。Azure页面
    <https://URL_to_file> + <SAS Token>
    
    https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
    
    azcopy cp --recursive=true "<-source url->" "<-destination url->"
    
    azcopy jobs list
    
    azcopy jobs resume jobid <-source sas->