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

Xan*_*iff 3 azure-storage-blobs google-cloud-storage azure-data-factory

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

我的目标是将这些文件从 Azure Blob 存储传输到 Google 存储。我在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. 根据https://cloud.google.com/storage/transfer/reference/rest/v1/TransferSpec#AwsS3Data使用来自数据工厂的 Amazon S3 出口,然后使用 Google 对从 S3 导入的支持从那里提取它,但这确实似乎浪费带宽(我必须设置一个亚马逊帐户)。

理想情况下,我希望能够编写一个脚本,然后点击开始并不管它。我没有从 Azure 获得最快的下载速度,所以 #1 会不太理想,因为它需要很长时间。

还有其他方法吗?

小智 7

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

谷歌云存储截图

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


小智 5

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

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

首先,在 Google Cloud Platform 中创建一个计算实例。您无需创建计算能力强大的实例,您只需要一台 Debian-10GB 机器,配备 2 核 CPU 和 4 GB 内存。

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

创建计算实例后,只需使用SSHGoogle Console登录到该实例并安装以下软件包。

安装 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>
Run Code Online (Sandbox Code Playgroud)

安装 Azcopy

wget https://aka.ms/downloadazcopy-v10-linux
tar -xvf downloadazcopy-v10-linux
sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/
Run Code Online (Sandbox Code Playgroud)

安装这些软件包后,下一步是创建共享签名访问密钥。如果您有 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
Run Code Online (Sandbox Code Playgroud)

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

azcopy cp --recursive=true "<-source url->" "<-destination url->"
Run Code Online (Sandbox Code Playgroud)

如果您的工作失败,您可以使用以下方法列出您的工作:

azcopy jobs list
Run Code Online (Sandbox Code Playgroud)

并恢复失败的工作:

azcopy jobs resume jobid <-source sas->
Run Code Online (Sandbox Code Playgroud)

您可以将所有步骤整理到一个 bash 中,让它一直运行直到您的数据传输完成。

就这样!我希望它能帮助别人