Создание заданий копирования контейнеров и управление ими в Azure Cosmos DB (предварительная версия)

Область применения: Nosql Mongodb Кассандра

Задания копирования контейнеров помогают создавать автономные копии контейнеров в учетных записях Azure Cosmos DB.

В этой статье описывается создание, мониторинг заданий копирования контейнеров и управление ими с помощью команд Azure CLI.

Необходимые компоненты

  • Вы можете использовать портал Cloud Shell для выполнения команд копирования контейнеров. Кроме того, можно выполнять команды локально; Убедитесь, что на компьютере скачан и установлен Azure CLI .
  • Сейчас копирование контейнера поддерживается только в этих регионах. Убедитесь, что регион записи вашей учетной записи находится в этом списке.
  • Установите расширение предварительной версии Azure Cosmos DB, содержащее команды копирования контейнеров.
    az extension add --name cosmosdb-preview
    

Примечание.

Задание копирования контейнеров в учетных записях Azure Cosmos DB доступно только для учетной записи API NoSQL. Задание копирования контейнеров в учетной записи Azure Cosmos DB доступно для учетных записей API NoSQL, MongoDB и Cassandra.

Создание задания копирования контейнера для копирования данных в учетной записи Azure Cosmos DB

Настройка переменных оболочки

Сначала задайте все переменные, которые используют каждый отдельный скрипт.

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

Создание задания копирования контейнеров

Учетная запись API для NoSQL

Создайте задание для копирования контейнера в учетной записи API Azure Cosmos DB для NoSQL:

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 для учетной записи Cassandra

Создайте задание для копирования контейнера в API Azure Cosmos DB для учетной записи 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 

Учетная запись API для MongoDB

Создайте задание для копирования контейнера в учетной записи API Azure Cosmos DB для 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 

Примечание.

--job-name должен быть уникальным для каждого задания в учетной записи.

Создание задания копирования контейнера для копирования данных в учетных записях Azure Cosmos DB

Настройка переменных оболочки

Сначала задайте все переменные, которые используют каждый отдельный скрипт.

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

Назначение разрешения на чтение

При копировании данных из контейнера одной учетной записи в контейнер другой учетной записи. Для выполнения операции копирования необходимо предоставить доступ на чтение исходного контейнера к удостоверению целевой учетной записи. Выполните приведенные ниже действия, чтобы назначить требуемое разрешение на чтение целевой учетной записи.

Использование управляемого удостоверения системы

  1. Настройка контекста целевой подписки
    az account set --subscription $destinationSubId
    
  2. Добавление системного удостоверения в целевой учетной записи
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG
    $principalId = ($identityOutput | ConvertFrom-Json).principalId
    
  3. Установка удостоверения по умолчанию в целевой учетной записи
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
    
  4. Настройка контекста исходной подписки
    az account set --subscription $sourceSubId
    
  5. Добавление назначения ролей в исходной учетной записи
    # 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. Сброс контекста целевой подписки
    az account set --subscription $destinationSubId
    

Использование управляемого удостоверения, назначаемого пользователем

  1. Назначение назначаемой пользователем переменной управляемого удостоверения
    $userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
    
  2. Настройка контекста целевой подписки
    az account set --subscription $destinationSubId
    
  3. Добавление управляемого удостоверения, назначаемого пользователем, в целевой учетной записи
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId
    $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
    
  4. Установка удостоверения по умолчанию в целевой учетной записи
    az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
    
  5. Настройка контекста исходной подписки
    az account set --subscription $sourceSubId
    
  6. Добавление назначения ролей в исходной учетной записи
    $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. Сброс контекста целевой подписки
    az account set --subscription $destinationSubId
    

Создание задания копирования контейнеров

Учетная запись API для 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

Управление заданиями копирования контейнеров

Мониторинг хода выполнения задания копирования контейнера

Проконтролируйте хода выполнения и состояние задания копирования:

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

Вывод списка всех заданий копирования контейнеров, созданных в учетной записи

Чтобы получить список всех заданий копирования контейнеров, созданных в учетной записи, выполните следующие действия:

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

Приостановка задания копирования контейнера

Чтобы приостановить текущее задание копирования контейнеров, можно использовать следующую команду:

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

Возобновление задания копирования контейнера

Чтобы возобновить текущее задание копирования контейнеров, можно использовать команду:

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

Отмена задания копирования контейнера

Чтобы отменить текущее задание копирования контейнеров, можно использовать следующую команду:

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

Получение поддержки для решения проблем с копированием контейнеров

Для проблем, связанных с копированием контейнеров, создайте новый запрос на поддержку из портал Azure. Задайте тип проблемы как "Миграция данных" и подтип проблемы как "Копирование контейнера".

Следующие шаги

  • Дополнительные сведения о заданиях копирования контейнеров см. в разделе "Задания копирования контейнеров".