建立和管理 Azure Cosmos DB (預覽版) 中的容器複製作業
複製作業 有助於在 Azure Cosmos DB 帳戶中建立容器的複本。
本文說明如何使用 Azure CLI 命令來建立、監視及管理複製作業。
必要條件
- 您可以使用入口網站 Cloud Shell 來執行容器複製命令。 或者,您可以在本機執行命令,但請確定您已在電腦上下載和安裝 Azure CLI。
- 僅這些區域目前支援容器複製。 請確定您的帳戶寫入區域屬於此清單。
- 安裝包含容器複製命令的 Azure Cosmos DB 預覽延伸模組。
az extension add --name cosmosdb-preview
設定殼層變數
首先,設定個別指令碼將使用的所有變數。
$sourceSubId = "<source-subscription-id>"
$destinationSubId = "<destination-subscription-id>"
$sourceAccountRG = "<source-resource-group-name>"
$destinationAccountRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceDatabase = ""
$sourceContainer = ""
$destinationDatabase = ""
$destinationContainer = ""
指派讀取權限
注意
如果您要在相同的 Azure Cosmos DB 帳戶內複製數據,則不需要此步驟。
將數據從某個帳戶的容器複製到另一個帳戶的容器時,必須提供來源容器的讀取許可權給目的地帳戶的身分識別,才能執行複製作業。 請遵循下列步驟,將必要的讀取權限指派給目的地帳戶。
使用系統受控識別
- 設定目標訂閱內容
az account set --subscription $destinationSubId
- 在目的地帳戶上新增系統身分識別
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG $principalId = ($identityOutput | ConvertFrom-Json).principalId
- 在目的地帳戶上設定預設身分識別
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
- 設定來源訂閱內容
az account set --subscription $sourceSubId
- 在來源帳戶上新增角色指派
# Read-only access role $roleDefinitionId = "00000000-0000-0000-0000-000000000001" az cosmosdb sql role assignment create --account-name $sourceAccount --resource-group $sourceAccountRG --role-definition-id $roleDefinitionId --scope "/" --principal-id $principalId
- 重設目標訂閱內容
az account set --subscription $destinationSubId
使用使用者指派的受控識別
- 指派使用者指派的受控識別變數
$userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
- 設定目標訂閱內容
az account set --subscription $destinationSubId
- 在目的地帳戶上新增使用者指派的受控識別
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
- 在目的地帳戶上設定預設身分識別
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
- 設定來源訂閱內容
az account set --subscription $sourceSubId
- 在來源帳戶上新增角色指派
$roleDefinitionId = "00000000-0000-0000-0000-000000000001" # Read-only access role az cosmosdb sql role assignment create --account-name $sourceAccount --resource-group $sourceAccountRG --role-definition-id $roleDefinitionId --scope "/" --principal-id $principalId
- 重設目標訂閱內容
az account set --subscription $destinationSubId
建立複製作業
az cosmosdb copy create `
--resource-group $destinationAccountRG `
--job-name $jobName `
--dest-account $destinationAccount `
--src-account $sourceAccount `
--dest-nosql database=$destinationDatabase container=$destinationContainer `
--src-nosql database=$sourceDatabase container=$sourceContainer
--mode Online
監視進度
使用下列命令監視進度。
az cosmosdb copy show `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
- 總計計數 – 它代表來源容器中任何指定時間的變更總數(文件總數 + 任何新變更)。
- 已處理的計數 – 代表來自來源容器變更摘要的事件總數,這些事件已由複製作業處理。
完成複製作業
- 當已處理的計數大於或等於總計計數時,請關閉來源容器上的任何更新,並等候 5-10 分鐘以排清剩餘的任何變更。
- 執行完成 API 以完成複製作業並釋放計算資源,這也會將剩餘的變更(如果有的話)寫入目的地容器。
az cosmosdb copy complete `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
- 視需要更新用戶端應用程式以開始使用新的 (目的地) 容器。
設定殼層變數
首先,設定個別指令碼將使用的所有變數。
$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceDatabase = ""
$sourceCollection = ""
$destinationDatabase = ""
$destinationCollection = ""
建立複製作業
建立作業以在適用於 MongoDB 的 Azure Cosmos DB API 帳戶內複製集合:
az cosmosdb copy create `
--resource-group $destinationRG `
--job-name $jobName `
--dest-account $destinationAccount `
--src-account $sourceAccount `
--dest-mongo database=$destinationDatabase collection=$destinationCollection `
--src-mongo database=$sourceDatabase collection=$sourceCollection
注意
帳戶內每個作業的 --job-name
應是唯一的。
設定殼層變數
首先,設定個別指令碼將使用的所有變數。
$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceKeySpace = ""
$sourceTable = ""
$destinationKeySpace = ""
$destinationTable = ""
建立複製作業
建立作業以在 Azure Cosmos DB for Apache Cassandra 帳戶內複製數據表:
az cosmosdb copy create `
--resource-group $destinationRG `
--job-name $jobName `
--dest-account $destinationAccount `
--src-account $sourceAccount `
--dest-cassandra keyspace=$destinationKeySpace table=$destinationTable `
--src-cassandra keyspace=$sourceKeySpace table=$sourceTable
注意
帳戶內每個作業的 --job-name
應是唯一的。
管理複製作業
監視複製作業的進度
檢視複製作業的進度和狀態:
az cosmosdb copy show `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
列出在帳戶中建立的所有複製作業
若要列出在帳戶中建立的所有複製作業:
az cosmosdb copy list `
--resource-group $destinationAccountRG `
--account-name $destinationAccount
暫停複製作業
若要暫停進行中的複製作業,您可以使用 命令:
az cosmosdb copy pause `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
繼續複製作業
若要繼續進行中的複製作業,您可以使用 命令:
az cosmosdb copy resume `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
取消複製作業
若要取消進行中的複製作業,您可以使用 命令:
az cosmosdb copy cancel `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
取得複製問題的支援
如需與複製作業相關的問題,請從 Azure 入口網站 提出新的支援要求。 請將 [問題類型] 設定為 [資料移轉],並將 [問題子類型] 設定為 [容器複製]。
下一步
- 如需容器複製作業的詳細資訊,請參閱 複製作業。