物件複寫會以非同步方式複製來源儲存體帳戶與目的地帳戶之間的區塊 Blob。 當您設定物件複寫時,您會建立複寫原則,指定來源儲存體帳戶和目的地帳戶。 複寫原則包含一或多個規則,可指定來源容器和目的地容器,並指出將複寫來源容器中的哪些區塊 Blob。 如需物件複寫的詳細資訊,請參閱區塊 Blob 的物件複寫。
本文說明如何透過 Azure 入口網站、PowerShell 或 Azure CLI 來設定物件複製政策。 你也可以使用 Azure Storage 資源提供者的客戶端函式庫來設定物件複製。
先決條件
在設定物件複製之前,如果來源和目的地儲存帳號還不存在,請先建立它們。 來源帳號和目的地帳號可以是通用的 v2 儲存帳號,也可以是高級區塊 blob 帳號。 如需詳細資訊,請參閱 建立 Azure 儲存體帳戶。
物件複製需要來源帳號和目的帳號都啟用 blob 版本控制,且來源帳號也啟用 blob 變更資訊流。 想了解更多關於 blob 版本管理的資訊,請參見 Blob 版本管理。 想了解更多關於變更資訊流的資訊,請參閱 Azure Blob Storage 中的變更資訊流支援。 請注意,啟用這些功能可能會產生額外費用。
若要為儲存帳號設定物件複製政策,您必須被指派 Azure 資源管理員 貢獻 者角色,該角色的範圍與儲存帳號相同或更高。 欲了解更多資訊,請參閱 Azure 角色基礎存取控制(Azure RBAC)文件中的 Azure 內建角色 。
已啟用階層式命名空間的帳戶尚不支援物件複寫。
如果你同時擁有來源和目的地儲存帳號的存取權,就可以在兩個帳號上設定物件複製政策。 以下範例展示了如何使用 Azure 入口網站、PowerShell 或 Azure CLI 來設定物件複製。
當你在 Azure 入口網站設定物件複製時,只需要在來源帳號上設定政策。 Azure 入口網站會在你為來源帳號設定後,自動建立目標帳號的政策。
要在 Azure 入口網站建立複製政策,請依照以下步驟操作:
在 Azure 入口網站中導航至來源儲存體帳戶。
在 [數據管理] 底下,選取 [對象複寫]。
選擇 建立複製規則。
選擇目的地訂閱和儲存帳號。
在 容器對詳細資料 區塊中,從來源帳戶選擇一個來源容器,從目的帳戶選擇一個目的地容器。 你可以從 Azure 入口網站為每個複寫策略建立最多 10 對容器。 若要配置超過 10 對容器(最多 1000 對),請參見 「使用 JSON 檔案配置物件複製」。
下圖展示了一組複製規則。
如有需要,可指定一個或多個濾波器,只複製與前綴模式相符的斑點。 例如,如果你指定一個前綴 b,只有名字以該字母開頭的斑點才會被複製。 你可以在前綴中指定虛擬目錄。 你最多可以新增五個前綴配對。 前綴字串不支援萬用字元。
下圖顯示了限制複製規則中複製哪些斑點的過濾器。
預設情況下,複製範圍設定為只複製新物件。 若要複製容器中的所有物件,或從自訂日期和時間開始複製物件,請選擇 變更 連結並設定容器對的複製範圍。
下圖展示了自訂複製範圍,從指定日期和時間開始複製物件。
選擇 儲存並套用 以建立複製政策並開始複製資料。
設定好物件複製後,Azure 入口網站會顯示複製政策與規則,如下圖所示。
要用 PowerShell 建立複寫政策,首先安裝 Az.Storage PowerShell 模組的 2.5.0 或更新版本。 如需如何安裝 Azure PowerShell 的詳細資訊,請參閱使用 PowerShellGet 安裝 Azure PowerShell。
以下範例說明如何先在目的帳號建立複製政策,再在來源帳號建立。 請記得以自有值來取代角括弧中的值:
# Sign in to your Azure account.
Connect-AzAccount
# Set variables.
$rgName = "<resource-group>"
$srcAccountName = "<source-storage-account>"
$destAccountName = "<destination-storage-account>"
$srcContainerName1 = "source-container1"
$destContainerName1 = "dest-container1"
$srcContainerName2 = "source-container2"
$destContainerName2 = "dest-container2"
# Enable blob versioning and change feed on the source account.
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-EnableChangeFeed $true `
-IsVersioningEnabled $true
# Enable blob versioning on the destination account.
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $destAccountName `
-IsVersioningEnabled $true
# List the service properties for both accounts.
Get-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName
Get-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $destAccountName
# Create containers in the source and destination accounts.
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $srcAccountName |
New-AzStorageContainer $srcContainerName1
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $destAccountName |
New-AzStorageContainer $destContainerName1
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $srcAccountName |
New-AzStorageContainer $srcContainerName2
Get-AzStorageAccount -ResourceGroupName $rgName -StorageAccountName $destAccountName |
New-AzStorageContainer $destContainerName2
# Define replication rules for each container.
$rule1 = New-AzStorageObjectReplicationPolicyRule -SourceContainer $srcContainerName1 `
-DestinationContainer $destContainerName1 `
-PrefixMatch b
$rule2 = New-AzStorageObjectReplicationPolicyRule -SourceContainer $srcContainerName2 `
-DestinationContainer $destContainerName2 `
-MinCreationTime 2021-09-01T00:00:00Z
# Create the replication policy on the destination account.
$destPolicy = Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $destAccountName `
-PolicyId default `
-SourceAccount $srcAccountName `
-Rule $rule1,$rule2
# Create the same policy on the source account.
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-InputObject $destPolicy
要用 Azure CLI 建立複寫政策,請先安裝 Azure CLI 2.11.1 或更新版本。 如需詳細資訊,請參閱開始使用 Azure CLI。
接著,在來源與目的地儲存帳號啟用 blob 版本控制,並在來源帳號啟用變更資訊流,方法是呼叫 az storage account 的 blob-service-properties update 指令。 請記得以自有值來取代角括弧中的值:
az login
az storage account blob-service-properties update \
--resource-group <resource-group> \
--account-name <source-storage-account> \
--enable-versioning \
--enable-change-feed
az storage account blob-service-properties update \
--resource-group <resource-group> \
--account-name <dest-storage-account> \
--enable-versioning
在各自的儲存帳號中建立來源和目的地容器。
az storage container create \
--account-name <source-storage-account> \
--name source-container-1 \
--auth-mode login
az storage container create \
--account-name <source-storage-account> \
--name source-container-2 \
--auth-mode login
az storage container create \
--account-name <dest-storage-account> \
--name dest-container-1 \
--auth-mode login
az storage container create \
--account-name <dest-storage-account> \
--name dest-container-2 \
--auth-mode login
透過呼叫 az storage account 或 policy create 來建立新的複製政策及目標帳號上的相關規則。
az storage account or-policy create \
--account-name <dest-storage-account> \
--resource-group <resource-group> \
--source-account <source-storage-account> \
--destination-account <dest-storage-account> \
--source-container source-container-1 \
--destination-container dest-container-1 \
--min-creation-time '2021-09-01T00:00:00Z' \
--prefix-match a
Azure Storage 在新政策建立時會設定該政策的 ID。 若要在政策中新增更多規則,請呼叫 az storage account 或 policy rule add 並提供政策 ID。
az storage account or-policy rule add \
--account-name <dest-storage-account> \
--resource-group <resource-group> \
--source-container source-container-2 \
--destination-container dest-container-2 \
--policy-id <policy-id> \
--prefix-match b
接著,利用策略 ID 在來源帳號建立策略。
az storage account or-policy show \
--resource-group <resource-group> \
--account-name <dest-storage-account> \
--policy-id <policy-id> |
az storage account or-policy create --resource-group <resource-group> \
--account-name <source-storage-account> \
--policy "@-"
如果你沒有來源儲存帳號的權限,或想使用超過 10 對容器,那你可以在目標帳號設定物件複製,並提供包含政策定義的 JSON 檔案給其他使用者,讓他在來源帳號建立相同政策。 例如,如果來源帳號與目標帳號屬於不同的 Microsoft Entra 租戶,你可以用這種方法來設定物件複製。
關於如何撰寫包含政策定義的 JSON 檔案,請參見 政策定義檔案。
本節範例展示了如何在目標帳號設定物件複製政策,然後取得該政策的 JSON 檔案,供其他使用者用來設定來源帳號的政策。
要在 Azure 入口網站以 JSON 檔案設定目標帳號的物件複寫,請依照以下步驟操作:
建立一個本地 JSON 檔案,定義目標帳號的複製政策。 將 policyId 欄位設為 預設 ,讓 Azure Storage 會定義政策 ID。
建立定義複製政策的 JSON 檔案的簡單方法是先在 Azure 入口網站的兩個儲存帳號之間建立測試複製策略。 接著你可以下載複製規則,並根據需要修改 JSON 檔案。
在 Azure 入口網站中,進入目的地帳號的 物件複製 設定。
選擇 上傳複製規則。
上傳 JSON 檔案。 Azure 入口網站會顯示將建立的政策與規則,如下圖所示。
選擇 上傳 以建立目標帳號的複製政策。
接著你可以下載包含政策定義的 JSON 檔案,提供給其他使用者以設定原始帳號。 要下載此 JSON 檔案,請依照以下步驟操作:
在 Azure 入口網站中,進入目的地帳號的 物件複製 設定。
選擇您想下載的政策旁的 「更多 」按鈕,然後選擇 下載規則,如下圖所示。
把 JSON 檔案存到你本地的電腦,讓另一位使用者在原始帳號上設定政策。
下載的 JSON 檔案包含 Azure Storage 為目標帳號政策建立的政策 ID。 你必須使用相同的政策 ID 來設定來源帳號的物件複製。
請注意,透過 Azure 入口網站上傳 JSON 檔案來建立目的帳號的複製政策,並不會自動在來源帳號建立相同的政策。 必須先在來源帳號建立政策,Azure Storage 才會開始複製物件。
若要從 PowerShell 下載包含目標帳號複製政策定義的 JSON 檔案,請呼叫 Get-AzStorageObjectReplicationPolicy 指令以回傳該政策。 接著將政策轉換成 JSON,並儲存為本地檔案,如下範例所示。 記得將角括號內的數值和檔案路徑換成你自己的數值:
$rgName = "<resource-group>"
$destAccountName = "<destination-storage-account>"
$destPolicy = Get-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $destAccountName
$destPolicy | ConvertTo-Json -Depth 5 > c:\temp\json.txt
要使用 JSON 檔案在 PowerShell 的來源帳號上定義複製策略,請取得本地檔案,並將 JSON 轉換成物件。 接著呼叫 Set-AzStorageObjectReplicationPolicy 指令,在來源帳號上設定該政策,如下範例所示。
執行範例時,務必將參數設 -ResourceGroupName 為來源帳號的資源群組, -StorageAccountName 並將參數設為來源帳號名稱。 另外,記得用你自己的數值替換角括號和檔案路徑中的數值:
$object = Get-Content -Path C:\temp\json.txt | ConvertFrom-Json
Set-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-PolicyId $object.PolicyId `
-SourceAccount $object.SourceAccount `
-DestinationAccount $object.DestinationAccount `
-Rule $object.Rules
若要將目的帳號的複寫政策定義寫成 Azure CLI 的 JSON 檔案,呼叫 az storage account 或-policy show 指令,並輸出到檔案。
以下範例將政策定義寫入名為 policy.json的 JSON 檔案。 記得將角括號內的數值和檔案路徑換成你自己的數值:
az storage account or-policy show \
--account-name <dest-account-name> \
--policy-id <policy-id> > policy.json
若要使用 JSON 檔案在來源帳號上以 Azure CLI 設定複製政策,請呼叫 az storage account 或 policy create 指令並引用 policy.json 檔案。 記得將角括號內的數值和檔案路徑換成你自己的數值:
az storage account or-policy create \
-resource-group <resource-group> \
--source-account <source-account-name> \
--policy @policy.json
啟用複製指標
你可以在新舊物件複製政策上啟用複製指標。 開始觀察這些指標可能需要幾分鐘。
你可以使用新的 Object Replication 面板從 Metrics 欄位中啟用度量值,或者在 OR 政策列的「…」中編輯政策的 編輯規則 區段來啟用它。
啟用指標支援於 API 版本 2021-08-01 及以上。 你可以把新的指標欄位加入複製政策。 樣本:
{
"sourceAccount": "<source-account-name>",
"destinationAccount": "<destination-account-name>",
"metrics":
{
"enabled": true
},
"rules":
[
{
"ruleId": "<rule-id>",
"sourceContainer": "<source-container-name>",
"destinationContainer": "<destination-container-name>"
}
]
}
如果你在配置為覆蓋現有數據的政策上啟用度量,當政策處於列出初始階段時,可能會觀察到數量逐漸增加。 完成後,複製將開始。
查看複製指標
你可以點擊指標欄中的「檢視」連結來查看監控指標。
若要在 Azure Monitor 中進一步查看指標,請點擊指標的圖表。 這會引導你進入 Azure Monitor 的 Metrics 檢視,裡面有更多篩選功能。
檢查 blob 的複製狀態
你可以使用 Azure 入口網站、PowerShell 或 Azure CLI 查詢來源帳號中 blob 的複製狀態。 物件複製屬性直到複製完成或失敗後才會被填入。
要在 Azure 入口網站檢查來源帳號中 blob 的複製狀態,請依照以下步驟操作:
- 在 Azure 入口網站中導覽至來源帳號。
- 找到包含源塊的容器。
- 選擇 blob 來顯示它的屬性。 如果 blob 已經成功複製,你會在 物件複製 區看到狀態被設定為 完成。 複製政策 ID 以及該容器物件複製規則的 ID 也被列出。
要用 PowerShell 檢查來源帳號中 blob 的複製狀態,請取得物件複製 ReplicationStatus 屬性的值,如下範例所示。 請記得以自有值來取代角括弧中的值:
$ctxSrc = (Get-AzStorageAccount -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName).Context
$blobSrc = Get-AzStorageBlob -Container $srcContainerName1 `
-Context $ctxSrc `
-Blob <blob-name>
$blobSrc.BlobProperties.ObjectReplicationSourceProperties[0].Rules[0].ReplicationStatus
要檢查來源帳號中 Azure CLI 中 blob 的複製狀態,請取得物件複製 狀態 屬性的值,如下範例所示:
az storage blob show \
--account-name <source-account-name> \
--container-name <source-container-name> \
--name <source-blob-name> \
--query 'objectReplicationSourceProperties[].rules[].status' \
--output tsv \
--auth-mode login
如果來源帳戶中的 Blob 複寫狀態顯示為失敗,請調查下列可能的原因:
- 確定已在目的地帳戶上設定物件複寫原則。
- 確認目的地容器仍然存在。
- 如果已使用客戶提供的金鑰來加密來源 Blob 作為寫入作業的一部分,則物件複寫將會失敗。 如需客戶提供金鑰的詳細資訊,請參閱針對針對 Blob 儲存體的要求提供加密金鑰。
移除複製策略
要移除複製政策及其相關規則,請使用 Azure 入口網站、PowerShell 或 CLI。
要移除 Azure 入口網站中的複製策略,請遵循以下步驟:
- 在 Azure 入口網站中導航到來源儲存帳號。
- 在 設定中,選擇 物件複製。
- 選擇政策名稱旁的更多 按鈕。
- 選擇 刪除規則。
要移除複製策略,請同時從來源帳號和目的帳號刪除該政策。 刪除該政策也會刪除所有相關的規則。
# Remove the policy from the destination account.
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $destAccountName `
-PolicyId $destPolicy.PolicyId
# Remove the policy from the source account.
Remove-AzStorageObjectReplicationPolicy -ResourceGroupName $rgName `
-StorageAccountName $srcAccountName `
-PolicyId $destPolicy.PolicyId
要移除複製策略,請同時從來源帳號和目的帳號刪除該政策。 刪除該政策也會刪除所有相關的規則。
az storage account or-policy delete \
--policy-id <policy-id> \
--account-name <source-storage-account> \
--resource-group <resource-group>
az storage account or-policy delete \
--policy-id <policy-id> \
--account-name <dest-storage-account> \
--resource-group <resource-group>
N/A
重建物件複製政策時的行為
當物件複製政策被刪除並在同一來源與目的地容器對上重新建立時,Azure 會將新政策視為完全獨立的複製關係。 以下行為將適用:
重新建立物件複製政策後的複製行為
政策重新建立後,Azure 會再次嘗試對符合資格的 blob 進行複製,結果取決於來源帳號是否有 blob 版本歷史:
後續步驟