Поделиться через


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

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

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

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

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

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

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

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

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

Примечание.

Этот шаг не требуется, если вы копируете данные в той же учетной записи Azure Cosmos DB.

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

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

  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
    

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

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

Мониторинг прогресса

Отслеживайте ход выполнения с помощью следующей команды:

az cosmosdb copy show `
    --resource-group $destinationAccountRG `
    --account-name $destinationAccount `
    --job-name $jobName
  • Общее число представляет общее количество изменений (общий документ и любые новые изменения) в исходном контейнере в любое время.
  • Обработанное число представляет общее количество событий, поступающих из канала изменений исходного контейнера, которые были обработаны заданием копирования.

Завершение задания копирования

  1. Если обработанное число становится больше или равно общему количеству, отключите все обновления в исходном контейнере и подождите 5–10 минут, чтобы снять все оставшиеся изменения.
  2. Запустите API завершения, чтобы завершить задание копирования и освободить вычислительные ресурсы; это также записывает оставшиеся изменения (если таковые имеются) в целевой контейнер.
    az cosmosdb copy complete `
        --resource-group $destinationAccountRG `
        --account-name $destinationAccount `
        --job-name $jobName
  1. При необходимости обновите клиентские приложения, чтобы при необходимости использовать новый (целевой) контейнер.

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

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

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

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

Создайте задание для копирования коллекции в учетной записи 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 должен быть уникальным для каждого задания в учетной записи.

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

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

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

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

Создайте задание для копирования таблицы в учетной записи Apache 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 

Примечание.

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

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

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

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

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. Установите тип проблемы как миграция данных и подтип проблемы как копирование контейнеров.

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