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

时间:2016-12-15 05:54:15

标签: google-cloud-storage azure-storage-blobs azure-data-factory

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

我的目标是将这些文件从Azure Blob Storage传输到Google Storage。我在https://cloud.google.com/storage/transfer/reference/rest/v1/TransferSpec#HttpData看到Google的Storagetransfer服务的文档表明,如果我提供带有URL,长度字节和MD5哈希值的文件列表,我可以轻松启动此类传输每个。

好吧,我可以轻松地从Azure存储中提取前两个,但第三个似乎不会自动填充Azure存储,也无法找到任何方法来实现它。

不幸的是,我的其他选择看起来有限。到目前为止的可能性:

  1. 将文件下载到本地计算机,确定哈希并更新Blob MD5值
  2. 查看我是否可以在可以计算哈希值的相同区域中编写Azure Functions应用程序,并将其写入容器中每个的blob
  3. 使用来自Data Factory的Amazon S3出口,然后使用Google的支持从S3进行导入,从https://cloud.google.com/storage/transfer/reference/rest/v1/TransferSpec#AwsS3Data开始将其从那里拉出来,但这实际上似乎浪费了带宽(我和#39 ; d必须设置亚马逊帐户。)
  4. 理想情况下,我希望能够编写一个脚本,然后单击它。我没有从Azure获得最快的下载速度,因此#1会因为需要花费很长时间而不太可能。

    有其他方法吗?

4 个答案:

答案 0 :(得分:4)

我们已将大约3TB文件从Azure迁移到Google存储。我们已经在Google Computing Engine中启动了一个廉价的Linux服务器,其中包含几个TB本地磁盘。通过blobxfer将Azure文件转移到本地磁盘,然后通过gsutil rsync将文件从本地磁盘复制到Google存储空间(gsutil cp也可以)。

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

2020年5月更新:Google Cloud Data Transfer现在支持Azure Blob存储作为源。这是一种无代码解决方案。

screenshot from Google Cloud Storage

我们用它来将大约1TB的文件从Azure Blob存储传输到Google Cloud Storage。我们每天都有刷新,因此Azure Blob中的所有新文件都会自动复制到Cloud Storage。

答案 3 :(得分:1)

我知道现在为您回答这个问题有点晚了,但是它可能会帮助其他尝试从 Azure Blob存储迁移到的数据的人Google云存储

作为存储服务的两个平台Google Cloud Storage和Azure Blob Storage没有命令行界面,我们可以在其中轻松运行传输命令。为此,我们需要一个中间计算实例,该实例实际上将能够运行所需的命令。我们将按照以下步骤进行以实现云到云的传输。

首先,请在Google Cloud Platform中创建一个计算实例。您无需创建具有计算功能的实例,只需要一台具有2核CPU和4 GB内存的Debian-10GB机器即可。

在早期,您将数据下载到GCP中的计算实例,然后再将其移动到Google Cloud Storage。但是现在通过引入gcsfuse,我们可以简单地将Google存储帐户挂载为文件系统。

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

Install Google Cloud Storage Fuse

export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update -y
sudo apt-get install gcsfuse -y

# Create local folder 
mkdir local_folder_name

# Mount the Storage Account as a bucket
gcsfuse <bucket_name> <local_folder_path>

Install Azcopy

wget https://aka.ms/downloadazcopy-v10-linux
tar -xvf downloadazcopy-v10-linux
sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/

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

现在,您必须创建一个指向Blob对象的URL。为此,只需右键单击任何Blob对象,选择Properties,然后从对话框中复制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

现在,使用以下命令开始将文件从Azure复制到GCP存储。

azcopy cp --recursive=true "<-source url->" "<-destination url->"

万一工作失败,您可以使用以下方式列出您的工作:

azcopy jobs list

并恢复失败的作业:

azcopy jobs resume jobid <-source sas->

您可以将所有步骤整理为一个bash,使其保持运行状态,直到完成数据传输为止。

仅此而已!希望对别人有帮助