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


Создание заданий копирования контейнеров и управление ими в 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. Общее число— представляет общее количество изменений (общий документ и любые новые изменения) в исходном контейнере в любое время.
  2. Обработанное число— представляет общее количество событий, поступающих из канала изменений исходного контейнера, обработанных заданием копирования.

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

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

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