本文介绍如何使用 AzCopy 命令行实用工具在存储帐户之间复制 Blob。 它还介绍了在为存储帐户配置网络限制时如何实现复制操作。
背景
在两个存储帐户之间复制 Blob 文件是许多 Azure 用户的常见要求。 Azure 存储支持使用 AzCopy 命令行实用工具将 blob 从一个存储帐户直接复制到另一个存储帐户。 用户无需将文件下载到本地磁盘或缓冲区,然后再次上传文件。
使用 AzCopy 在两个存储帐户之间复制 Blob 并不依赖于本地计算机的网络带宽。 此方法可以利用存储帐户和 Azure 虚拟网络的性能,以实现比下载和上传文件更好的吞吐量。 如果两个存储帐户位于同一区域,则不会产生带宽费用。
用于在存储帐户之间复制 blob 的 AzCopy 命令
如果使用 Microsoft Entra ID 提供授权凭据,请使用以下命令:
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>'
在此方案中,需要确保Microsoft Entra 标识对源帐户和目标帐户具有适当的角色分配。
如果使用共享访问签名(SAS)令牌,请使用以下命令:
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>'
在此方案中,需要将 SAS 令牌追加到 AzCopy 命令中使用的源 URL 和目标 URL。
有关详细信息,请参阅 使用 AzCopy v10 在 Azure 存储帐户之间复制 Blob。
在有访问限制的存储账户之间复制 blob
如果需要通过存储防火墙限制对源存储帐户和目标存储帐户的访问,则可能需要使用 AzCopy 在存储帐户之间复制 Blob 的更多配置。 这是因为两个存储帐户之间的复制请求使用专用 IP 地址,IP 地址是动态的。
下面是两种受支持的方案:
方案 1:客户端使用公共终结点访问存储帐户
在此方案中,必须将客户端的公共 IP 地址或虚拟网络(VNet)添加到源存储帐户和目标存储帐户中的防火墙允许列表。
下图显示了在此方案中在存储帐户之间复制 Blob 的过程:
方案 2:客户端的 VNet 配置了专用链接,并使用专用终结点访问存储帐户
在此方案中,不需要防火墙允许列表。
下图显示了在此方案中在存储帐户之间复制 Blob 的过程:
下面是这两种方案的此机制的完整过程:
- 客户端将 PutBlockfromURL 请求发送到目标存储。
- 目标存储接收请求,并尝试从给定的源 URL 获取块。 但是,由于源防火墙不允许目标存储,因此会收到“403 禁止访问”错误。
- 目标存储收到“403 禁止访问”错误后,它会代表客户端发送另一个 GetBlob 请求。 如果客户端有权访问源存储,则目标将能够从源获取块,并向客户端返回成功响应代码。
- 客户端将 PutBlockList 发送到目标存储,以提交块,并在从请求收到成功响应代码后完成该过程。
使用专用终结点在中心辐射型体系结构中的存储帐户之间复制 Blob
使用 AzCopy 从中心 VNet 中的 VM 将连接到不同辐射 VNet 中的专用终结点的存储帐户之间复制 Blob 时,会发生 403 错误。 可以在 AzCopy 日志或Azure 存储日志中找到“403 此请求无权执行此操作 - CannotVerfiyCopySource”错误。 以下体系结构关系图显示了发生错误的场景。
解决方法 1:在源 VNet 中为目标存储帐户创建专用终结点
可能的解决方法是为源 VNet 中的目标存储帐户创建专用终结点。 此配置允许 VM 使用 AzCopy 成功复制存储帐户之间的 Blob。 以下体系结构关系图显示了在解决方法 1 中的存储帐户之间复制 Blob 的过程。
解决方法 2:将 VM 放置在与源存储帐户相同的 VNet 中,并将 VNet 与目标 VNet 对等互连
另一个选项是将 VM 放置在与源存储帐户相同的 VNet 中。 然后,在此 VNet 与目标 VNet 之间建立对等互连。 以下体系结构关系图显示了在解决方法 2 中的存储帐户之间复制 Blob 的过程。
解决方法 3:使用临时暂存帐户复制数据
如果无法实现上述解决方法,或者无法更改存储帐户或 VNet 的现有网络配置,则可以使用临时暂存帐户复制数据:
- 在源存储帐户和目标存储帐户所在的同一区域中创建临时存储帐户。
- 使用 AzCopy 将数据从源存储帐户复制到临时存储帐户。
- 将数据从临时存储帐户复制到目标存储帐户。 在执行数据传输之前,请确保临时存储帐户与目标存储帐户位于同一 VNet 中的专用终结点。
解决方法 4:使用 VM 并将数据下载到 VM,然后将数据上传到目标存储帐户
仅当其他方法不可行时,才使用此解决方法。 使用 VM 从源存储帐户下载数据,然后将其上传到目标存储帐户。 这可以通过 AzCopy 完成。 确保 VM 的大小和磁盘容量适用于数据传输过程。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。