物件複寫會以非同步方式複製來源儲存體帳戶與目的地帳戶之間的區塊 Blob。 物件複寫支援的部分案例包括:
- 最小化延遲。 物件複寫透過讓用戶端能從物理距離較近的區域消費資料,降低讀取請求的延遲。
- 提高計算工作負載的效率。 使用物件複寫,計算工作負載可以處理不同區域中相同的區塊 Blob 集合。
- 優化資料分配。 您可以在單一位置處理或分析資料,然後只將結果複寫到其他區域。
- 將成本優化。 資料複製完成後,你可以透過生命週期管理政策將其移至歸檔層來降低成本。
下圖顯示物件複寫如何將來自一個區域的來源儲存體帳戶中的區塊 Blob,複寫到兩個不同區域的目的地帳戶。
若要了解如何設定物件複寫,請參閱設定物件複寫。
物件複寫的必要條件和注意事項
物件複寫也需啟用以下 Azure 儲存體 功能:
- 變更摘要:在來源帳戶上啟用。 欲了解如何啟用變更訂閱,請參閱 啟用與停用變更訂閱。
- Blob 版本管理:在來源帳號和目的地帳號上啟用。 若要了解如何啟用版本設定,請參閱啟用和管理 Blob 版本設定。
啟用變更提要和 Blob 版本控制可能會產生額外成本。 欲了解更多資訊,請參閱Azure 儲存體價格頁面。
物件複寫支援一般用途 v2 儲存體帳戶和進階區塊 Blob 帳戶。 來源和目的地帳戶都必須是一般用途 v2 或進階區塊 Blob 帳戶。 物件複寫僅支援區塊 Blob;不支援附加 Blob 和分頁 Blob。
物件複製支援以 Microsoft 管理的金鑰或客戶管理的金鑰加密的帳號。 欲了解更多關於客戶管理金鑰的資訊,請參閱 Customer-managed 金鑰用於Azure 儲存體加密。
物件複寫不支援來源帳戶中使用客戶提供的金鑰加密的 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 版本有何影響的詳細資訊,請參閱寫入作業的版本設定。
如果你的 storage 帳號有物件複製政策,你就無法停用該帳號的 blob 版本控制。 您必須先刪除帳戶上的所有物件複寫原則,才能停用 Blob 版本設定。
附註
只有 Blob 會複製到目的地。 該服務不會複製 blob 的版本 ID。 服務在目的地放置一個 blob 後,會指派一個新的版本 ID。
刪除來源帳戶中的 Blob
當你刪除來源帳號中的 blob 時,該 blob 的當前版本會變成之前的版本,且不再有當前版本。 該服務會保留 blob 的所有現有舊版。 服務會將此狀態複製到目的地帳號。 欲了解更多關於刪除操作如何影響 blob 版本的資訊,請參閱 刪除操作的版本管理。
快照集
物件複寫不支援 Blob 快照集。 該服務不會將來源帳戶中 Blob 上的任何快照複寫到目的地帳戶。
Blob 索引標籤
物件複寫現在支援將索引標籤從來源 blob 複製到目的地 blob。 你可以將此功能配置為新的或現有的複製規則的一部分。 更多資訊請參閱 「設定物件複製」。
重要事項
標籤複製目前處於預覽階段。 請參閱補充使用條款Microsoft Azure預覽,了解適用於Azure測試版、預覽版或其他尚未正式發布的功能法律術語。
Blob 分層
當來源和目的地帳戶位於任何線上層 (經常性存取層、非經常性存取層或極非經常性存取層) 時,支援物件複寫。 來源和目的地帳戶可能位於不同的層級。 不過,如果來源或目的地帳戶中的 Blob 移至封存層,物件複寫就會失敗。 重新水合已封存的 blob 不會觸發物件複寫。 只有在重新水化後再次更新 Blob 資料時,才會觸發物件複寫。 欲了解更多關於 blob tiers 的資訊,請參閱 Access tiers for blob data。
固定 Blob
Azure Blob 儲存體 的不可變性政策包括基於時間的保留政策和法律保留。 當不變性政策在目的地帳戶上生效時,物件複寫可能會受到影響。 欲了解更多關於不可變性政策的資訊,請參閱使用不可變儲存來保存業務關鍵的 blob 資料。
如果目的地容器具有容器層級不變性原則,則對來源容器中物件的變更 (例如更新或刪除) 可能仍會成功。 不過,由於不變性限制,這些變更可能無法複寫至目的地容器。 若要進一步了解範圍限定於容器的不變性原則禁止了哪些作業,請參閱容器層級範圍的案例。
如果目的地帳號的 blob 版本有有效的版本層級不變性政策,對相應來源容器的 blob 版本執行刪除或更新操作可能會成功。 不過,將該作業複寫至目的地物件會失敗。 關於哪些操作被禁止使用具有版本範圍的不變性政策,請參見 「具有版本層級範圍的情境」。
物件複寫原則和規則
當你設定物件複製時,你會建立一個複製政策,指定來源 storage 帳號和目的地帳號。 複寫原則包含一或多個規則,這些規則指定來源和目的地容器,並指出要複寫哪些來源 Blob。
設定物件複製後,Azure 儲存體 會定期檢查來源帳號的變更摘要,並以非同步方式將任何寫入或刪除操作複製到目標帳號。 複寫延遲取決於所複寫區塊 Blob 的大小。
複寫原則
當你設定物件複製時,你會透過 Azure 儲存體 資源提供者在目標帳號建立複製政策。 建立複製政策後,Azure 儲存體 會指派一個政策 ID。 然後,您必須使用原則識別碼,將該複寫原則與來源帳戶產生關聯。 來源帳號與目的地帳號的政策 ID 必須相同,才能進行複寫。
來源帳戶可以複寫至最多兩個目的地帳戶,每個目的地帳戶各一個原則。 同樣地,作為目的地帳戶的帳戶不能有兩個以上的複寫原則。
來源和目的地帳戶可能位於相同的區域或不同的區域。 它們可能位於相同的訂閱中,也可能位於不同的訂閱中。 可選擇性地,來源帳號與目的地帳號可能存在於不同的 Microsoft Entra 租戶中。 你只能為每個來源與目的帳號對建立一個複製策略。
複寫規則
複寫規則規定 Azure 儲存體 如何將 blobs 從來源容器複製到目的地容器。 您最多可以為每個複寫原則指定 1,000 個複寫規則。 每個複寫規則都會定義單一來源和目的地容器,而且每個來源和目的地容器只能在一個規則中使用。 因此,最多 1,000 個來源容器和 1,000 個目的地容器可以參與單一複寫原則。
建立複寫規則之後,會忽略預先存在的 Blob;預設只會複製建立規則之後新增的新區塊 Blob。 不過,您可以指定複製新的與現有區塊 Blob。 您也可以定義自訂複製範圍,以複製在指定的時間之後建立的任何區塊 Blob。
您也可以指定一或多個篩選作為複製規則的一部分,以依前置詞篩選區塊 Blob。 當您指定前置詞時,只有符合來源容器中該前置詞的 Blob 才會複製到目的地容器。
來源和目的地容器必須同時存在,您才能在規則中加以指定。 建立複寫原則後,不允許對目的地容器進行寫入作業。 任何寫入目的地容器的嘗試都會失敗,錯誤碼為 409 (衝突)。
若要使用複寫規則寫入目的地容器,您必須先停用複寫。 你可以透過刪除該容器的規則或移除整個複製政策來停用該規則。
複寫原則作用中時,允許對目的地容器進行讀取和刪除作業。
您可以對目的地容器中的 Blob 呼叫設定 Blob 階層作業,以將其移至封存層。 欲了解更多關於封存層的資訊,請參考 Blob 數據的存取層級。
附註
在來源帳號更改 blob 的 access tier,並不會改變該 blob 在目標帳號的 access tier。
原則定義檔
使用 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>",
"metrics": {
"enabled": false
},
"priorityReplication": "false",
"rules": [
{
"ruleId": "",
"sourceContainer": "<source-container>",
"destinationContainer": "<destination-container>",
"filters": {
"prefixMatch": [
"b"
],
"minCreationTime": "2021-08-28T00:00:00Z"
}
}
]
}
}
自訂篩選
你可以在 JSON 檔案中自訂不同選項的篩選器:
- 依前綴匹配斑點 — 僅複製名稱以字母
b開頭的斑點。
"filters": {
"prefixMatch": [
"b"
],
}
- 依建立時間比對 Blob — 只複製在指定時間或之後建立的 Blob。
"filters": {
"minCreationTime": "2021-08-28T00:00:00Z"
}
- 複寫所有 Blob — 將最小建立時間設定為最早可能的值。
"filters": {
"minCreationTime": "1601-01-01T00:00:00Z"
}
請指定來源帳戶和目的地帳戶的完整資源 ID。
建立政策定義檔案時,請如前一節範例所示,指定 sourceAccount 和 destinationAccount 條目的完整Azure Resource Manager資源 ID。 要了解如何找到storage帳號的資源 ID,請參見 取得 storage 帳號的資源 ID。
完整資源識別碼的格式如下:
/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>
先前政策定義檔案只需帳號名稱,而非完整的 storage 帳號資源 ID。 隨著 Azure 儲存體 資源提供者 REST API 版本 2021-02-01 引入 AllowCrossTenantReplication 安全屬性,您現在必須提供任何物件複製政策的完整資源 ID,當參與複製政策的儲存帳號被禁止跨租戶複製時,您必須提供完整的物件複製政策。 Azure 儲存體 會使用完整的資源 ID 來驗證來源帳號與目的地帳號是否位於同一租戶中。 欲了解更多關於禁止跨租戶複製策略的資訊,請參閱 防止跨Microsoft Entra租戶的複製。
雖然跨租用戶複寫仍可支援單純使用帳戶名稱的做法,基於最佳做法,Microsoft 建議使用完整資源 ID。 所有先前版本的 Azure 儲存體 資源提供者 REST API 都支援在物件複製政策中使用完整的資源 ID 路徑。
下表顯示使用完整資源 ID 與帳戶名稱時,複寫原則行為如何變化。 比較取決於該 storage 帳號是否允許跨租戶複製。
| 政策定義中的 Storage 帳戶識別碼 | 允許跨租用戶複寫 | 不允許跨租用戶複寫 |
|---|---|---|
| 完整資源識別碼 | 可以建立相同租用戶原則。 可以建立跨租用戶原則。 |
可以建立相同租用戶原則。 無法建立跨租用戶原則。 |
| 僅限帳戶名稱 | 可以建立相同租用戶原則。 可以建立跨租用戶原則。 |
相同租用戶或跨租用戶原則都無法建立。 會發生錯誤,因為 Azure 儲存體 無法驗證來源帳號和目的地帳號是否在同一個租戶中。 錯誤會指出您必須在原則定義檔中指定 sourceAccount 和 destinationAccount 項目的完整資源識別碼。 |
指定原則和規則識別碼
下表摘要說明各種情況下,原則定義檔中的 policyId 和 ruleId 項目所使用的值。
| 當您建立此帳戶的原則定義檔時... | 將原則識別碼設定為此值 | 將規則識別碼設定為此值 |
|---|---|---|
| 目的地帳戶 | 字串值 default。 Azure 儲存體 會幫你建立政策 ID 值。 | 空字串。 Azure 儲存體 會幫你建立規則 ID 值。 |
| 來源帳戶 | 當您下載目的地帳戶的原則定義檔時,所傳回的原則識別碼值。 | 當您下載目的地帳戶的原則定義檔時,所傳回的規則識別碼值。 |
避免跨 Microsoft Entra 租用戶進行複寫
Microsoft Entra 租戶是 Microsoft Entra ID 的專用實例,代表組織用於身份與存取管理。 每個 Azure 訂閱都與單一 Microsoft Entra 租戶建立信任關係。 訂閱中的所有資源,包括儲存帳號,都與同一個 Microsoft Entra 租戶相關聯。 更多資訊請參見什麼是Microsoft Entra ID?
根據預設,從 2023 年 12 月 15 日起,對於新建立的帳戶將停用跨租用戶複寫。 如果您的安全政策要求物件複製只能限制在同一租戶內的儲存帳號,您可以透過設定安全屬性 AllowCrossTenantReplication(預覽)來禁止跨租戶複製。 當你為儲存帳號停用跨租戶物件複製時,Azure 儲存體 會施加額外要求。 對於任何使用此儲存帳號作為來源或目的地的物件複製政策,兩個帳號都必須屬於同一個 Microsoft Entra 租戶。 欲了解更多關於禁止跨租戶物件複製的資訊,請參見 防止跨Microsoft Entra租戶間物件複製 。
若要禁止storage帳號的跨租戶物件複製,請將 AllowCrossTenantReplication 屬性設為 false。 如果storage帳號目前沒有參與任何跨租戶物件複製政策,則將 AllowCrossTenantReplication 屬性設為 false,可防止未來以該storage帳號作為來源或目的地來設定跨租戶物件複製政策。
如果儲存帳戶目前參與一個或多個跨租戶物件複製策略,則不允許將 AllowCrossTenantReplication 屬性設為 false。 您必須先刪除現有的跨租用戶原則,才能禁止跨租用戶複寫。
預設情況下,AllowCrossTenantReplication屬性對於自 2023 年 12 月 15 日起建立的 storage 帳號設為 false。 對於 2023 年 12 月 15 日之前建立的storage帳號,且 storage 帳號的
你可以用 Azure 原則 來稽核一組儲存帳號,確保 AllowCrossTenantReplication 屬性被設定為防止跨租戶物件複製。 你也可以使用 Azure 原則 來強制管理一組儲存帳號。 例如,你可以建立帶有
複寫計量
物件複寫支援兩個計量,讓您深入瞭解複寫進度:
- 待複製的操作:從來源儲存帳戶到目的地儲存帳戶的待複製操作總數,按時間段進行統計。
- 待複寫的位元組:按每個時間貯體發出,從來源到目的地儲存體帳戶的待複寫位元組總和
先前列出的每個指標都可以依時間區間的維度來檢視。 此細分有助於洞察每個時間桶中待複製的位元組數或操作,具體如下:
- 0-5 分鐘
- 5-10 分鐘
- 10-15 分鐘
- 15-30 分鐘
- 30 分鐘-2 小時
- 2-8 小時
- 8-24 小時
-
>24 小時
下列範例圖片顯示過去七天的待定操作和位元組指標:
您可以在來源帳戶上啟用複寫計量,以監視待決位元組和待決作業。 如需詳細資訊,請參閱 設定複寫計量。
複寫狀態
您可以在來源帳戶中檢查 Blob 的複寫狀態。 如需詳細資訊,請參閱檢查 Blob 的複寫狀態。
附註
在複製進行中,無法確定複製資料的百分比。
如果來源帳號中某個 blob 的複製狀態顯示失敗,請調查以下可能原因:
- 確保目標帳號已設定物件複製政策。
- 確認目的地帳戶仍存在。
- 確認目的地容器仍然存在。
- 確認目的地容器未刪除,且未在刪除過程中。 刪除容器最多可能需要 30 秒。
- 確認目的地容器仍在參與物件複寫原則。
- 如果來源 Blob 在寫入作業中使用客戶提供的金鑰進行加密,則物件複寫會失敗。 欲了解更多關於客戶提供金鑰的資訊,請參見
在向 Blob storage 。 - 檢查來源或目的地 Blob 是否已移至封存層。 封存的 Blob 無法透過物件複製來進行複製。 欲了解更多關於封存層的資訊,請參考 Blob 數據的存取層級。
- 確認目的地容器或 Blob 未受到不可變性原則的保護。 容器或 Blob 物件可從其父項繼承不可變性原則。 欲了解更多關於不可變性政策的資訊,請參見不可變儲存體的概覽。
功能支援
啟用 Data Lake Storage Gen2、網路檔案系統(NFS)3.0 協定或 SSH 檔案傳輸協定(SFTP)可能會影響此功能的支援。 如果你啟用了這些功能,請參考Azure 儲存體帳號 中的
計費
設定物件複製(包括啟用變更導流、版本控制及複製政策)完全沒有成本。 然而,物件複製會在對來源帳號與目的帳號進行讀寫交易時產生成本。 從來源帳號複製資料到目的帳號的出口費用也會產生成本,處理變更串流時的讀取費也會產生。
以下是成本明細。 要查詢每個成本組成部分的價格,請參閱 Azure Blob 儲存體 價格。
| 更新來源帳戶中 Blob 的成本 | 複寫目的地帳戶中資料的成本 |
|---|---|
| 寫入作業的交易成本 | 讀取變更摘要記錄的交易成本 |
| Blob 以及每個 blob 版本的的儲存體成本1 | 讀取 Blob 和 Blob 版本的交易成本2 |
| 新增變更摘要記錄的成本 | 寫入 Blob 和 Blob 版本的交易成本2 |
| 涼層和冷層的資料擷取成本 | Blob 以及每個 blob 版本的的儲存體成本1 |
| 網路輸出成本3 |
1 在來源帳戶中,如果某個 blob 或版本的存取層級未變更,則會根據該 blob 及其版本之間唯一的資料區塊計費。 請參閱 Blob 版本設定定價和計費。 在目的地帳戶中,針對某個版本,系統會就該版本的所有區塊向您收費,不論這些區塊是否為唯一。
2 此成本僅包含自上次複製完成後所建立的 blob 版本。
3 物件複寫會將整個版本複製到目的地 (不只是版本的唯一區塊)。 此傳輸會產生網路輸出的成本。 請參考頻寬價格。
秘訣
若要降低意外帳單的風險,請在僅包含少數物件的帳戶中啟用物件複寫。 接著,在實際執行設定中啟用該功能之前,請先測量對成本的影響。