Azure Cosmos DB (プレビュー) でジョブをコピーする
コンテナー コピー ジョブを使用して、Azure Cosmos DB 内でデータのコピーを実行できます。
これらのシナリオのいずれかを達成するには、Azure Cosmos DB アカウント内からデータをコピーする必要がある場合があります。
- 1 つのコンテナーから別のコンテナーにすべての項目をコピーします。
- データベースからコンテナーへ (またはその逆へ) スループットをプロビジョニングする際の細分性を変更します。
- コンテナーのパーティション キーを変更します。
- コンテナーの一意キーを更新します。
- コンテナーまたはデータベースの名前を変更します。
- アカウントの容量モードをサーバーレスからプロビジョニング済み、またはその逆に変更します。
- 階層的パーティション キーなど、新しいコンテナーでのみサポートされる新機能を採用します。
コピー ジョブは、Azure CLI コマンドを使用して作成および管理できます。
作業の開始
Azure Cosmos DB for NoSQL API アカウントのオンライン コンテナー コピーを開始するには、Azure portal の [プレビュー機能] の [Online container copy (NoSQL)]\(オンライン コンテナー コピー (NoSQL)\) プレビュー機能フラグを登録します。 登録が完了すると、このプレビューがサブスクリプション内のすべての NoSQL API アカウントに対して有効になります。
前提条件
- ソース Azure Cosmos DB アカウントの継続的バックアップを有効にします。
- ソース アカウントのサブスクリプションのすべてのバージョンと削除の変更フィード モード プレビュー機能に登録します。
重要
コンテナー内の項目に対する以前のバージョンと現在のバージョンの変更内容の両方を保持するために、ソース コンテナーに対するすべての書き込み操作に二重の RU が課金されます。 この RU 料金の引き上げは、今後変更される可能性があります。
コンテナーのデータをコピーする
- 使用する設定 (パーティション キー、スループットの細分性、要求ユニット、一意キーなど) を使用して、ターゲットの Azure Cosmos DB コンテナーを作成します。
- コンテナー コピー ジョブを作成します。
- コピー ジョブの進行状況を監視します。
- すべてのドキュメントがコピーされたら、ソース コンテナーの更新を停止し、完了 API を呼び出してジョブを完了としてマークします。
- 目的に応じて、アプリケーションまたはクライアントをソースまたはターゲットのコンテナーに適切にポイントして、操作を再開します。
コンテナー コピーのしくみ
- プラットフォームによって、コンテナー コピー ジョブを実行するために、コピー先 Azure Cosmos DB アカウントにサーバー側のコンピューティング インスタンスが割り当てられます。
- 1 つのジョブが、すべてのインスタンスでいつでも実行されます。
- オンライン コピー ジョブは、すべてのバージョンを利用し変更フィード モードを削除してデータをコピーし、ソース コンテナーからコピー先コンテナーに増分変更をレプリケートします。
- ジョブが完了すると、プラットフォームは、非アクティブ状態の 15 分後にこれらのインスタンスを割り当て解除します。
オフライン コレクション コピー ジョブを実行して、同じ Azure Cosmos DB for Mongo DB アカウント内のデータをコピーできます。
コレクションのデータをコピーする
- 使用する設定 (パーティション キー、スループットの細分性、要求ユニット、一意キーなど) を使用して、ターゲットの Azure Cosmos DB コレクションを作成します。
- アプリケーション インスタンスまたはそれに接続しているクライアントを一時停止して、ソース コレクションに対する操作を停止します。
- コピー ジョブを作成します。
- コピー ジョブの進行状況を監視し、完了するまで待ちます。
- 目的に応じて、アプリケーションまたはクライアントをソースまたはターゲットのコレクションに適切にポイントして、操作を再開します。
Note
オフライン コレクション コピー ジョブを開始する前に、ソース コレクションに対する操作の実行をすべて停止することを強くお勧めします。 コピー ジョブの開始後にソース コレクションで行われた項目の削除と更新はキャプチャされない場合があります。 コピー ジョブの進行中にソース コレクションに対して操作を実行し続けると、ターゲット コレクションでデータが重複または欠落する可能性があります。
コレクション コピーのしくみ
- プラットフォームによって、コピー先 Azure Cosmos DB アカウントにサーバー側のコンピューティング インスタンスが割り当てられます。
- これらのインスタンスは、アカウント内に 1 つ以上のコレクション コピー ジョブが作成されると割り当てられます。
- コピー ジョブは、これらのインスタンスで実行されます。
- 1 つのジョブが、すべてのインスタンスでいつでも実行されます。
- インスタンスは、同じアカウント内で実行されているすべてのコピー ジョブで共有されます。
- オフライン コピー ジョブでは、変更ストリームを使用してデータをコピーし、ソース コレクションからコピー先コレクションに増分変更をレプリケートします。
- アイドル状態が 15 分を超えた場合、プラットフォームはインスタンスの割り当てを解除する可能性があります。
オフライン テーブル コピーを実行して、あるテーブルのデータを同じ Azure Cosmos DB for Apache Cassandra アカウント内の別のテーブルにコピーできます。
テーブルのデータをコピーする
- 使用する設定 (パーティション キー、スループットの細分性、要求ユニットなど) を使用して、ターゲットの Azure Cosmos DB テーブルを作成します。
- アプリケーション インスタンスまたはそれに接続しているクライアントを一時停止して、ソース テーブルに対する操作を停止します。
- コピー ジョブを作成します。
- コピー ジョブの進行状況を監視し、完了するまで待ちます。
- 目的に応じて、アプリケーションまたはクライアントをソースまたはターゲットのテーブルに適切にポイントして、操作を再開します。
Note
オフライン テーブル コピー ジョブを開始する前に、ソース テーブルに対する操作の実行をすべて停止することを強くお勧めします。 コピー ジョブの開始後にソース テーブルで行われた項目の削除と更新はキャプチャされない場合があります。 コピー ジョブの進行中にソース テーブルに対して操作を実行し続けると、ターゲット テーブルでデータが重複または欠落する可能性があります。
テーブル コピーのしくみ
- プラットフォームによって、コピー先 Azure Cosmos DB アカウントにサーバー側のコンピューティング インスタンスが割り当てられます。
- これらのインスタンスは、アカウント内に 1 つ以上のコピー ジョブが作成されると割り当てられます。
- コピー ジョブは、これらのインスタンスで実行されます。
- 1 つのジョブが、すべてのインスタンスでいつでも実行されます。
- インスタンスは、同じアカウント内で実行されているすべてのコピー ジョブで共有されます。
- オフライン コピー ジョブでは、変更フィードを使用してデータをコピーし、ソース テーブルからコピー先テーブルに増分変更をレプリケートします。
- アイドル状態が 15 分を超えた場合、プラットフォームはインスタンスの割り当てを解除する可能性があります。
コピー ジョブの速度に影響する要因
コンテナー コピー ジョブの進行速度は、次の要因によって決まります。
ソース コンテナーまたはデータベースのスループット設定。
ターゲット コンテナーまたはデータベースのスループット設定。
ヒント
ターゲット コンテナーのスループットを、ソース コンテナーのスループットの少なくとも 2 倍に設定します。
データ転送を実行するために Azure Cosmos DB アカウントに割り当てられたサーバー側のコンピューティング インスタンス。
重要
既定の SKU では、アカウントごとに 2 つの 4 vCPU 16 GB サーバー側インスタンスが利用できます。
制限事項
プレビュー資格条件
コンテナー コピー ジョブは、次の機能が有効になっているアカウントでは機能しません。 コンテナー コピー ジョブを実行する前に、次の機能を無効にしてください。
アカウント構成
Time to Live (TTL) 設定は、宛先コンテナーでは調整されません。 その結果、ソース コンテナーでドキュメントの有効期限が切れていない場合は、宛先コンテナーでそのカウントダウンが新たに開始されます。
FAQ
コンテナー コピー ジョブのサービス レベル アグリーメントはありますか?
現在、コンテナー コピー ジョブはベストエフォート ベースでサポートされています。 ジョブの完了にかかる時間についてのサービス レベル アグリーメント (SLA) の保証は提供されません。
アカウント内に複数のコンテナー コピー ジョブを作成できますか?
はい。同じアカウント内に複数のジョブを作成できます。 ジョブは連続して実行されます。 アカウント内で作成されたすべてのジョブを一覧表示し、その進行状況を監視できます。
Azure Cosmos DB アカウント内のデータベース全体をコピーできますか?
データベース内のコンテナーごとにジョブを作成する必要があります。
複数のリージョンを持つ Azure Cosmos DB アカウントを持っています。 コンテナー コピー ジョブはどのリージョンで実行されますか?
コンテナー コピー ジョブは書き込みリージョンで実行されます。 複数リージョンの書き込みを指定して構成されたアカウントでは、ジョブは書き込みリージョンの一覧のいずれかのリージョンで実行されます。
アカウントの書き込みリージョンが変更されると、コンテナー コピー ジョブはどうなりますか?
アカウントの書き込みリージョンは、リージョンの停止というめったにないシナリオや手動フェールオーバーが原因で変更される場合があります。 このようなシナリオでは、アカウント内に不完全なコンテナー コピー ジョブが作成され、失敗します。 これらの失敗したジョブは再作成する必要があります。 再作成されたジョブは、新しい (最新の) 書き込みリージョンで実行されます。
サポートされているリージョン
現在、コンテナー コピーは、次のリージョンでサポートされています。
米国 | ヨーロッパおよびアフリカ | アジア太平洋 |
---|---|---|
ブラジル南部 | フランス中部 | オーストラリア中部 |
カナダ中部 | フランス南部 | オーストラリア中部 2 |
カナダ東部 | ドイツ北部 | オーストラリア東部 |
米国中部 | ドイツ中西部 | インド中部 |
米国中部 EUAP | 北ヨーロッパ | 東日本 |
米国東部 | ノルウェー東部 | 韓国中部 |
米国東部 2 | ノルウェー西部 | 東南アジア |
米国東部 2 EUAP | スイス北部 | アラブ首長国連邦中部 |
米国中北部 | スイス西部 | インド西部 |
米国中南部 | 英国南部 | 東アジア |
米国中西部 | 英国西部 | マレーシア南部 |
米国西部 | 西ヨーロッパ | 西日本 |
米国西部 2 | イスラエル中部 | オーストラリア南東部 |
サポートされていません | 南アフリカ北部 | サポートされていません |
既知の一般的な問題
エラー - Owner resource doesn't exist (所有者リソースが存在しません)。
ジョブの作成が失敗し、Owner resource doesn't exist (所有者リソースが存在しません) というエラー (エラー コード 404) が表示された場合、ターゲット コンテナーがまだ作成されていないか、ジョブの作成に使用されたコンテナー名が実際のコンテナー名と一致しません。
ジョブを実行する前に、ターゲット コンテナーが作成されていることを確認し、ジョブのコンテナー名が実際のコンテナー名と一致していることを確認してください。
"code": "404", "message": "Response status code does not indicate success: NotFound (404); Substatus: 1003; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: (Message: {\"Errors\":[\"Owner resource does not exist\"]
エラー - この要求は認可されていません。
要求が失敗し、Unauthorized (未承認) というエラー (エラー コード 401) が表示された場合、ローカルの承認が無効になっている可能性があります。
コンテナー コピー ジョブでは、認証に主キーが使用されます。 ローカルの承認が無効になっている場合、ジョブの作成は失敗します。 コンテナー コピー ジョブを機能させるには、ローカルの承認を有効にする必要があります。
"code": "401", "message": " Response status code does not indicate success: Unauthorized (401); Substatus: 5202; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: Local Authorization is disabled. Use an AAD token to authorize all requests."
エラー - Error while getting resources for job. (ジョブのリソースを取得中にエラーが発生しました。)
このエラーは、内部サーバーの問題が原因で発生する場合があります。 この問題を解決するには、Azure portal から新しいサポート リクエストをオープンして、Microsoft サポートにお問い合わせください。 [問題の種類] で、[Data Migration] (データ移行) を選択します。 [問題のサブタイプ] で、[Intra-account container copy] (アカウント内コンテナーのコピー) を選択します。
"code": "500" "message": "Error while getting resources for job, StatusCode: 500, SubStatusCode: 0, OperationId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
次のステップ
- CLI コマンドを使って Azure Cosmos DB アカウント内でコンテナー コピー ジョブを作成、監視、管理する方法を学習します。