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 = ""
読み取りアクセス許可を割り当てる
Note
同じ Azure Cosmos DB アカウント内のデータをコピーする場合、この手順は必要ありません。
あるアカウントのコンテナーから別のアカウントのコンテナーにデータをコピーする場合、コピー操作を実行するには、コピー先アカウントの ID にソース コンテナーの読み取りアクセス権を付与する必要があります。 次の手順に従って、必要な読み取りアクセス許可をコピー先アカウントに割り当てます。
システム マネージド ID の使用
- 変換先サービスのコンテキストを設定する
az account set --subscription $destinationSubId
- コピー先アカウントにシステム ID を追加する
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG $principalId = ($identityOutput | ConvertFrom-Json).principalId
- コピー先アカウントで既定の ID を設定する
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
ユーザー割り当てマネージド ID の使用
- ユーザー割り当てマネージド ID の変数を割り当てる
$userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
- 変換先サービスのコンテキストを設定する
az account set --subscription $destinationSubId
- コピー先アカウントでユーザー割り当てマネージド ID を追加する
$identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
- コピー先アカウントで既定の ID を設定する
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 = ""
コピー ジョブを作成する
Azure Cosmos DB API for 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
Note
--job-name
は、アカウント内のジョブごとに一意である必要があります。
シェル変数を設定する
最初に、個々のスクリプトで使用されるすべての変数を設定します。
$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceKeySpace = ""
$sourceTable = ""
$destinationKeySpace = ""
$destinationTable = ""
コピー ジョブを作成する
Azure Cosmos DB for Apache 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
Note
--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 portal から新しいサポート リクエストを作成してください。 [問題の種類] を [データ移行] に、[問題のサブタイプ] を [コンテナー コピー] に設定します。
次のステップ
- コンテナー コピー ジョブの詳細については、コピー ジョブに関するページを参照してください。