物件複寫會以非同步方式複製來源儲存體帳戶與目的地帳戶之間的區塊 Blob。 當設定物件複寫時,您會建立複寫原則,其指定來源儲存體帳戶和目的地帳戶。 複寫原則包含一或多個規則,其指定來源容器和目的地容器,並指出將複寫來源容器中的哪些區塊 Blob。 如需物件複寫的詳細資訊,請參閱區塊 Blob 的物件複寫。
本文說明如何使用 Azure 入口網站、PowerShell 或 Azure CLI 來設定物件複寫原則。 您也可以使用其中一個 Azure 儲存體資源提供者用戶端程式庫來設定物件複寫。
必要條件
在您設定物件複寫之前,請先建立來源和目的地儲存體帳戶 (如果尚未建立)。 來源和目的地帳戶可以是一般用途 v2 儲存體帳戶或進階區塊 Blob 帳戶。 如需詳細資訊,請參閱建立 Azure 儲存體帳戶。
物件複寫需要為來源和目的地帳戶啟用 Blob 版本設定,而且已為來源帳戶啟用 Blob 變更摘要。 若要深入瞭解 Blob 版本設定,請參閱 Blob 版本設定。 若要深入瞭解變更摘要,請參閱 Azure Blob 儲存體中的變更摘要支援。 請記住,啟用這些功能可能會導致額外成本。
若要設定儲存體帳戶的物件複寫原則,您必須將 Azure Resource Manager 參與者角色指派給儲存體帳戶層級或更高的層級。 如需詳細資訊,請參閱 Azure 角色型存取控制 (Azure RBAC) 文件中的 Azure 內建角色。
在已啟用階層命名空間的帳戶中,尚未支援物件複寫。
如果您可以存取來源和目的地儲存體帳戶,則可以在這兩個帳戶上設定物件複寫原則。 下列範例示範如何使用 Azure 入口網站、PowerShell 或 Azure CLI 來設定物件複寫。
當您在 Azure 入口網站中設定物件複寫時,您只需要設定來源帳戶的原則。 當您針對來源帳戶設定原則之後,Azure 入口網站會自動在目的地帳戶上建立原則。
若要在 Azure 入口網站中建立複寫原則,請遵循下列步驟:
巡覽至 Azure 入口網站的 [來源儲存體帳戶]。
在 [資料管理] 下,選取 [物件複寫]。
選取 [建立複寫規則]。
選取 [目的地訂用帳戶] 和 [目的地儲存體帳戶]。
在 [容器配對詳細資料] 區段中,從來源帳戶中選取來源容器,並從目的地帳戶中選取目的地容器。 您可以從 Azure 入口網站中的每個複寫原則建立最多 10 組容器配對。 若要設定超過 10 組容器配對 (最多 1000 組),請參閱使用 JSON 檔案設定物件複寫。
下圖顯示一組複寫規則。
如有需要,請指定一或多個篩選,以便僅複製符合前置詞模式的 Blob。 例如,如果指定前置詞 b
,則只會複寫名稱開頭為該字母的 Blob。 您可指定虛擬目錄作為前置詞的一部分。 您可以新增最多五個前置詞相符項目。 前置詞字串不支援萬用字元。
下圖顯示篩選會限制哪些 Blob 符合複寫規則並接受複製。
根據預設,複製範圍會設定為只複製新的物件。 若要複製容器中的所有物件,或從自訂日期和時間開始複製物件,請選取 [變更] 連結,並設定容器配對的複製範圍。
下圖顯示自訂複製範圍,其會從指定的日期和時間開始複製物件。
選取 [儲存並套用] 以建立複寫原則,並開始複寫資料。
設定物件複寫之後,Azure 入口網站會顯示複寫原則和規則,如下圖所示。
若要使用 PowerShell 建立複寫原則,請先安裝版本 2.5.0 或更新版本的 Az.Storage PowerShell 模組。 如需如何安裝 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 or-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 儲存體會在建立新原則時設定原則識別碼。 若要將其他規則新增至原則,請呼叫 az storage account or-policy rule add 並提供原則識別碼。
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
接下來,使用原則識別碼,在來源帳戶上建立原則。
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 儲存體將會定義原則識別碼。
建立 JSON 檔案來定義複寫原則的簡單方式,是先在 Azure 入口網站的兩個儲存體帳戶之間建立測試複寫原則。 然後,您可以下載複寫規則,並視需要修改 JSON 檔案。
在 Azure 入口網站中,瀏覽至目的地帳戶的物件複寫設定。
選取 [上傳複製規則]。
上傳 JSON 檔案。 Azure 入口網站會顯示將建立的原則和規則,如下圖所示。
選取 [上傳] 以在目的地帳戶上建立複寫原則。
然後,您可以下載 JSON 檔案,其中包含可提供給其他使用者以設定來源帳戶的原則定義。 若要下載此 JSON 檔案,請遵循下列步驟:
在 Azure 入口網站中,瀏覽至目的地帳戶的物件複寫設定。
選取您要下載之原則旁的 [更多] 按鈕,然後選取 [下載規則],如下圖所示。
將 JSON 檔案儲存至您的本機電腦,以與其他使用者共用,藉此設定來源帳戶的原則。
所下載 JSON 檔案包含 Azure 儲存體為目的地帳戶上原則建立的原則識別碼。 您必須使用相同原則識別碼來設定來源帳戶的物件複寫。
請記住,上傳 JSON 檔案以透過 Azure 入口網站建立目的地帳戶的複寫原則,並不會自動在來源帳戶中建立相同的原則。 在 Azure 儲存體開始複寫物件之前,另一位使用者必須在來源帳戶上建立原則。
若要從 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 or-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 or-policy create 命令,並參考 policy.json 檔案。 請記得以自有值來取代角括弧中的值和檔案路徑:
az storage account or-policy create \
-resource-group <resource-group> \
--source-account <source-account-name> \
--policy @policy.json
檢查 Blob 的複寫狀態
您可以使用 Azure 入口網站、PowerShell 或 Azure CLI 檢查來源帳戶中 Blob 的複寫狀態。 在複寫完成或失敗之前,不會填入物件複寫屬性。
若要在 Azure 入口網站的來源帳戶中檢查 Blob 的複寫狀態,請遵循下列步驟:
- 巡覽至 Azure 入口網站的 [來源帳戶]。
- 找出包含來源 Blob 的容器。
- 選取 Blob 以顯示其屬性。 如果已成功複寫 Blob,您會在 [物件複寫] 區段中看到狀態設定為 [完成]。 此外,也會列出複寫原則識別碼和負責管理此容器物件複寫規則的識別碼。
若要使用 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 的複寫狀態,請取得物件複寫 status 屬性的值,如下列範例所示:
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>
下一步