Erstellen und Verwalten von Containerkopieraufträgen in Azure Cosmos DB (Vorschau)
Kopieraufträge helfen bei der Erstellung von Kopien von Containern in Azure Cosmos DB-Konten.
In diesem Artikel wird beschrieben, wie Sie mithilfe von Azure CLI-Befehlen Aufträge für Kopieraufträge erstellen, überwachen und verwalten.
Voraussetzungen
- Sie können Cloud Shell im Portal verwenden, um Containerkopierbefehle auszuführen. Alternativ können Sie die Befehle lokal ausführen. Stellen Sie sicher, dass Sie die Azure CLI auf Ihren Computer heruntergeladen und installiert haben.
- Derzeit wird die Containerkopie nur in diesen Regionen unterstützt. Stellen Sie sicher, dass die Schreibregion Ihres Kontos in dieser Liste aufgeführt ist.
- Installieren Sie die Azure Cosmos DB-Vorschauerweiterung, die die Containerkopierbefehle enthält.
az extension add --name cosmosdb-preview
Festlegen von Shellvariablen
Legen Sie zunächst alle Variablen fest, die jedes einzelne Skript verwendet.
$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 = ""
Leseberechtigung zuweisen
Hinweis
Dieser Schritt ist nicht erforderlich, wenn Sie Daten innerhalb desselben Azure Cosmos DB-Kontos kopieren.
Beim Kopieren von Daten aus dem Container eines Kontos in den Container eines anderen Kontos ist es erforderlich, Lesezugriff auf den Quellcontainer für die Identität des Zielkontos zu gewähren, damit diese den Kopiervorgang ausführen kann. Führen Sie die folgenden Schritte aus, um dem Zielkonto erforderliche Leseberechtigungen zuzuweisen.
Verwenden einer systemseitig verwalteten Identität
- Festlegen des Zielabonnementkontexts
az account set --subscription $destinationSubId
- Hinzufügen der Systemidentität für das Zielkonto
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG $principalId = ($identityOutput | ConvertFrom-Json).principalId
- Festlegen der Standardidentität für das Zielkonto
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
- Festlegen des Quellabonnementkontexts
az account set --subscription $sourceSubId
- Hinzufügen von Rollenzuweisungen für das Quellkonto
# 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
- Zurücksetzen des Zielabonnementkontexts
az account set --subscription $destinationSubId
Verwenden einer benutzerseitig zugewiesenen verwalteten Identität
- Zuweisen einer vom Benutzer zugewiesenen verwalteten Identitätsvariablen
$userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
- Festlegen des Zielabonnementkontexts
az account set --subscription $destinationSubId
- Hinzufügen der vom Benutzer zugewiesenen verwalteten Identität für das Zielkonto
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
- Festlegen der Standardidentität für das Zielkonto
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
- Festlegen des Quellabonnementkontexts
az account set --subscription $sourceSubId
- Hinzufügen von Rollenzuweisungen für das Quellkonto
$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
- Zurücksetzen des Zielabonnementkontexts
az account set --subscription $destinationSubId
Erstellen eines Kopierauftrags
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
Fortschritt überwachen
Überwachen Sie den Status mithilfe des folgenden Befehls.
az cosmosdb copy show `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
- Gesamtanzahl: stellt die Summe der Änderungen (Gesamtdokument + alle neuen Änderungen) im Quellcontainer zu einem bestimmten Zeitpunkt dar.
- Verarbeitete Anzahl: stellt die Summe der Ereignisse dar, die aus dem Änderungsfeed des Quellcontainers stammen und vom Kopierauftrag verarbeitet wurden.
Abschließen eines Kopierauftrags
- Wenn die verarbeitete Anzahl größer oder gleich der Gesamtanzahl wird, deaktivieren Sie alle Aktualisierungen im Quellcontainer, und warten Sie 5 bis 10 Minuten, damit alle verbleibenden Änderungen geleert werden können.
- Führen Sie die Fertigstellungs-API aus, um den Kopierauftrag abzuschließen und Ressourcen freizugeben. Dadurch werden auch eventuell verbliebene Änderungen in den Zielcontainer geschrieben.
az cosmosdb copy complete `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
- Aktualisieren Sie bei Bedarf die Clientanwendungen so, dass sie den neuen Container (Zielcontainer) verwenden.
Festlegen von Shellvariablen
Legen Sie zunächst alle Variablen fest, die jedes einzelne Skript verwendet.
$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceDatabase = ""
$sourceCollection = ""
$destinationDatabase = ""
$destinationCollection = ""
Erstellen eines Kopierauftrags
Erstellen Sie einen Auftrag zum Kopieren einer Auflistung innerhalb einer Azure Cosmos DB-API für das MongoDB-Konto:
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
Hinweis
--job-name
sollte für jeden Auftrag innerhalb eines Kontos eindeutig sein.
Festlegen von Shellvariablen
Legen Sie zunächst alle Variablen fest, die jedes einzelne Skript verwendet.
$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceKeySpace = ""
$sourceTable = ""
$destinationKeySpace = ""
$destinationTable = ""
Erstellen eines Kopierauftrags
Erstellen Sie einen Auftrag, um eine Tabelle in einem Azure Cosmos DB for Apache Cassandra-Konto zu kopieren:
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
Hinweis
--job-name
sollte für jeden Auftrag innerhalb eines Kontos eindeutig sein.
Verwalten von Kopieraufträgen
Überwachen des Status eines Kopierauftrags
Zeigen Sie Fortschritt und Status eines Kopierauftrags an:
az cosmosdb copy show `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Auflisten aller Kopieraufträge, die in einem Konto erstellt wurden
So listen Sie alle Kopieraufträge auf, die in einem Konto erstellt wurden
az cosmosdb copy list `
--resource-group $destinationAccountRG `
--account-name $destinationAccount
Anhalten eines Kopierauftrags
Um einen laufenden Kopierauftrag anzuhalten, können Sie den folgenden Befehl verwenden:
az cosmosdb copy pause `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Fortsetzen eines Kopierauftrags
Um einen angehaltenen Kopierauftrag fortzusetzen, können Sie den folgenden Befehl verwenden:
az cosmosdb copy resume `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Abbrechen eines Kopierauftrags
Um einen laufenden Kopierauftrag abzubrechen, können Sie den folgenden Befehl verwenden:
az cosmosdb copy cancel `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Anfordern von Unterstützung bei Problemen mit dem Kopieren
Erstellen Sie bei Problemen im Zusammenhang mit einem Kopierauftrag eine neue Supportanfrage über das Azure-Portal. Legen Sie den Problemtyp auf „Datenmigration“ und den Problemuntertyp auf „Containerkopie“ fest.
Nächste Schritte
- Weitere Informationen zu Containerkopieraufträgen finden Sie unter Kopieraufträge.