以编程方式将文件从 Azure Blob 存储传输到 Google 云存储
Transfer file from Azure Blob Storage to Google Cloud Storage programmatically
我有一些文件通过 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 存储填充,我也找不到任何方法让它这样做。
不幸的是,我的其他选择看起来很有限。到目前为止的可能性:
- 将文件下载到本地机器,确定散列并更新 Blob MD5 值
- 看看我是否不能在同一区域编写一个 Azure Functions 应用程序,该应用程序可以计算哈希值并将其写入容器中每个对象的 blob
- 根据 https://cloud.google.com/storage/transfer/reference/rest/v1/TransferSpec#AwsS3Data 使用来自数据工厂的 Amazon S3 出口,然后使用 Google 对从 S3 导入的支持从那里提取它,但这看起来确实是在浪费带宽(而且我必须设置一个亚马逊帐户)。
理想情况下,我希望能够编写一个脚本,点击开始,不要管它。我没有从 Azure 获得最快的下载速度,因此 #1 不太理想,因为它需要很长时间。
还有其他方法吗?
您是否考虑过使用用于数据转换的 Azure 数据工厂 custom activity 支持?在后端,如果您使用 ADF 自定义 activity.
,您可以使用 Azure Batch 下载、更新文件并将其上传到 Google 存储中
我们已将大约 3TB 的文件从 Azure 迁移到 Google 存储。我们已经在 Google Computing Engine 中启动了一个具有几 TB 本地磁盘的廉价 Linux 服务器。通过 blobxfer 将 Azure 文件传输到本地磁盘,然后通过 gsutil rsync
将文件从本地磁盘复制到 Google 存储(gsutil cp
也可以)。
您可以使用其他工具从 Azure 传输文件,您甚至可以在 GCE 中启动 Windows 服务器并在 Windows 上使用 gsutils
。
花了几天时间,但是简单明了。
我知道为您回答这个问题有点晚了,但这可能会帮助其他所有人都在尝试从 Azure Blob 存储迁移数据 到 Google 云存储
Google Cloud Storage 和 Azure Blob Storage 这两个平台都是存储服务,没有命令行界面,我们可以直接去 运行 传输命令。为此,我们需要一个中间计算实例,它实际上能够 运行 所需的命令。我们将按照以下步骤来实现云到云的传输。
首先,也是最重要的,在 Google 云平台中创建一个计算实例。您不需要创建一个计算能力强大的实例,您所需要的只是一台具有 2 核 CPU 和 4 GB 内存的 Debian-10GB 机器。
在早期,您会将数据下载到 GCP 中的计算实例,然后将其进一步移动到 Google 云存储。但是现在随着 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>
wget https://aka.ms/downloadazcopy-v10-linux
tar -xvf downloadazcopy-v10-linux
sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/
安装完这些包后,下一步就是创建共享签名访问密钥。如果您有 Azure Blob 存储资源管理器,只需右键单击目录树中的存储帐户名称,然后 Select Generate Shared Access Signature
现在您必须为您的 blob 对象创建一个 URL。为此,只需对任何 blob 对象 right-click select 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
现在,使用以下命令开始将文件从 Azure 复制到 GCP 存储。
azcopy cp --recursive=true "<-source url->" "<-destination url->"
如果万一您的工作失败了,您可以使用以下方式列出您的工作:
azcopy jobs list
并恢复失败的作业:
azcopy jobs resume jobid <-source sas->
您可以将所有步骤合并为一个 bash,将其保留 运行ning 直到数据传输完成。
仅此而已!我希望它能帮助别人
2020 年 5 月更新:Google云数据传输现在支持将 Azure Blob 存储作为源。这是一个无代码解决方案。
我们用它来将 ~ 1TB 的文件从 Azure Blob 存储传输到 Google 云存储。我们还进行了每日刷新,因此 Azure Blob 中的任何新文件都会自动复制到 Cloud Storage。
我有一些文件通过 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 存储填充,我也找不到任何方法让它这样做。
不幸的是,我的其他选择看起来很有限。到目前为止的可能性:
- 将文件下载到本地机器,确定散列并更新 Blob MD5 值
- 看看我是否不能在同一区域编写一个 Azure Functions 应用程序,该应用程序可以计算哈希值并将其写入容器中每个对象的 blob
- 根据 https://cloud.google.com/storage/transfer/reference/rest/v1/TransferSpec#AwsS3Data 使用来自数据工厂的 Amazon S3 出口,然后使用 Google 对从 S3 导入的支持从那里提取它,但这看起来确实是在浪费带宽(而且我必须设置一个亚马逊帐户)。
理想情况下,我希望能够编写一个脚本,点击开始,不要管它。我没有从 Azure 获得最快的下载速度,因此 #1 不太理想,因为它需要很长时间。
还有其他方法吗?
您是否考虑过使用用于数据转换的 Azure 数据工厂 custom activity 支持?在后端,如果您使用 ADF 自定义 activity.
,您可以使用 Azure Batch 下载、更新文件并将其上传到 Google 存储中我们已将大约 3TB 的文件从 Azure 迁移到 Google 存储。我们已经在 Google Computing Engine 中启动了一个具有几 TB 本地磁盘的廉价 Linux 服务器。通过 blobxfer 将 Azure 文件传输到本地磁盘,然后通过 gsutil rsync
将文件从本地磁盘复制到 Google 存储(gsutil cp
也可以)。
您可以使用其他工具从 Azure 传输文件,您甚至可以在 GCE 中启动 Windows 服务器并在 Windows 上使用 gsutils
。
花了几天时间,但是简单明了。
我知道为您回答这个问题有点晚了,但这可能会帮助其他所有人都在尝试从 Azure Blob 存储迁移数据 到 Google 云存储
Google Cloud Storage 和 Azure Blob Storage 这两个平台都是存储服务,没有命令行界面,我们可以直接去 运行 传输命令。为此,我们需要一个中间计算实例,它实际上能够 运行 所需的命令。我们将按照以下步骤来实现云到云的传输。
首先,也是最重要的,在 Google 云平台中创建一个计算实例。您不需要创建一个计算能力强大的实例,您所需要的只是一台具有 2 核 CPU 和 4 GB 内存的 Debian-10GB 机器。
在早期,您会将数据下载到 GCP 中的计算实例,然后将其进一步移动到 Google 云存储。但是现在随着 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>
wget https://aka.ms/downloadazcopy-v10-linux
tar -xvf downloadazcopy-v10-linux
sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/
安装完这些包后,下一步就是创建共享签名访问密钥。如果您有 Azure Blob 存储资源管理器,只需右键单击目录树中的存储帐户名称,然后 Select Generate Shared Access Signature
现在您必须为您的 blob 对象创建一个 URL。为此,只需对任何 blob 对象 right-click select 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
现在,使用以下命令开始将文件从 Azure 复制到 GCP 存储。
azcopy cp --recursive=true "<-source url->" "<-destination url->"
如果万一您的工作失败了,您可以使用以下方式列出您的工作:
azcopy jobs list
并恢复失败的作业:
azcopy jobs resume jobid <-source sas->
您可以将所有步骤合并为一个 bash,将其保留 运行ning 直到数据传输完成。
仅此而已!我希望它能帮助别人
2020 年 5 月更新:Google云数据传输现在支持将 Azure Blob 存储作为源。这是一个无代码解决方案。
我们用它来将 ~ 1TB 的文件从 Azure Blob 存储传输到 Google 云存储。我们还进行了每日刷新,因此 Azure Blob 中的任何新文件都会自动复制到 Cloud Storage。