Créer et gérer des travaux de copie de conteneur dans Azure Cosmos DB (préversion)

S’APPLIQUE À : NoSQL MongoDB Cassandra

Les travaux de copie de conteneur permettent de créer des copies hors connexion de conteneurs dans des comptes Azure Cosmos DB.

Cet article explique comment créer, superviser et gérer des travaux de copie de conteneur à l’aide de commandes Azure CLI.

Prérequis

  • Vous pouvez utiliser le portail Cloud Shell pour exécuter des commandes de copie de conteneur. Vous pouvez également exécuter les commandes localement. Vérifiez que vous avez téléchargé et installé Azure CLI sur votre machine.
  • La copie de conteneur est prise en charge uniquement dans ces régions. Vérifiez que la région d’écriture de votre compte figure dans cette liste.
  • Installez l’extension de préversion Azure Cosmos DB qui contient les commandes de copie de conteneur.
    az extension add --name cosmosdb-preview
    

Remarque

Le travail de copie de conteneur sur les comptes Azure Cosmos DB est disponible uniquement pour un compte d’API NoSQL. Le travail de copie de conteneur dans un compte Azure Cosmos DB est disponible pour les comptes d’API NoSQL, MongoDB et Cassandra.

Créer un travail de copie de conteneur pour copier des données dans un compte Azure Cosmos DB

Définir des variables shell

Tout d’abord, définissez toutes les variables que chaque script individuel utilise.

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

Créer un travail de copie de conteneur

Compte d’API pour NoSQL

Créer un travail pour copier un conteneur dans un compte d’API NoSQL Azure Cosmos DB :

az cosmosdb copy create `
    --resource-group $destinationRG `
    --job-name $jobName `
    --dest-account $destinationAccount `
    --src-account $sourceAccount `
    --dest-nosql database=$destinationDatabase container=$destinationContainer `
    --src-nosql database=$sourceDatabase container=$sourceContainer

Compte d’API pour Cassandra

Créer un travail pour copier un conteneur dans un compte d’API Cassandra Azure Cosmos DB :

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 

Compte d’API pour MongoDB

Créer un travail pour copier un conteneur dans un compte d’API MongoDB Azure Cosmos DB :

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 

Notes

--job-name doit être unique pour chaque travail au sein d’un compte.

Créer un travail de copie de conteneur pour copier des données entre des comptes Azure Cosmos DB

Définir des variables shell

Tout d’abord, définissez toutes les variables que chaque script individuel utilise.

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

Attribuer l’autorisation de lecture

Lors de la copie de données du conteneur d’un compte vers le conteneur d’un autre compte. Il est nécessaire d’accorder l’accès en lecture du conteneur source à l’identité du compte de destination pour effectuer l’opération de copie. Suivez les étapes ci-dessous pour attribuer l’autorisation de lecture requise au compte de destination.

Utilisation d’une identité managée par le système

  1. Définir le contexte de l’abonnement de destination
    az account set --subscription $destinationSubId
    
  2. Ajouter une identité système sur le compte de destination
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG
    $principalId = ($identityOutput | ConvertFrom-Json).principalId
    
  3. Définir l’identité par défaut sur le compte de destination
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
    
  4. Définir le contexte de l’abonnement source
    az account set --subscription $sourceSubId
    
  5. Ajouter une attribution de rôle à un compte d’utilisateur
    # 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. Réinitialiser le contexte de l’abonnement de destination
    az account set --subscription $destinationSubId
    

Utilisation d’une identité managée affectée par l’utilisateur

  1. Attribuer une variable d’identité managée affectée par l’utilisateur
    $userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
    
  2. Définir le contexte de l’abonnement de destination
    az account set --subscription $destinationSubId
    
  3. Ajouter une identité managée affectée par l’utilisateur sur le compte de destination
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId
    $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
    
  4. Définir l’identité par défaut sur le compte de destination
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
    
  5. Définir le contexte de l’abonnement source
    az account set --subscription $sourceSubId
    
  6. Ajouter une attribution de rôle à un compte d’utilisateur
    $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. Réinitialiser le contexte de l’abonnement de destination
    az account set --subscription $destinationSubId
    

Créer un travail de copie de conteneur

Compte d’API pour NoSQL

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

Gestion des travaux de copie de conteneur

Superviser la progression d’un travail de copie de conteneur

Afficher la progression et l’état d’un travail de copie :

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

Lister tous les travaux de copie de conteneur créés dans un compte

Pour lister tous les travaux de copie de conteneur créés dans un compte :

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

Suspendre un travail de copie de conteneur

Pour suspendre un travail de copie de conteneur en cours, vous pouvez utiliser la commande suivante :

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

Reprendre un travail de copie de conteneur

Pour rependre un travail de copie de conteneur en cours, vous pouvez utiliser la commande suivante :

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

Annuler un travail de copie de conteneur

Pour annuler un travail de copie de conteneur en cours, vous pouvez utiliser la commande suivante :

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

Obtenir de l’aide pour les problèmes de copie de conteneur

Pour les problèmes relatifs à la copie de conteneur, envoyez une nouvelle demande de support à partir du portail Azure. Choisissez le type de problème « Migration de données » et le sous-type de problème « Copie de conteneur ».

Étapes suivantes