區塊 Blob 的物件複寫

物件複寫會以非同步方式複製來源儲存體帳戶與目的地帳戶之間的區塊 Blob。 物件複寫支援的部分案例包括:

  • 將延遲最小化。 物件複寫可以讓用戶端從較接近的實際鄰近區域取用資料,藉此減少讀取要求的延遲。
  • 提高計算工作負載的效率。 使用物件複寫,計算工作負載可以處理不同區域中相同的區塊 Blob 集合。
  • 將資料散發最佳化。 您可以在單一位置處理或分析資料,然後只將結果複寫到其他區域。
  • 將成本最佳化。 複寫您的資料之後,您可以使用生命週期管理原則將其移至封存層,以降低成本。

下圖顯示物件複寫如何將區塊 Blob 從一個區域中的來源儲存體帳戶複寫到兩個不同區域中的目的地帳戶。

顯示物件復寫運作方式的圖表

若要了解如何設定物件複寫,請參閱設定物件複寫

物件複寫的必要條件和注意事項

若要進行物件複寫,也需要啟用下列 Azure 儲存體功能:

啟用變更摘要和 Blob 版本設定可能會產生額外的成本。 如需詳細資訊,請參閱 Azure 儲存體定價頁面。

一般用途 v2 儲存體帳戶和進階區塊 Blob 帳戶都支援物件複寫。 來源和目的地帳戶都必須是一般用途 v2 或進階區塊 Blob 帳戶。 物件複寫僅支援區塊 Blob;不支援附加 Blob 和分頁 Blob。

使用 Microsoft 管理的金鑰或客戶自控金鑰加密的帳戶支援物件複寫。 如需關於客戶自控金鑰的詳細資訊,請參閱客戶自控金鑰進行 Azure 儲存體加密

在使用客戶提供的金鑰加密之來源帳戶中的 Blob,不支援物件複寫。 如需客戶提供金鑰的詳細資訊,請參閱針對針對 Blob 儲存體的要求提供加密金鑰

物件複寫原則中的來源或目的地帳戶不支援客戶管理的容錯移轉。

使用 Data Lake Storage Gen2 API 上傳的 Blob 不支援物件複寫。

物件複寫的運作方式

物件複寫會根據您設定的規則,以非同步方式複製容器中的區塊 Blob。 Blob 的內容、任何與 Blob 建立關聯的版本,以及 Blob 的中繼資料和屬性,全都會從來源容器複製到目的地容器。

重要

因為區塊 Blob 資料會以非同步方式複寫,所以來源帳戶和目的地帳戶不會立即同步。目前不提供將資料複寫至目的地帳戶所需時間的 SLA。 您可以檢查來源 Blob 上的複寫狀態,以判斷複寫是否已完成。 如需詳細資訊,請參閱檢查 Blob 的複寫狀態

Blob 版本設定

物件複寫需要在來源和目的地帳戶上啟用 Blob 版本設定。 來源帳戶中的複寫 Blob 有所修改時,會在來源帳戶中建立新版的 Blob,以反映 Blob 修改前的狀態。 來源帳戶中的目前版本會反映最新的更新。 目前的版本和任何先前的版本都會複寫至目的地帳戶。 如需寫入作業對 Blob 版本有何影響的詳細資訊,請參閱寫入作業的版本設定

如果您的儲存體帳戶有生效中的物件複寫原則,您就無法停用該帳戶的 Blob 版本設定。 您必須先刪除帳戶上的所有物件複寫原則,才能停用 Blob 版本設定。

刪除來源帳戶中的 Blob

刪除來源帳戶中的 Blob 後,Blob 的目前版本會變成先前的版本,而不再是目前的版本。 所有現有的舊版 Blob 都會保留。 此狀態會複寫至目的地帳戶。 如需刪除作業對 Blob 版本有何影響的詳細資訊,請參閱刪除作業的版本設定

快照集

物件複寫不支援 Blob 快照集。 來源帳戶中 Blob 的任何快照集都不會複寫到目的地帳戶。

Blob 索引標籤

物件複寫不會將來源 Blob 的索引標籤複製到目的地 Blob。

Blob 分層

當來源和目的地帳戶位於經常性存取層或非經常性存取層時,便能支援物件複寫。 來源和目的地帳戶可能會處於不同的層。 但是,如果來源或目的地帳戶中的 Blob 已移至封存層,則物件複寫會失敗。 如需 Blob 階層的詳細資訊,請參閱 Blob 資料的存取層

固定 Blob

Azure Blob 儲存體的不變性原則包含限時保留原則和合法保存。 當不變性原則在目的地帳戶上生效時,物件複寫可能會受到影響。 如需關於不變性原則的詳細資訊,請參閱使用不可變儲存體儲存業務關鍵 Blob 資料

如果目的地帳戶中的容器有容器層級的不變性原則生效,當來源容器中的物件更新或刪除時,來源容器上的作業可能會成功,但該作業對目的地容器的複寫將會失敗。 若要進一步了解範圍限定於容器的不變性原則禁止了哪些作業,請參閱容器層級範圍的案例

如果目的地帳戶中的 Blob 版本有版本層級的不變性原則生效,則在對來源容器中的 Blob 版本執行了刪除或更新作業後,來源物件上的作業可能會成功,但該作業對目的地物件的複寫將會失敗。 若要進一步了解範圍限定於容器的不變性原則禁止了哪些作業,請參閱版本層級範圍的案例

物件複寫原則和規則

當您設定物件複寫時,您會建立複寫原則,指定來源儲存體帳戶和目的地帳戶。 複寫原則包含一或多個規則,可指定來源容器和目的地容器,並指出將複寫來源容器中的哪些區塊 Blob。

在您設定物件複寫之後,Azure 儲存體會定期檢查來源帳戶的變更摘要,並以非同步方式將任何寫入或刪除作業複寫至目的地帳戶。 複寫延遲取決於所複寫區塊 Blob 的大小。

複寫原則

在設定物件複寫時,您會透過 Azure 儲存體資源提供者,在目的地帳戶上建立複寫原則。 複寫原則建立後,Azure 儲存體會為其指派原則識別碼。 然後,您必須使用原則識別碼,將該複寫原則與來源帳戶產生關聯。 來源和目的地帳戶上的原則識別碼必須相同,才能進行複寫。

來源帳戶可以複寫至最多兩個目的地帳戶,每個目的地帳戶各一個原則。 同樣地,作為目的地帳戶的帳戶不能有兩個以上的複寫原則。

來源和目的地帳戶可位於相同區域或不同區域。 兩者也可以位於相同訂用帳戶或不同的訂用帳戶中。 或者,來源和目的地帳戶也可位於不同的 Microsoft Entra 租用戶中。 每個來源帳戶/目的地帳戶組只能建立一個複寫原則。

複寫規則

複寫規則會指定 Azure 儲存體如何將 Blob 從來源容器複製到目的地容器。 您最多能為每個複寫原則指定 1000 個複寫規則。 每個複寫規則都會定義單一來源和目的地容器,而每個來源和目的地容器只能在一個規則中使用,這表示單一複寫原則中最多有 1000 個來源容器和 1000 個目的地容器。

當您建立複寫規則時,根據預設,只會複製後續新增至來源容器的新區塊 Blob。 您可以指定同時複製新的和現有的區塊 Blob,或定義自訂複製範圍,從指定的時間開始複製建立的區塊 Blob。

您也可以指定一或多個篩選作為複製規則的一部分,以依前置詞篩選區塊 Blob。 當您指定前置詞時,只有符合來源容器中該前置詞的 Blob 才會複製到目的地容器。

來源和目的地容器必須同時存在,您才能在規則中加以指定。 建立複寫原則後,不允許對目的地容器進行寫入作業。 任何寫入目的地容器的嘗試都會失敗,錯誤碼為 409 (衝突)。 若要寫入已設定複寫規則的目的地容器,您必須刪除為該容器設定的規則,或移除複寫原則。 複寫原則作用中時,允許對目的地容器進行讀取和刪除作業。

您可以對目的地容器中的 Blob 呼叫設定 Blob 階層作業,以將其移至封存層。 如需封存層的詳細資訊,請參閱 Blob 資料的存取層

注意

變更來源帳戶中 Blob 的存取層,並不會變更目的地帳戶中該 Blob 的存取層。

原則定義檔

物件複寫原則由 JSON 檔案所定義。 您可以從現有的物件複寫原則取得原則定義檔。 您也可以藉由上傳原則定義檔來建立物件複寫原則。

範例原則定義檔

下列範例會定義目的地帳戶上的複寫原則,其中包含單一規則,會比對前置詞 b,並且為要複寫的 Blob 設定最小建立時間。 請記得以自有值來取代角括弧中的值:

{
  "properties": {
    "policyId": "default",
    "sourceAccount": "/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "destinationAccount": "/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "rules": [
      {
        "ruleId": "",
        "sourceContainer": "<source-container>",
        "destinationContainer": "<destination-container>",
        "filters": {
          "prefixMatch": [
            "b"
          ],
          "minCreationTime": "2021-08-028T00:00:00Z"
        }
      }
    ]
  }
}

指定來源和目的地帳戶的完整資源識別碼

建立原則定義檔時,請指定 sourceAccountdestinationAccount 項目的完整 Azure Resource Manager 資源識別碼,如上一節中的範例所示。 若要了解如何尋找儲存體帳戶的資源識別碼,請參閱取得儲存體帳戶的資源識別碼

完整資源識別碼的格式如下:

/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

過去,原則定義檔只需要帳戶名稱,而不是儲存體帳戶的完整資源識別碼。 隨著 Azure 儲存體資源提供者 REST API 的 2021-02-01 版導入了 AllowCrossTenantReplication 安全性屬性,現在,如果對於參與複寫原則的儲存體帳戶不允許跨租用戶複寫,則必須為建立的任何物件複寫原則提供完整的資源識別碼。 Azure 儲存體會使用完整資源識別碼來確認來源和目的地帳戶是否位於相同的租用戶中。 若要深入了解不允許跨租用戶複寫的原則,請參閱防止跨 Microsoft Entra 租用戶的複寫

雖然在儲存體帳戶允許跨租用戶複寫時仍支援提供帳戶名稱,但 Microsoft 建議最好一律提供完整的資源識別碼。 所有舊版的 Azure 儲存體資源提供者 REST API 均支援在物件複寫原則中使用完整資源識別碼路徑。

下表比較在儲存體帳戶允許或不允許跨租用戶複寫的情況下,使用指定的完整資源識別碼或帳戶名稱建立複寫原則分別會有何行為。

原則定義中的儲存體帳戶識別碼 允許跨租用戶複寫 不允許跨租用戶複寫
完整資源識別碼 可以建立相同租用戶原則。

可以建立跨租用戶原則。
可以建立相同租用戶原則。

無法建立跨租用戶原則。
僅限帳戶名稱 可以建立相同租用戶原則。

可以建立跨租用戶原則。
相同租用戶或跨租用戶原則都無法建立。 發生錯誤,因為 Azure 儲存體無法確認來源和目的地帳戶是否位於相同的租用戶中。 錯誤會指出您必須在原則定義檔中指定 sourceAccountdestinationAccount 項目的完整資源識別碼。

指定原則和規則識別碼

下表摘要說明各種情況下,原則定義檔中的 policyIdruleId 項目所使用的值。

當您建立此帳戶的原則定義檔時... 將原則識別碼設定為此值 將規則識別碼設定為此值
目的地帳戶 字串值 default。 Azure 儲存體將為您建立原則識別碼值。 空字串。 Azure 儲存體將為您建立規則識別碼值。
來源帳戶 當您下載目的地帳戶的原則定義檔時,所傳回的原則識別碼值。 當您下載目的地帳戶的原則定義檔時,所傳回的規則識別碼值。

防止跨 Microsoft Entra 租用戶進行複寫

Microsoft Entra 租用戶是專用的 Microsoft Entra ID 執行個體,代表用於身分識別和存取管理的組織。 每個 Azure 訂用帳戶分別會與一個 Microsoft Entra 租用戶有信任關係。 訂用帳戶中的所有資源 (包括儲存體帳戶) 都與相同的 Microsoft Entra 租用戶相關聯。 如需詳細資訊,請參閱什麼是 Microsoft Entra ID?

根據預設,自 2023 年 12 月 15 日起建立的新帳戶會停用跨租用戶複寫。 如果您的安全性原則要求您將物件複寫限定為位於相同租用戶中的儲存體帳戶,您可以藉由設定安全性屬性 AllowCrossTenantReplication (預覽) 來禁止跨租用戶的複寫。 當您不允許某個儲存體帳戶進行跨租用戶的物件複寫時,對於使用該儲存體帳戶作為來源或目的地帳戶而設定的任何物件複寫原則,Azure 儲存體都會要求來源和目的地帳戶均必須位於相同的 Microsoft Entra 租用戶中。 如需不允許跨租用戶物件複寫的詳細資訊,請參閱防止跨 Microsoft Entra 租用戶的物件複寫

若要禁止儲存體帳戶的跨租用戶物件複寫,請將 AllowCrossTenantReplication 屬性設定為 false。 如果儲存體帳戶目前未參與任何跨租用戶的物件複寫原則,則將 AllowCrossTenantReplication 屬性設定為 false,將會禁止後續以此儲存體帳戶作為來源或目的地,來設定跨租用戶的物件複寫原則。

如果儲存體帳戶目前參與了一或多個跨租用戶的物件複寫原則,則不允許將 AllowCrossTenantReplication 屬性設定為 false。 您必須先刪除現有的跨租用戶原則,才能禁止跨租用戶複寫。

根據預設,針對自 2023 年 12 月 15 日起建立的儲存體帳戶,AllowCrossTenantReplication 屬性會設為 false。 針對 2023 年 12 月 15 日以前建立的儲存體帳戶,當儲存體帳戶的 AllowCrossTenantReplication 屬性值為 nulltrue 時,授權使用者即可以此帳戶作為來源或目的地,來設定跨租用戶的物件複寫原則。 如需關於如何設定跨租用戶原則的詳細資訊,請參閱設定區塊 Blob 的物件複寫

您可以使用 Azure 原則來稽核一組儲存體帳戶,以確定 AllowCrossTenantReplication 屬性設定為防止跨租用戶的物件複寫。 您也可以使用 Azure 原則來強制控管一組儲存體帳戶。 例如,您可以建立具有拒絕效果的原則,以在 AllowCrossTenantReplication 屬性設定為 true 時防止使用者建立儲存體帳戶,或防止藉由修改現有的儲存體帳戶,將屬性值變更為 true

複寫狀態

您可以在來源帳戶中檢查 Blob 的複寫狀態。 如需詳細資訊,請參閱檢查 Blob 的複寫狀態

注意

複寫進行中時,無法得知已複寫的資料百分比。

如果來源帳戶中的 Blob 複寫狀態顯示為失敗,請調查下列可能的原因:

  • 確定已在目的地帳戶上設定物件複寫原則。
  • 確認目的地帳戶仍存在。
  • 確認目的地容器仍然存在。
  • 確認目的地容器並非正在刪除或剛被刪除。 刪除容器最多可能需要 30 秒的時間。
  • 確認目的地容器仍在參與物件複寫原則。
  • 如果已使用客戶提供的金鑰來加密來源 Blob 作為寫入作業的一部分,則物件複寫將會失敗。 如需客戶提供金鑰的詳細資訊,請參閱針對針對 Blob 儲存體的要求提供加密金鑰
  • 檢查來源或目的地 Blob 是否已移至封存層。 封存的 Blob 無法透過物件複寫進行複寫。 如需封存層的詳細資訊,請參閱 Blob 資料的存取層
  • 確認目的地容器或 Blob 未受到不變性原則的保護。 請記住,容器或 Blob 可繼承其父代的不變性原則。 如需不變性原則的詳細資訊,請參閱 Blob 資料的不可變儲存體概觀

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

計費

設定物件複寫不會產生成本。 這包括啟用變更摘要、啟用版本控制,以及新增複製原則的工作。 但是,對於來源和目的地帳戶的讀取與寫入交易,物件複寫會產生成本,此外,將資料從來源帳戶複製到目的地帳戶時也會產生輸出費用,處理變更摘要時則會有讀取費用。

以下是成本明細。 若要尋找每個成本元件的價格,請參閱 Azure Blob 儲存體定價

更新來源帳戶中 Blob 的成本 複寫目的地帳戶中資料的成本
寫入作業的交易成本 讀取變更摘要記錄的交易成本
Blob 和每個 Blob 版本的儲存成本1 讀取 Blob 和 Blob 版本的交易成本2
新增變更摘要記錄的成本 寫入 Blob 和 Blob 版本的交易成本2
Blob 和每個 Blob 版本的儲存成本1
網路輸出成本3

1 在來源帳戶上,如果您未變更 Blob 或版本的階層,則會針對該 Blob、其版本獨有的資料區塊進行計費。 請參閱 Blob 版本設定定價和計費。 在目的地帳戶中,系統會針對版本的所有區塊計費,不論這些區塊是否為唯一的區塊。

2 這只包括上次複寫完成之後建立的 Blob 版本。

3 物件複寫會將整個版本複製到目的地 (不只是版本的唯一區塊)。 此傳輸會產生網路輸出的成本。 請參閱頻寬定價

提示

若要降低產生非預期費用的風險,請在只包含少量物件的帳戶中啟用物件複寫。 接著,在實際執行設定中啟用該功能之前,請先測量對成本的影響。

下一步