共用方式為


區塊 Blob 的物件複寫

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

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

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

物件複製的示意圖。

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

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

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

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

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

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

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

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

已啟用階層式命名空間的帳戶尚不支援物件複寫。

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

物件複寫的運作方式

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

重要事項

由於區塊 Blob 資料會以非同步方式複寫,因此來源帳戶和目的地帳戶不會立即同步處理。

OR 現在支援重點複寫技術,此技術會優先處理 OR 原則中所有作業的複寫。 啟用 OR 優先複製後,所有操作的複寫效能都會提升。 當複寫政策的來源和目的地帳戶位於同一大陸內時,OR 優先順序複寫也會在 15 分鐘內複寫 99.0% 的物件,以用於支援的工作負載。 功能效能由服務水準協議(SLA)保證。 如需詳細資訊,請造訪 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 移至封存層,物件複寫就會失敗。 如需 Blob 階層的詳細資訊,請參閱 Blob 資料的存取層

固定 Blob

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

如果目的地容器具有容器層級不變性原則,則對來源容器中物件的變更 (例如更新或刪除) 可能仍會成功。 不過,由於不變性限制,這些變更可能無法複寫至目的地容器。 若要進一步了解範圍限定於容器的不變性原則禁止了哪些作業,請參閱容器層級範圍的案例

如果目的地帳號的 blob 版本有有效的版本層級不變性政策,對相應來源容器的 blob 版本執行刪除或更新操作可能會成功。 不過,將該作業複寫至目的地物件會失敗。 若要進一步了解範圍限定於容器的不變性原則禁止了哪些作業,請參閱版本層級範圍的案例

物件複寫原則和規則

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

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

複寫原則

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

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

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

複寫規則

複寫規則會指定 Azure 儲存體如何將 Blob 從來源容器複寫到目的地容器。 您最多可以為每個複寫原則指定 1,000 個複寫規則。 每個複寫規則都會定義單一來源和目的地容器,而且每個來源和目的地容器只能在一個規則中使用。 因此,最多 1,000 個來源容器和 1,000 個目的地容器可以參與單一複寫原則。

建立複寫規則之後,會忽略預先存在的 Blob;預設只會複製建立規則之後新增的新區塊 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"
        }
      }
    ]
  }
}

請指定來源帳戶和目的地帳戶的完整資源 ID。

建立原則定義檔時,請指定 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 均支援在物件複寫原則中使用完整資源識別碼路徑。

下表顯示使用完整資源 ID 與帳戶名稱時,複寫原則行為如何變化。 比較取決於該儲存帳號是否允許跨租戶複製。

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

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

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

可以建立跨租用戶原則。
相同租用戶或跨租用戶原則都無法建立。 發生錯誤,因為 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 Storage 會附加一項額外要求。 對於任何使用此儲存帳號作為來源或目的地的物件複製政策,兩個帳號都必須屬於同一個 Microsoft Entra 租戶。 如需不允許跨租用戶物件複寫的詳細資訊,請參閱防止跨 Microsoft Entra 租用戶的物件複寫

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

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

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

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

複寫計量

物件複寫支援兩個計量,讓您深入瞭解複寫進度:

  • 待復寫的操作:依據時間區間發出從來源儲存帳戶到目的地儲存帳戶的待復寫操作總數
  • 待複寫的位元組:按每個時間貯體發出,從來源到目的地儲存帳戶的待複寫位元組總和

先前列出的每個指標都可以依時間區間的維度來檢視。 此細分有助於洞察每個時間桶中待複製的位元組數或操作,具體如下:

  • 0-5 分鐘
  • 5-10 分鐘
  • 10-15 分鐘
  • 15-30 分鐘
  • 30 分鐘-2 小時
  • 2-8 小時
  • 8-24 小時
  • >24 小時

下列範例圖片顯示過去七天的待定操作和位元組指標:

物件複寫指標顯示七天持續時間內擱置的作業和擱置的位元組

您可以在來源帳戶上啟用複寫計量,以監視待決位元組和待決作業。 如需詳細資訊,請參閱 設定複寫計量

複寫狀態

您可以在來源帳戶中檢查 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 物件複寫會將整個版本複製到目的地 (不只是版本的唯一區塊)。 此傳輸會產生網路輸出的成本。 請參閱頻寬定價

秘訣

若要降低意外帳單的風險,請在僅包含少數物件的帳戶中啟用物件複寫。 接著,在實際執行設定中啟用該功能之前,請先測量對成本的影響。

後續步驟