Создание заданий копирования контейнеров и управление ими в 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.
При копировании данных из контейнера одной учетной записи в контейнер другой учетной записи необходимо предоставить доступ на чтение исходного контейнера к удостоверению целевой учетной записи для выполнения операции копирования. Выполните приведенные ниже действия, чтобы назначить требуемое разрешение на чтение целевой учетной записи.
Использование управляемого удостоверения системы
- Настройка контекста целевой подписки
az account set --subscription $destinationSubId
- Добавление системного удостоверения в целевой учетной записи
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG $principalId = ($identityOutput | ConvertFrom-Json).principalId
- Установка удостоверения по умолчанию в целевой учетной записи
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity="SystemAssignedIdentity"
- Настройка контекста исходной подписки
az account set --subscription $sourceSubId
- Добавление назначения ролей в исходной учетной записи
# 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
- Сброс контекста целевой подписки
az account set --subscription $destinationSubId
Использование управляемого удостоверения, назначаемого пользователем
- Назначение назначаемой пользователем переменной управляемого удостоверения
$userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
- Настройка контекста целевой подписки
az account set --subscription $destinationSubId
- Добавление управляемого удостоверения, назначаемого пользователем, в целевой учетной записи
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
- Установка удостоверения по умолчанию в целевой учетной записи
az cosmosdb update -n $destinationAccount -g $destinationAccountRG --default-identity=UserAssignedIdentity=$userAssignedManagedIdentityResourceId
- Настройка контекста исходной подписки
az account set --subscription $sourceSubId
- Добавление назначения ролей в исходной учетной записи
$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
- Сброс контекста целевой подписки
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
- Общее число— представляет общее количество изменений (общий документ и любые новые изменения) в исходном контейнере в любое время.
- Обработанное число— представляет общее количество событий, поступающих из канала изменений исходного контейнера, обработанных заданием копирования.
Завершение задания копирования
- Если обработанное число становится больше или равно общему количеству, отключите все обновления в исходном контейнере и подождите 5–10 минут, чтобы снять все оставшиеся изменения.
- Запустите API завершения, чтобы завершить задание копирования и бесплатные вычислительные ресурсы, это также будет записывать оставшиеся изменения (если таковые) в целевой контейнер.
az cosmosdb copy complete `
--resource-group $destinationAccountRG `
--account-name $destinationAccount `
--job-name $jobName
- При необходимости обновите клиентские приложения, чтобы при необходимости использовать новый (целевой) контейнер.
Настройка переменных оболочки
Сначала задайте все переменные, которые используют каждый отдельный скрипт.
$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. Задайте тип проблемы как "Миграция данных" и подтип проблемы как "Копирование контейнера".
Следующие шаги
- Дополнительные сведения о заданиях копирования контейнеров см. в разделе "Копирование заданий".