Share via


Azure Cosmos DB でのコンテナー コピー ジョブの作成と管理 (プレビュー)

適用対象: NoSQL MongoDB Cassandra

コンテナー コピー ジョブは、Azure Cosmos DB アカウントにコンテナーのオフライン コピーを作成するのに役立ちます。

この記事では、Azure CLI コマンドを使用してコンテナー コピー ジョブを作成、監視、管理する方法について説明します。

前提条件

  • ポータルの Cloud Shell を使用して、コンテナー コピー コマンドを実行できます。 コマンドをローカルで実行することもできます。Azure CLI がマシンにダウンロードおよびインストールされていることを確認してください。
  • 現在、コンテナー コピーはこれらのリージョンでのみサポートされています。 アカウントの書き込みリージョンがこの一覧に含まれていることを確認してください。
  • コンテナー コピー コマンドを含む Azure Cosmos DB プレビュー拡張機能をインストールします。
    az extension add --name cosmosdb-preview
    

Note

Azure Cosmos DB アカウント間のコンテナー コピー ジョブは、NoSQL API アカウントでのみ使用できます。 Azure Cosmos DB アカウント内のコンテナー コピー ジョブは、NoSQL、MongoDB、Cassandra API アカウントで使用できます。

Azure Cosmos DB アカウント内にデータをコピーするコンテナー コピー ジョブを作成する

シェル変数を設定する

最初に、個々のスクリプトで使用されるすべての変数を設定します。

$destinationRG = "<destination-resource-group-name>"
$sourceAccount = "<cosmos-source-account-name>"
$destinationAccount = "<cosmos-destination-account-name>"
$jobName = ""
$sourceDatabase = ""
$sourceContainer = ""
$destinationDatabase = ""
$destinationContainer = ""

コンテナー コピー ジョブを作成する

NoSQL 用 API アカウント

Azure Cosmos DB の NoSQL 用 API アカウント内にコンテナーをコピーするジョブを作成します。

az cosmosdb copy create `
    --resource-group $destinationRG `
    --job-name $jobName `
    --dest-account $destinationAccount `
    --src-account $sourceAccount `
    --dest-nosql database=$destinationDatabase container=$destinationContainer `
    --src-nosql database=$sourceDatabase container=$sourceContainer

Cassandra 用 API アカウント

Azure Cosmos DB の Cassandra 用 API アカウント内にコンテナーをコピーするジョブを作成します。

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 

MongoDB 用 API アカウント

Azure Cosmos DB の MongoDB 用 API アカウント内にコンテナーをコピーするジョブを作成します。

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 は、アカウント内のジョブごとに一意である必要があります。

Azure Cosmos DB アカウントでデータをコピーするコンテナー コピー ジョブを作成する

シェル変数を設定する

最初に、個々のスクリプトで使用されるすべての変数を設定します。

$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 = ""

読み取りアクセス許可を割り当てる

あるアカウントのコンテナーから別のアカウントのコンテナーにデータをコピーしている間。 コピー操作を実行するには、ソース コンテナーの読み取りアクセスをコピー先アカウントの 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
    

コンテナー コピー ジョブを作成する

NoSQL 用 API アカウント

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

コンテナー コピー ジョブの管理

コンテナー コピー ジョブの進行状況を監視する

コピー ジョブの進行状況と状態を表示します。

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

次のステップ