次の方法で共有


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 の使用

  1. 変換先サービスのコンテキストを設定する
    az account set --subscription $destinationSubId
    
  2. コピー先アカウントにシステム ID を追加する
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG
    $principalId = ($identityOutput | ConvertFrom-Json).principalId
    
  3. コピー先アカウントで既定の ID を設定する
    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
    

ユーザー割り当てマネージド ID の使用

  1. ユーザー割り当てマネージド ID の変数を割り当てる
    $userAssignedManagedIdentityResourceId = "<CompleteResourceIdOfUserAssignedManagedIdentity>"
    
  2. 変換先サービスのコンテキストを設定する
    az account set --subscription $destinationSubId
    
  3. コピー先アカウントでユーザー割り当てマネージド ID を追加する
    $identityOutput = az cosmosdb identity assign -n $destinationAccount -g $destinationAccountRG --identities $userAssignedManagedIdentityResourceId
    $principalId = ($identityOutput | ConvertFrom-Json).userAssignedIdentities.$userAssignedManagedIdentityResourceId.principalId
    
  4. コピー先アカウントで既定の ID を設定する
    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 = ""

コピー ジョブを作成する

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 から新しいサポート リクエストを作成してください。 [問題の種類] を [データ移行] に、[問題のサブタイプ] を [コンテナー コピー] に設定します。

次のステップ

  • コンテナー コピー ジョブの詳細については、コピー ジョブに関するページを参照してください。