Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задания копирования помогают создавать копии контейнеров в учетных записях 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. Установите тип проблемы как миграция данных и подтип проблемы как копирование контейнеров.
Следующий шаг
- Дополнительные сведения о заданиях копирования контейнеров см. в разделе "Копирование заданий".