共用方式為


使用 AzCopy 在具有網路限制的 Azure 記憶體帳戶之間複製 Blob

本文介紹如何使用 AzCopy 命令行公用程式,在記憶體帳戶之間複製 Blob。 它也會說明如何在為記憶體帳戶設定網路限制時實作複製作業。

Background

在兩個記憶體帳戶之間複製 Blob 檔案是許多 Azure 使用者的常見需求。 Azure 記憶體支援將 Blob 從一個記憶體帳戶直接複製到另一個記憶體帳戶,這可以使用 AzCopy 命令行公用程式來實作。 使用者不需要將檔案下載到本機磁碟或緩衝區,然後再次上傳。

使用 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。

如需詳細資訊,請參閱使用 AzCopy v10 在 Azure 記憶體帳戶之間複製 Blob

在具有存取限制的記憶體帳戶之間複製 Blob

如果您需要透過記憶體防火牆限制來源和目的地記憶體帳戶的存取,您可能需要使用 AzCopy 在記憶體帳戶之間複製 Blob 的更多設定。 這是因為兩個記憶體帳戶之間的複製要求會使用私人IP位址,而且IP位址是動態的。

以下是兩個支援的案例:

案例 1:用戶端使用公用端點來存取記憶體帳戶

在此案例中,您必須將用戶端的公用IP位址或虛擬網路 (VNet) 新增至來源和目的地記憶體帳戶中的防火牆允許清單。

下圖顯示在此案例中,在記憶體帳戶之間複製 Blob 的程式:

此圖顯示案例 1 中在記憶體帳戶之間處理 Blob 的程式。

在此案例中,不需要防火牆允許清單。

下圖顯示在此案例中,在記憶體帳戶之間複製 Blob 的程式:

此圖顯示案例 2 中在記憶體帳戶之間處理 Blob 的程式。

以下是這兩種案例的此機制完整程式:

  1. 用戶端會將 PutBlockfromURL 要求傳送至目的地記憶體。
  2. 目的地記憶體會接收要求,並嘗試從指定的來源URL取得區塊。 不過,由於來源防火牆不允許目的地記憶體,因此會收到「403 禁止」錯誤。
  3. 在目的地記憶體收到「403 禁止」錯誤之後,它會代表用戶端傳送另一個 GetBlob 要求。 如果用戶端可以存取來源記憶體,目的地將能夠從來源取得區塊,並將成功的回應碼傳回用戶端。
  4. 用戶端會將 PutBlockList 傳送至目的地記憶體以認可區塊,並在收到要求的成功回應碼之後完成程式。

使用私人端點在中樞輪輻架構中的記憶體帳戶之間複製 Blob

使用 AzCopy 從中樞 VNet 中的 VM,在連線到不同輪輻 VNet 中私人端點的記憶體帳戶之間複製 Blob 時,會發生 403 錯誤。 您可以在 AzCopy 記錄或 Azure 記憶體記錄中找到「403 此要求未獲授權執行此作業 - CannotVerfiyCopySource」錯誤。 下列架構圖顯示發生錯誤的案例。

此圖顯示使用私人端點在中樞 & 輪輻架構中的記憶體帳戶之間複製 Blob 的 403 錯誤。

因應措施 1:在來源 VNet 中建立目的地記憶體帳戶的私人端點

可能的因應措施是在來源 VNet 中建立目的地記憶體帳戶的私人端點。 此設定可讓 VM 使用 AzCopy 成功複製記憶體帳戶之間的 Blob。 下列架構圖顯示在因應措施 1 的記憶體帳戶之間複製 Blob 的程式。

此圖顯示在因應措施 1 中於記憶體帳戶之間複製 Blob 的程式。

因應措施 2:將 VM 放在與來源記憶體帳戶相同的 VNet 中,並將 VNet 與目的地 VNet 對等互連

另一個選項是將 VM 放在與來源記憶體帳戶相同的 VNet 內。 然後,在此 VNet 與目的地 VNet 之間建立對等互連。 下列架構圖顯示在因應措施 2 中於記憶體帳戶之間複製 Blob 的程式。

此圖顯示在因應措施 2 中於記憶體帳戶之間複製 Blob 的程式。

因應措施 3:使用暫存預備帳戶來複製數據

如果您無法實作先前所述的因應措施,或受限於變更記憶體帳戶或 VNet 的現有網路設定,您可以使用暫存預備帳戶來複製數據:

  1. 在來源記憶體帳戶和目的地記憶體帳戶相同的區域中建立暫存記憶體帳戶。
  2. 使用 AzCopy 將資料從來源記憶體帳戶複製到暫存記憶體帳戶。
  3. 將數據從暫存記憶體帳戶複製到目的地記憶體帳戶。 執行數據傳輸之前,請確定暫存記憶體帳戶與目的地記憶體帳戶位於相同 VNet 中的私人端點。

因應措施 4:使用 VM 並將數據下載至 VM,然後將數據上傳至目的地記憶體帳戶

只有在其他方法不可行時,才使用此因應措施。 使用 VM 從來源記憶體帳戶下載數據,然後將其上傳至目的地記憶體帳戶。 這可以使用 AzCopy 來完成。 請確定 VM 的大小和磁碟容量適用於資料傳輸程式。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群