Creare e gestire processi di copia del contenitore in Azure Cosmos DB (anteprima)

I lavori di copia Copy consentono di creare copie di contenitori negli account Azure Cosmos DB.

Questo articolo descrive come creare, monitorare e gestire processi di copia usando i comandi di interfaccia della riga di comando di Azure.

Prerequisiti

  • È possibile usare il portale Cloud Shell per eseguire i comandi di copia del contenitore. In alternativa, è possibile eseguire i comandi in locale. Assicurarsi di avere installato interfaccia della riga di comando di Azure nel computer.
  • Attualmente, la copia del contenitore è supportata solo in queste aree. Assicurarsi che l'area di scrittura del proprio account appartenga a questo elenco.
  • Installare l'estensione di anteprima Azure Cosmos DB, che contiene i comandi di copia del contenitore.
    az extension add --name cosmosdb-preview
    

Impostare le variabili della shell

Innanzitutto, impostare tutte le variabili usate da ogni singolo script.

$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 = ""

Assegnare l'autorizzazione di lettura

Annotazioni

Questo passaggio non è obbligatorio se si copiano dati all'interno dello stesso account Azure Cosmos DB.

Durante la copia dei dati da un contenitore di un account al contenitore di un altro account, è necessario concedere l'accesso in lettura per il contenitore di origine all'identità dell'account di destinazione. Seguire questa procedura per assegnare l'autorizzazione di lettura necessaria all'account di destinazione.

Uso dell'identità gestita dal sistema

  1. Impostare il contesto della sottoscrizione di destinazione:
    az account set --subscription $destinationSubId
    
  2. Aggiungere l'identità di sistema nell'account di destinazione:
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG
    $principalId = ($identityOutput | ConvertFrom-Json).principalId
    
  3. Impostare l'identità predefinita nell'account di destinazione:
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
    
  4. Impostare il contesto della sottoscrizione di origine:
    az account set --subscription $sourceSubId
    
  5. Aggiungere un'assegnazione di ruolo nell'account di origine:
    # 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. Reimpostare il contesto della sottoscrizione di destinazione:
    az account set --subscription $destinationSubId
    

Uso dell'identità gestita assegnata dall'utente

  1. Assegnare una variabile di identità gestita assegnata dall'utente:
    $userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
    
  2. Impostare il contesto della sottoscrizione di destinazione:
    az account set --subscription $destinationSubId
    
  3. Aggiungere un'identità gestita assegnata dall'utente nell'account di destinazione:
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId
    $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
    
  4. Impostare l'identità predefinita nell'account di destinazione:
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
    
  5. Impostare il contesto della sottoscrizione di origine:
    az account set --subscription $sourceSubId
    
  6. Aggiungere un'assegnazione di ruolo nell'account di origine:
    $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. Reimpostare il contesto della sottoscrizione di destinazione:
    az account set --subscription $destinationSubId
    

Creare un'attività di copia

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

Monitorare lo stato di avanzamento

Monitorare lo stato di avanzamento usando questo comando:

az cosmosdb copy show `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName
  • Il conteggio totale rappresenta il numero totale di modifiche (documento totale + eventuali nuove modifiche) nel contenitore di origine in qualsiasi momento.
  • Conteggio elaborato rappresenta il numero totale di eventi provenienti dal feed di modifiche del contenitore di origine elaborati dal processo di copia.

Completare il processo di copia

  1. Quando il conteggio elaborato diventa maggiore o uguale al conteggio totale, disattivare tutti gli aggiornamenti nel contenitore di origine e attendere 5-10 minuti per scaricare eventuali modifiche rimanenti.
  2. Eseguire l'API di completamento per completare il processo di copia e liberare risorse di calcolo, che scrive anche le modifiche rimanenti (se presenti) nel contenitore di destinazione.
    az cosmosdb copy complete `
        --resource-group $destinationAccountRG `
        --account-name $destinationAccount `
        --job-name $jobName
  1. Aggiornare le applicazioni client per iniziare a usare il nuovo contenitore (destinazione) se necessario.

Impostare le variabili della shell

Innanzitutto, impostare tutte le variabili usate da ogni singolo script.

$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceDatabase = ""
$sourceCollection = ""
$destinationDatabase = ""
$destinationCollection = ""

Creare un'attività di copia

Creare un processo per copiare una raccolta all'interno di un account API Azure Cosmos DB per MongoDB:

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 

Annotazioni

--job-name deve essere univoco per ogni processo all'interno di un account.

Impostare le variabili della shell

Innanzitutto, impostare tutte le variabili usate da ogni singolo script.

$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceKeySpace = ""
$sourceTable = ""
$destinationKeySpace = ""
$destinationTable = ""

Creare un'attività di copia

Creare un processo per copiare una tabella all'interno di un Azure Cosmos DB per l'account 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 

Annotazioni

--job-name deve essere univoco per ogni processo all'interno di un account.

Gestione dei processi di copia

Monitorare lo stato di avanzamento di un processo di copia

Visualizza l'avanzamento e lo stato di un processo di copia:

az cosmosdb copy show `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName

Elenca tutti i processi di copia creati in un account

Per elencare tutti i processi di copia creati in un account:

az cosmosdb copy list `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount

Sospendere un processo di copia

Per sospendere un processo di copia in corso, è possibile usare il comando :

az cosmosdb copy pause `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName

Riprendere un'operazione di copia

Per riprendere un processo di copia in corso, è possibile usare questo comando:

az cosmosdb copy resume `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName

Annullare un'operazione di copia

Per annullare un processo di copia in corso, è possibile usare questo comando:

az cosmosdb copy cancel `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName

Ottenere supporto per i problemi di copia

Per i problemi relativi a un processo di copia, generare un Nuova richiesta di supporto dal portale di Azure. Impostare il tipo di problema come Migrazione dei dati e il sottotipo di problema come copia del contenitore.

Passo successivo

  • Per ulteriori informazioni sui processi di copia dei contenitori, vedere Processi di copia.