Create and manage container copy jobs in Azure Cosmos DB (Preview)
APPLIES TO:
NoSQL
MongoDB
Cassandra
Container copy jobs help create offline copies of containers in Azure Cosmos DB accounts.
This article describes how to create, monitor, and manage container copy jobs using Azure CLI commands.
Prerequisites
- You can use the portal Cloud Shell to run container copy commands. Alternately, you can run the commands locally; make sure you have Azure CLI downloaded and installed on your machine.
- Currently, container copy is only supported in these regions. Make sure your account's write region belongs to this list.
- Install the Azure Cosmos DB preview extension which contains the container copy commands.
az extension add --name cosmosdb-preview
Note
Container copy job across Azure Cosmos DB accounts is available for NoSQL API account only. Container copy job within an Azure Cosmos DB account is available for NoSQL, MongoDB and Cassandra API accounts.
Create a container copy job to copy data within an Azure Cosmos DB account
Set shell variables
First, set all of the variables that each individual script uses.
$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceDatabase = ""
$sourceContainer = ""
$destinationDatabase = ""
$destinationContainer = ""
Create container copy job
API for NoSQL account
Create a job to copy a container within an Azure Cosmos DB API for NoSQL account:
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
API for Cassandra account
Create a job to copy a container within an Azure Cosmos DB API for Cassandra account:
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
API for MongoDB account
Create a job to copy a container within an Azure Cosmos DB API for MongoDB account:
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
Note
--job-name
should be unique for each job within an account.
Create a container copy job to copy data across Azure Cosmos DB accounts
Set shell variables
First, set all of the variables that each individual script uses.
$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 = ""
Assign read permission
While copying data from one account's container to another account's container. It is required to give read access of source container to destination account's identity to perform the copy operation. Follow the steps below to assign requisite read permission to destination account.
Using System managed identity
- Set destination subscription context
az account set --subscription $destinationSubId
- Add system identity on destination account
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG $principalId = ($identityOutput | ConvertFrom-Json).principalId
- Set default identity on destination account
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
- Set source subscription context
az account set --subscription $sourceSubId
- Add role assignment on source account
# 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
- Reset destination subscription context
az account set --subscription $destinationSubId
Using User-assigned managed identity
- Assign User-assigned managed identity variable
$userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
- Set destination subscription context
az account set --subscription $destinationSubId
- Add user assigned managed identity on destination account
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
- Set default identity on destination account
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
- Set source subscription context
az account set --subscription $sourceSubId
- Add role assignment on source account
$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
- Reset destination subscription context
az account set --subscription $destinationSubId
Create container copy job
API for NoSQL account
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
Managing container copy jobs
Monitor the progress of a container copy job
View the progress and status of a copy job:
az cosmosdb copy show `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
List all the container copy jobs created in an account
To list all the container copy jobs created in an account:
az cosmosdb copy list `
--resource-group $destinationAccountRG `
--account-name $destinationAccount
Pause a container copy job
In order to pause an ongoing container copy job, you can use the command:
az cosmosdb copy pause `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Resume a container copy job
In order to resume an ongoing container copy job, you can use the command:
az cosmosdb copy resume `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Cancel a container copy job
In order to cancel an ongoing container copy job, you can use the command:
az cosmosdb copy cancel `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
Get support for container copy issues
For issues related to Container copy, raise a New Support Request from the Azure portal. Set the Problem Type as 'Data Migration' and Problem subtype as 'Container copy'.
Next steps
- For more information about container copy jobs, see Container copy jobs.
Feedback
Submit and view feedback for