Freigeben über


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

  1. Festlegen des Zielabonnementkontexts
    az account set --subscription $destinationSubId
    
  2. Hinzufügen der Systemidentität für das Zielkonto
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG
    $principalId = ($identityOutput | ConvertFrom-Json).principalId
    
  3. Festlegen der Standardidentität für das Zielkonto
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
    
  4. Festlegen des Quellabonnementkontexts
    az account set --subscription $sourceSubId
    
  5. 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
    
  6. Zurücksetzen des Zielabonnementkontexts
    az account set --subscription $destinationSubId
    

Verwenden einer benutzerseitig zugewiesenen verwalteten Identität

  1. Zuweisen einer vom Benutzer zugewiesenen verwalteten Identitätsvariablen
    $userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
    
  2. Festlegen des Zielabonnementkontexts
    az account set --subscription $destinationSubId
    
  3. 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
    
  4. Festlegen der Standardidentität für das Zielkonto
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
    
  5. Festlegen des Quellabonnementkontexts
    az account set --subscription $sourceSubId
    
  6. 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
    
  7. 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
  1. Gesamtanzahl: stellt die Summe der Änderungen (Gesamtdokument + alle neuen Änderungen) im Quellcontainer zu einem bestimmten Zeitpunkt dar.
  2. Verarbeitete Anzahl: stellt die Summe der Ereignisse dar, die aus dem Änderungsfeed des Quellcontainers stammen und vom Kopierauftrag verarbeitet wurden.

Abschließen eines Kopierauftrags

  1. 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.
  2. 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
  1. 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.