チュートリアル: Azure Database Migration Service を使って、MongoDB を Azure Cosmos DB for MongoDB RU にオンラインで移行する
適用対象: MongoDB
重要
Azure Cosmos DB for MongoDB 仮想コアへの移行は、Azure Data Studio の MongoDB 移行拡張機能を使用して実行できます。 この拡張機能は、バックグラウンドで Azure Database Migration Service を活用します。 Azure Portal 上で Database Migration Service を使用して Azure Cosmos DB for MongoDB 仮想コアに移行することはできません。
この MongoDB 移行ガイドは、MongoDB の移行に関するシリーズの一部です。 MongoDB 移行の重要な手順は、移行前、移行、そして移行後です。
DMS を使用した MongoDB から Azure Cosmos DB へのオンライン データ移行の概要
Azure Database Migration Service を使用して、MongoDB のオンプレミスまたはクラウドのインスタンスから Azure Cosmos DB for MongoDB に、データベースのオンライン (最小限のダウンタイム) の移行を実行できます。
このチュートリアルでは、Azure Database Migration Service を使用して MongoDB のデータを Azure Cosmos DB に移行する方法に関して、次の手順をデモンストレーションします。
- Azure Database Migration Service のインスタンスを作成する。
- 移行プロジェクトを作成します。
- ソースを指定する。
- ターゲットを指定する。
- ターゲット データベースにマップする。
- 移行を実行する。
- 移行を監視する。
- Azure Cosmos DB 内のデータを検証する。
- 準備が整ったら、移行を完了します。
このチュートリアルでは、Azure Database Migration Service を使用して、Azure 仮想マシンでホストされている MongoDB 内のデータセットを、Azure Cosmos DB for MongoDB に最小限のダウンタイムで移行します。 MongoDB ソースをまだ設定していない場合は、「Azure の Windows VM に MongoDB をインストールして構成する」をご覧ください。
Azure Database Migration Service を使用してオンライン移行を実行するには、Premium 価格レベルに基づいてインスタンスを作成する必要があります。
重要
最適な移行エクスペリエンスのために、ターゲット データベースと同じ Azure リージョンに Azure Database Migration Service のインスタンスを作成することをお勧めします。 リージョンや地域をまたいでデータを移動する場合、移行プロセスが遅くなる可能性があります。
ヒント
Azure Database Migration Service では、データベースをオフラインまたはオンラインで移行できます。 "オフライン" 移行では、移行の開始時がアプリケーションのダウンタイムの起点になります。 移行の完了時点から新しい環境に切り替わるまでの時間にダウンタイムを制限するには、"オンライン" 移行を使用してください。 オフライン移行をテストして、ダウンタイムが許容範囲内であるかどうかを判断することをお勧めします。 予想されるダウンタイムが許容できない場合は、オンライン移行を行います。
この記事では、MongoDB から Azure Cosmos DB for MongoDB へのオンライン移行について説明します。 オフライン移行の場合は、「チュートリアル:Azure Database Migration Service を使用して、MongoDB を Azure Cosmos DB for MongoDB RU にオフラインで移行する」を参照してください。
前提条件
このチュートリアルを完了するには、以下を実行する必要があります。
スループットの見積もり、パーティション キーの選択、インデックス作成ポリシーなど、移行前の手順を完了します。
Azure Cosmos DB for MongoDB アカウントを作成し、[Azure Cosmos DB for MongoDB の操作のレート制限エラーを回避する] が有効になっていることを確認します。
Note
サーバーレス モードでプロビジョニングされた Azure Cosmos DB for MongoDB アカウントに移行する場合、DMS は現在サポートされていません。
Azure Resource Manager デプロイ モデルを使用して、Azure Database Migration Service 用の Microsoft Azure 仮想ネットワークを作成します。これにより、ExpressRoute または VPN を使用したオンプレミスのソース サーバーとのサイト間接続が確立されます。
仮想ネットワークのセットアップ中、Microsoft へのネットワーク ピアリングに ExpressRoute を使用する場合は、サービスのプロビジョニング先となるサブネットに、次のサービス エンドポイントを追加してください。
- ターゲット データベース エンドポイント (SQL エンドポイント、Azure Cosmos DB エンドポイントなど)
- ストレージ エンドポイント
- サービス バス エンドポイント
Azure Database Migration Service にはインターネット接続がないため、この構成が必要となります。
仮想ネットワークのネットワーク セキュリティ グループ (NSG) の規則によって、次の各通信ポートがブロックされていないことを確認します。53、443、445、9354、および 10000 から 20000。 仮想ネットワークの NSG トラフィックのフィルター処理の詳細については、ネットワーク セキュリティ グループによるネットワーク トラフィックのフィルター処理に関する記事を参照してください。
Azure Database Migration Service がソース MongoDB サーバーにアクセスできるように Windows ファイアウォールを開きます。既定では TCP ポート 27017 が使用されています。
ソース データベースの前でファイアウォール アプライアンスを使用する場合は、Azure Database Migration Service が移行のためにソース データベースにアクセスできるように、ファイアウォール規則を追加することが必要な場合があります。
Azure Cosmos DB のサーバー側の再試行を構成して効率的に移行する
MongoDB から Azure Cosmos DB に移行するお客様は、リソース ガバナンス機能を活用できます。これにより、プロビジョニング済み RU/秒のスループットを完全に利用できるようになります。 Azure Cosmos DB では、データ移行サービスの特定の要求がコンテナーにプロビジョニングされている RU/秒を超え、その要求を再試行する必要がある場合に、移行の過程でその要求を調整することができます。 データ移行サービスは再試行を実行できますが、データ移行サービスと Azure Cosmos DB と間のネットワーク ホップに関係するラウンドトリップ時間が、その要求の全体的な応答時間に影響します。 調整された要求の応答時間を改善することにより、移行に必要な合計時間を短縮できます。 Azure Cosmos DB の "サーバー側の再試行" 機能を使用すると、サービスで調整エラー コードをインターセプトし、短いラウンドトリップ時間で再試行することができるため、要求の応答時間が大幅に短縮されます。
サーバー側の再試行機能は、Azure Cosmos DB ポータルの [機能] ブレードで確認できます
[無効] になっている場合は、次のように有効にすることをお勧めします
リソース プロバイダーの登録
Database Migration Service の最初のインスタンスを作成する前に、Microsoft.DataMigration リソース プロバイダーを登録します。
Azure portal にサインインします。 サブスクリプションを検索して選択します。
Azure Database Migration Service のインスタンスを作成するサブスクリプションを選択してから、 [リソース プロバイダー] を選びます。
移行を検索してから、 [Microsoft.DataMigration] の [登録] を選択します。
インスタンスを作成する
Azure portal で [+ リソースの作成] を選択し、Azure Database Migration Service を検索して、ドロップダウン リストから [Azure Database Migration Service] を選択します。
[Azure Database Migration Service] 画面で、 [作成] を選択します。
[移行サービスの作成] 画面で、サービスの名前、サブスクリプション、新規または既存のリソース グループを指定します。
Azure Database Migration Service のインスタンスを作成する場所を選択します。
既存の仮想ネットワークを選択するか、新しく作成します。
この仮想ネットワークによって、Azure Database Migration Service に、ソース MongoDB インスタンスとターゲット Azure Cosmos DB アカウントへのアクセスが提供されます。
Azure portal で仮想ネットワークを作成する方法の詳細については、「Azure portal を使用した仮想ネットワークの作成」を参照してください。
Premium 価格レベルの SKU を選択します。
Note
オンライン移行は、Premium レベルを使用している場合にのみサポートされます。 コストと価格レベルの詳細については、価格に関するページを参照してください。
[作成] を選択して、サービスを作成します。
移行プロジェクトを作成する
サービスが作成されたら、Azure portal 内でそのサービスを探して開き、新しい移行プロジェクトを作成します。
Azure ポータルで、 [All services](すべてのサービス) を選択し、Azure Database Migration Service を検索して、Azure Database Migration Service を選択します。
[Azure Database Migration Services] 画面で、作成した Azure Database Migration Service インスタンスの名前を検索して選択します。
または、Azure portal の [検索] ウィンドウから Azure Database Migration Service インスタンスを見つけることができます。
[+ 新しい移行プロジェクト] を選択します。
[新しい移行プロジェクト] 画面でプロジェクトの名前を指定し、[ソース サーバーの種類] ボックスでは [MongoDB] を、[ターゲット サーバーの種類] ボックスでは [Azure Cosmos DB for MongoDB] を選択して、[アクティビティの種類を選択します] で [オンライン データの移行 [プレビュー]] を選択します。
[保存] を選択し、 [アクティビティの作成と実行] を選択してプロジェクトを作成し、移行アクティビティを実行します。
ソース詳細を指定する
[ソースの詳細] 画面で、ソース MongoDB サーバーの接続の詳細を指定します。
重要
Azure Database Migration Service では、Azure Cosmos DB はソースとしてサポートしていません。
ソースへの接続には、3 つのモードがあります。
標準モード: 完全修飾ドメイン名または IP アドレス、ポート番号、および接続の資格情報を受け取ります。
接続文字列のモード: MongoDB 接続文字列 (記事「Connection String URI Format (接続文字列の URI 形式)」で説明しています) を受け取ります。
Azure Storage からのデータ: BLOB コンテナーの SAS URL を受け取ります。 MongoDB bsondump ツールによって生成された BSON ダンプが BLOB コンテナーに含まれている場合は、 [Blob には BSON ダンプが含まれています] を選択します。JSON ファイルがコンテナーに含まれている場合は、その選択を解除します。
このオプションを選択する場合は、ストレージ アカウントの接続文字列が次の形式で表示されていることを確認してください。
https://blobnameurl/container?SASKEY
また、Azure Storage のダンプの種類情報に基づいて、次の点に注意してください。
BSON ダンプの場合、データ ファイルが collection.bson 形式の包含データベースの名前が付けられたフォルダーに配置されるように、BLOB コンテナー内のデータは bsondump 形式にする必要があります。 メタデータ ファイルがある場合は、collection.metadata.json の形式で名前を付けます。
JSON ダンプの場合、BLOB コンテナー内のファイルは、包含データベースの名前が付けられたフォルダーに配置する必要があります。 各データベース フォルダー内で、データ ファイルは "data" というサブフォルダーに配置し、collection.json の形式で名前を付ける必要があります。 メタデータ ファイルがある場合は、"metadata" というサブフォルダーに配置し、同じ形式の collection.json を使用して名前を付ける必要があります。 メタデータ ファイルは、MongoDB bsondump ツールによって生成されたものと同じ形式にする必要があります。
重要
MongoDB サーバー上で自己署名証明書を使用することはお勧めできません。 ただし、使用する場合は、接続文字列モードを使用してサーバーに接続し、必ず接続文字列に "" を付けてください。
&sslVerifyCertificate=false
DNS の名前解決ができない場合は、IP アドレスを使用できます。
[保存] を選択します。
ソース サーバーのアドレスは、ソースがレプリカ セットの場合はプライマリのアドレス、シャード化された MongoDB クラスターの場合はルーターのアドレスである必要があります。 シャード化された MongoDB クラスターの場合、Azure Database Migration Service がクラスター内の個々のシャードに接続できる必要があります。このために、他のマシンでもファイアウォールを開く必要が生じる場合があります。
ターゲット詳細を指定する
[移行のターゲットの詳細] 画面で、ターゲットの Azure Cosmos DB アカウントの接続の詳細を指定します。これは、MongoDB データの移行先である、事前プロビジョニング済みの MongoDB 用 Azure Cosmos DB アカウントです。
[保存] を選択します。
ターゲット データベースにマップする
[Map to target databases](ターゲット データベースにマップ) 画面で、移行用のソース データベースとターゲット データベースをマップします。
ターゲット データベースにソース データベースと同じデータベース名が含まれている場合、Azure Database Migration Service では、既定でターゲット データベースが選択されます。
データベース名の横に [作成] と表示される場合は、Azure Database Migration Service でターゲット データベースが見つからず、サービスによってデータベースが自動的に作成されることを示します。
移行のこの時点で、データベースに対する共有スループットが必要な場合は、スループットの RU を指定します。 Azure Cosmos DB では、データベースレベルで、またはコレクションごとに個別に、スループットをプロビジョニングできます。 スループットは、Azure Cosmos DB の要求ユニット (RU) で測定されます。 Azure Cosmos DB の価格の詳細を確認してください。
[保存] を選択します。
[コレクション設定] 画面で、コレクションの一覧表示を展開し、移行されるコレクションの一覧を確認します。
Azure Database Migration Service では、ソースの MongoDB インスタンスには存在していて、ターゲットの Azure Cosmos DB アカウントには存在していない、すべてのコレクションが自動的に選択されます。 データが既に含まれているコレクションを再度移行する場合は、この画面でコレクションを明示的に選択する必要があります。
コレクションで使用する RU の数を指定することができます。 ほとんどの場合、500 (シャード化されたコレクションの場合、最小は 1000) から 4000 までの値で十分です。 Azure Database Migration Service では、コレクションのサイズに基づいて適切な既定値が提案されます。
実行を高速化するために、必要に応じて Azure Database Migration Service の複数のインスタンスを使用して、データベースの移行とコレクションを並列して実行します。
また、最適なスケーラビリティのために、シャード キーを指定して Azure Cosmos DB のパーティション分割を利用することもできます。 シャード/パーティション キーの選択に関するベスト プラクティスを確認してください。 パーティション キーを持っていない場合は、スループット向上のために、シャーディング キーとして _id を常に使用できます。
[保存] を選択します。
[Migration summary](移行の概要) 画面の [アクティビティ名] ボックスに移行アクティビティの名前を指定します。
移行を実行する
[移行の実行] を選択します。
移行アクティビティ ウィンドウが表示され、アクティビティの [状態] が表示されます。
移行を監視する
移行アクティビティ画面で、移行の [状態] が [再生中] になるまで [最新の情報に更新] を選択して表示を更新します。
注意
アクティビティを選択して、データベース レベルおよびコレクション レベルの移行メトリックの詳細を取得できます。
Azure Cosmos DB 内のデータを検証する
移行を完了する
ソースのすべてのドキュメントが Azure Cosmos DB ターゲットで使用可能になったら、移行アクティビティのコンテキスト メニューから [完了] を選択して、移行を完了します。
このアクションにより、保留中の変更がすべて再生し終わり、移行が完了します。
移行後の最適化
MongoDB データベースの格納データを Azure Cosmos DB for MongoDB に移行したら、Azure Cosmos DB に接続してデータを管理できます。 また、インデックス作成ポリシーの最適化、既定の整合性レベルの更新、Azure Cosmos DB アカウントのグローバル分散の構成など、移行後の他の最適化手順を実行することもできます。 詳細については、「移行後の最適化」を参照してください。
その他のリソース
Azure Cosmos DB への移行のための容量計画を実行しようとしていますか?
- 既存のデータベース クラスター内の仮想コアとサーバーの数のみがわかっている場合は、仮想コアまたは vCPU を使用した要求ユニットの見積もりに関するページを参照してください
- 現在のデータベース ワークロードに対する通常の要求レートがわかっている場合は、Azure Cosmos DB Capacity Planner を使用した要求ユニットの見積もりに関するページを参照してください