Criar e gerenciar trabalhos de cópia de contêiner no Azure Cosmos DB (versão prévia)

Copias de trabalhos ajudam a criar cópias de contêineres em contas do Azure Cosmos DB.

Este artigo descreve como criar, monitorar e gerenciar trabalhos de cópia usando comandos da CLI do Azure.

Pré-requisitos

  • Você pode usar o portal Cloud Shell para executar comandos de cópia de contêiner. Como alternativa, você pode executar os comandos localmente; certifique-se de ter a CLI do Azure baixada e instalada em seu computador.
  • Atualmente, só há suporte para cópia de contêiner nessas regiões. Verifique se a região de gravação da sua conta pertence a essa lista.
  • Instale a extensão do Azure Cosmos DB versão prévia que contém os comandos de cópia de contêiner.
    az extension add --name cosmosdb-preview
    

Definir variáveis de shell

Primeiro, defina todas as variáveis que cada script individual usará.

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

Atribuir permissão de leitura

Observação

Essa etapa não é necessária se você estiver copiando dados dentro da mesma conta do Azure Cosmos DB.

Ao copiar dados do contêiner de uma conta para o contêiner de outra conta, é necessário conceder acesso de leitura do contêiner de origem à identidade da conta de destino para executar a operação de cópia. Siga as etapas abaixo para atribuir a permissão de leitura necessária à conta de destino.

Uso da identidade gerenciada pelo sistema

  1. Definir contexto de assinatura de destino
    az account set --subscription $destinationSubId
    
  2. Adicionar identidade do sistema na conta de destino
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG
    $principalId = ($identityOutput | ConvertFrom-Json).principalId
    
  3. Definir identidade padrão na conta de destino
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
    
  4. Definir contexto de assinatura de origem
    az account set --subscription $sourceSubId
    
  5. Adicionar atribuição de função na conta de origem
    # 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. Redefinir contexto de assinatura de destino
    az account set --subscription $destinationSubId
    

Uso de identidade gerenciada atribuída pelo usuário

  1. Atribuir variável de identidade gerenciada atribuída pelo usuário
    $userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
    
  2. Definir contexto de assinatura de destino
    az account set --subscription $destinationSubId
    
  3. Adicionar identidade gerenciada atribuída pelo usuário na conta de destino
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId
    $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
    
  4. Definir identidade padrão na conta de destino
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
    
  5. Definir contexto de assinatura de origem
    az account set --subscription $sourceSubId
    
  6. Adicionar atribuição de função na conta de origem
    $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. Redefinir contexto de assinatura de destino
    az account set --subscription $destinationSubId
    

Criar trabalho de cópia

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

Monitorar o progresso

Monitore o progresso usando o comando abaixo.

az cosmosdb copy show `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName
  1. Contagem total – Representa o número total de alterações (documento total + quaisquer novas alterações) no contêiner de origem em um determinado momento.
  2. Contagem processada – Representa o número total de eventos provenientes do feed de alterações do contêiner de origem que foram processados ​​pelo trabalho de cópia.

Trabalho de cópia completo

  1. Quando a contagem processada se tornar maior ou igual à contagem total, desative todas as atualizações no contêiner de origem e aguarde de 5 a 10 minutos para liberar quaisquer alterações restantes.
  2. Execute a API de conclusão para finalizar o trabalho de cópia e liberar recursos de computação. Isso também gravará as alterações restantes (se houver) no contêiner de destino.
    az cosmosdb copy complete `
        --resource-group $destinationAccountRG `
        --account-name $destinationAccount `
        --job-name $jobName
  1. Atualize os aplicativos cliente para começar a usar o novo contêiner (destino), se necessário.

Definir variáveis de shell

Primeiro, defina todas as variáveis que cada script individual usará.

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

Criar trabalho de cópia

Crie um trabalho para copiar uma coleção dentro de uma conta da API do Azure Cosmos DB para 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 

Observação

--job-name deve ser exclusivo para cada trabalho dentro de uma conta.

Definir variáveis de shell

Primeiro, defina todas as variáveis que cada script individual usará.

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

Criar trabalho de cópia

Crie um trabalho para copiar uma tabela dentro de uma conta do 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 

Observação

--job-name deve ser exclusivo para cada trabalho dentro de uma conta.

Gerenciando trabalhos de cópia

Monitore o progresso de um trabalho de cópia

Exiba o progresso e o status de um trabalho de cópia:

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

Listar todos os trabalhos de cópia criados em uma conta

Para listar todos os trabalhos de cópia criados em uma conta:

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

Pausar um trabalho de cópia

Para pausar um trabalho de cópia em andamento, você pode usar o comando:

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

Retomar um trabalho de cópia

Para retomar um trabalho de cópia em andamento, você pode usar o comando:

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

Cancelar um trabalho de cópia

Para cancelar um trabalho de cópia em andamento, você pode usar o comando:

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

Obtenha suporte para problemas de cópia

Para problemas relacionados a um trabalho de cópia, crie uma Nova Solicitação de Suporte no portal do Azure. Defina o Tipo de Problema como "Migração de Dados" e o Subtipo de problema como "Cópia de contêiner".

Próximas etapas

  • Para obter mais informações sobre trabalhos de cópia de contêiner, veja Trabalhos de cópia.