演習: MongoDB のワークロードを Cosmos DB に移行する

完了

温度データを収集する IoT センサーを使用する公益事業の仕事をしています。 気温は、タイムスタンプと共に MongoDB データベースに記録されます。 各デバイスには一意の ID があります。 これらのデバイスをシミュレートする MongoDB アプリケーションを実行し、データをデータベースに格納します。 また、ユーザーが各デバイスの統計情報を照会できるようにする 2 つ目のアプリケーションも使用します。 MongoDB から Cosmos DB にデータベースを移行した後、Cosmos DB に接続するように両方のアプリケーションを構成し、それでも正常に機能していることを確認します。

この演習では、既存の MongoDB データベースを使用して、Cosmos DB に移行します。 Azure Database Migration Services を使用します。 また、MongoDB データベースを使用する既存のアプリケーションを再構成して、Cosmos DB データベースに接続する方法についても説明します。

重要

Azure Data Migration Service は、無料の Azure サンドボックス環境ではサポートされていません。 以下の手順を自分の個人サブスクリプションで実行してみるのでも、読んでデータベースの移行方法を理解するだけでもかまいません。

Azure で MongoDB データベースを作成する

まず、温度デバイスからキャプチャされたデータを保持するために MongoDB データベースを作成します。

リソース グループと仮想ネットワークを作成する

  1. Web ブラウザーを使用して新しいタブを開き、Azure portal に移動します。

  2. Azure portal で [リソース グループ] を選択し、[+ 追加] を選択します。

  3. [リソース グループを作成します] ページで、次の詳細を入力します。

    プロパティ
    サブスクリプション <自分のサブスクリプション>
    リソース グループ mongodbrg
    リージョン 最も近い場所を選択します
  4. [確認および作成] を選択し、次に [作成] を選択します。 リソース グループが作成されるまで待ちます。

  5. Azure portal のメニューで [+ リソースの作成] を選択します。

  6. [新規] ページの [Marketplace を検索] ボックスに「Virtual Network」と入力して、Enter キーを押します。

  7. [仮想ネットワーク] ページで、 [作成] を選択します。

  8. [仮想ネットワークの作成] ページで次の詳細を入力し、[次へ: IP アドレス] を選択します。

    プロパティ
    リソース グループ mongodbrg
    名前 databasevnet
    リージョン リソース グループに指定したのと同じ場所を選択します
  9. [IP アドレス] ページで、[IPv4 アドレス空間] を「10.0.0.0/24」に設定します。

  10. 既定のサブネットを選択し、[サブネットの削除] を選択します。

  11. [+ サブネットの追加] を選択します。 [サブネットの追加] ペインで、[サブネット名] を「default」に設定し、[サブネット アドレス範囲] を「10.0.0.0/28」に設定して、[追加] を選択します。

  12. [IP アドレス] ページで、[次へ: セキュリティ] を選択します。

  13. [セキュリティ] ページで [Azure DDoS ネットワーク保護][無効] に設定され、[ファイアウォール][無効] に設定されていることを確認してください。 [Review + create](レビュー + 作成) を選択します。

  14. [仮想ネットワークの作成] ページで、[作成] を選択します。 仮想ネットワークが作成されるのを待ってから、続行してください。

MongoDB データベース サーバーを作成する

  1. Azure portal のメニューで [+ リソースの作成] を選択します。

  2. [Marketplace で検索] ボックスに「Ubuntu」と入力し、Enter キーを押します。

  3. [Marketplace] ページで、[UBUNTU Server 18.04 LTS] を選択します。

  4. [Ubuntu Server 18.04 LTS] ページで、[作成] を選択します。

  5. [仮想マシンの作成] ページで、次の詳細を入力します。

    プロパティ
    リソース グループ mongodbrg
    仮想マシン名 mongodbserver
    リージョン リソース グループに指定したのと同じ場所を選択します
    可用性のオプション インフラストラクチャ冗長は必要ありません
    イメージ Ubuntu Server 18.04 LTS - Gen1
    Azure Spot インスタンス オフ
    サイズ Standard A1_v2
    認証の種類 パスワード
    ユーザー名 azureuser
    Password Pa55w.rdPa55w.rd
    パスワードの確認 Pa55w.rdPa55w.rd
    パブリック受信ポート [選択したポートを許可する]
    受信ポートの選択 SSH (22)
  6. [次へ: ディスク]> を選択します。

  7. [ディスク] ページで、既定の設定をそのままにし、[次へ: ネットワーク ]> を選択します。

  8. [ネットワーク] ページで、以下の詳細を入力します。

    プロパティ
    仮想ネットワーク databasevnet
    Subnet 規定値 (10.0.0.0/28)
    パブリック IP (新規) mongodbserver-ip
    NIC ネットワーク セキュリティ グループ 詳細設定
    ネットワーク セキュリティ グループを構成する (新規) mongodbserver-nsg
    Accelerated Networking オフ
    負荷分散 オフ
  9. [確認と作成]> を選択します。

  10. 検証ページで [作成] を選択します。

  11. 仮想マシンがデプロイされるまで待ってから続けます

  12. Azure portal のメニューで、[すべてのリソース] を選択します。

  13. [すべてのリソース] ページで、mongodbserver-nsg を選択します。

  14. mongodbserver-nsg のページの [設定] で、[受信セキュリティ規則] を選択します。

  15. [mongodbserver-nsg - 受信セキュリティ規則] ページで、[+ 追加] を選択します。

  16. [受信セキュリティ規則の追加] ペインで、次の詳細を入力します。

    プロパティ
    source [任意]
    Source port ranges *
    宛先 [任意]
    宛先ポート範囲 8080
    Protocol [任意]
    アクション Allow
    Priority 1030
    名前 Mongodb-port
    説明 クライアントから MongoDB への接続に使用するポート
  17. [追加] を選択します。

注意

この演習では、ポート 8080 を使用するように MongoDB を構成します。 これは、この環境のセキュリティ制約によってのみ必要になります。 通常は、MongoDB の既定のポート 27017 を使用します。

MongoDB をインストールする

  1. Azure portal のメニューで、[すべてのリソース] を選択します。

  2. [すべてのリソース] ページで、mongodbserver-ip を選択します。

  3. mongodbserver-ip のページで、[IP アドレス] を記録しておきます。

  4. Azure portal の上部にあるツール バーで、[Cloud Shell] を選択します。

  5. [ストレージがマウントされていません] というメッセージ ボックスが表示されたら、[ストレージの作成] を選択します。

  6. Cloud Shell が起動したら、Cloud Shell ウィンドウの上にあるドロップダウン リストで、[Bash] を選択します。

  7. Cloud Shell で次のコマンドを入力して、mongodbserver 仮想マシンに接続します。 <ip address> を、mongodbserver-ip の IP アドレスの値に置き換えます。

    ssh azureuser@<ip address>
    
  8. プロンプトで「yes」と入力して接続を続けます。

  9. パスワード Pa55w.rdPa55w.rd を入力します。

  10. パッケージ データベースを再度読み込むには、次のコマンドを入力します。

    sudo apt-get update
    
  11. MongoDB をインストールするには、次のコマンドを入力します。

    sudo apt-get install -y mongodb
    

    インストールは、パッケージのインストール、準備、および展開に関するメッセージと共に進める必要があります。 インストールの完了には数分かかる場合があります。

MongoDB データベースを構成する

既定では、Mongo DB インスタンスは、認証なしで実行するように構成されています。 このタスクでは、ローカル ネットワーク インターフェイスにバインドするように MongoDB を構成して、他のコンピューターからの接続を受け入れるようにします。 また、認証を有効にし、移行を実行するために必要なユーザー アカウントを作成します。 最後に、テスト アプリケーションからデータベースに対してクエリを実行するために使用できるアカウントを追加します。

  1. MongoDB 構成ファイルを開くには、次のコマンドを実行します。

    sudo nano /etc/mongodb.conf
    
  2. ファイルで bind_ip 設定を見つけ、0.0.0.0 に設定します。

  3. ポート設定を見つけて、8080 に設定します。

  4. 構成ファイルを保存するには、Esc キーを押してから、Ctrl + X キーを押します。変更したバッファーを保存するには、y キーを押してから Enter キーを押します。

  5. MongoDB サービスを再起動して変更を適用するには、次のコマンドを入力します。

    sudo service mongodb restart
    
  6. MongoDB サービスに接続するには、次のコマンドを入力します。

    mongo --host 127.0.0.1:8080
    
  7. > プロンプトで、admin データベースに切り替えるには、次のコマンドを実行します。

    use admin;
    
  8. administrator という名前の新しいユーザーを作成するには、次のコマンドを実行します。 読みやすくするために、コマンドを 1 行または複数行にわたって入力できます。 mongo プログラムがセミコロンに到達すると、コマンドが実行されます。

    db.createUser(
        {
            user: "administrator",
            pwd: "Pa55w.rd",
            roles: [
                { role: "userAdminAnyDatabase", db: "admin" },
                { role: "clusterMonitor", db:"admin" },
                "readWriteAnyDatabase"
            ]
        }
    );
    
  9. mongo プログラムを終了するには、次のコマンドを入力します。

    exit;
    
  10. 新しい管理者アカウントを使用して MongoDB に接続するには、次のコマンドを実行します。

    mongo admin -u "administrator" -p "Pa55w.rd" --host 127.0.0.1:8080
    
  11. Devicedata データベースに切り替えるには、次のコマンドを実行します。

    use DeviceData;    
    
  12. アプリケーションでデータベースに接続するために使用される deviceadmin という名前のユーザーを作成するには、次のコマンドを実行します。

    db.createUser(
        {
            user: "deviceadmin",
            pwd: "Pa55w.rd",
            roles: [ { role: "readWrite", db: "DeviceData" } ]
        }
    );
    
  13. mongo プログラムを終了するには、次のコマンドを入力します。

    exit;
    
  14. 次のコマンドを実行して、mongodb サービスを再起動します。 エラー メッセージなしでサービスが再起動されることを確認します。

    sudo service mongodb restart
    
  15. 次のコマンドを実行して、deviceadmin ユーザーとして mongodb にログインできることを確認します。

    mongo DeviceData -u "deviceadmin" -p "Pa55w.rd" --host 127.0.0.1:8080
    
  16. > プロンプトで、次のコマンドを実行して mongo シェルを終了します。

    exit;
    
  17. Bash プロンプトで次のコマンドを入力して、MongoDB サーバーから切断し Cloud Shell に戻ります。

    exit
    

MongoDB データベースの設定とクエリ

これで、MongoDB サーバーとデータベースが作成されました。 次の手順では、このデータベースのデータを設定してクエリを実行できるサンプル アプリケーションを示します。

MongoDB データベースを設定するアプリをビルドして実行する

  1. Azure Cloud Shell で次のコマンドを実行して、サンプル コードをダウンロードします。

    git clone https://github.com/MicrosoftLearning/DP-060T00A-Migrating-your-Database-to-Cosmos-DB migration-workshop-apps
    
  2. migration-workshop-apps/MongoDeviceDataCapture/MongoDeviceCapture フォルダーに移動します。

    cd ~/migration-workshop-apps/MongoDeviceDataCapture/MongoDeviceDataCapture
    
  3. コード エディターを使用して、TemperatureDevice.cs ファイルを確認します。

    code TemperatureDevice.cs
    

    このファイルのコードには、TemperatureDevice という名前のクラスが含まれています。このクラスは、データをキャプチャして MongoDB データベースに保存する温度デバイスをシミュレートします。 .NET Framework 向けの MongoDB ライブラリを使用しています。 TemperatureDevice コンストラクターは、アプリケーション構成ファイルに格納されている設定を使用してデータベースに接続されます。 RecordTemperatures メソッドは、読み取りを生成し、データベースに書き込みます。

  4. コード エディターを閉じて、ThermometerReading.cs ファイルを開きます。

    code ThermometerReading.cs
    

    このファイルには、アプリケーションによってデータベースに格納されるドキュメントの構造が表示されます。 各ドキュメントには次のフィールドが含まれています。

    • オブジェクト ID。 これは、各ドキュメントを一意に識別するために MongoDB によって生成される "_id" フィールドです。
    • デバイス ID。 各デバイスには、"Device" というプレフィックスの付いた番号が付いています。
    • デバイスによって記録された温度。
    • 温度が記録された日時。
  5. コード エディターを閉じて、App.config ファイルを開きます。

    code App.config
    

    このファイルには、MongoDB データベースに接続するための設定が含まれています。

  6. アドレス キーの値を、前に記録した MongoDB サーバーの IP アドレスに設定します。

  7. アプリで使用されるポートを 8080 に変更します。

  8. CTRL + s キー、その後 CTRL + q キーを使用してファイルを保存し、エディターを閉じます。

  9. 次のコマンドを実行して、アプリケーションをリビルドします。

    dotnet build
    

    これには約 5 分かかることがあります。

  10. アプリケーションを実行します。

    dotnet run
    

    アプリケーションでは、同時に実行された 100 のデバイスをシミュレートします。 アプリケーションを 2、3 分間実行し、Enter キーを押して停止します。

別のアプリをビルドして実行し、MongoDB データベースにクエリを実行する

  1. DP160T00A-Migrating-your-Database-to-Cosmos-DB/MongoDeviceDataCapture/DeviceDataQuery フォルダーに移動します。

    cd ~/migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery
    

    このフォルダーには、各デバイスによってキャプチャされたデータの分析に使用できる別のアプリケーションが含まれています。

  2. コード エディターを使用して、 Program.cs ファイルを確認します。

    code Program.cs
    

    アプリケーションは (ファイルの一番下にある ConnectToDatabase メソッドを使用して) データベースに接続され、ユーザーにデバイス番号の入力が求められます。 このアプリケーションでは、.NET Framework 向けの MongoDB ライブラリを使用して、指定されたデバイスの次の統計情報を計算する集計パイプラインを作成および実行します。

    • 記録された測定の数。
    • 記録された平均平均気温。
    • 最小の読み取り。
    • 最大の読み取り。
    • 最新の読み取り。
  3. コード エディターを閉じて、App.config ファイルを開きます。

    code App.config
    
  4. アドレス キーの値を、前に記録した MongoDB サーバーの IP アドレスに設定します。

  5. アプリで使用されるポートを 8080 に変更します。

  6. CTRL + s キー、その後 CTRL + q キーを使用してファイルを保存し、エディターを閉じます。

  7. アプリケーションをビルドして実行します。

    dotnet build
    dotnet run
    
  8. [デバイス番号の入力] プロンプトで、0 から 99 の値を入力します。 アプリケーションでは、データベースに対してクエリが実行され、統計の計算と、結果の表示が行われます。 Q キーを押してアプリケーションを終了します。

MongoDB データベースを Cosmos DB に移行する

次の手順では、MongoDB データベースを Cosmos DB に転送します。

Cosmos アカウントとデータベースを作成する

  1. Azure portal に戻ります。

  2. メニューで、[+ リソースの作成] を選択します。

  3. [新規] ページの [Marketplace で検索] ボックスに「*Azure Cosmos DB」と入力し、Enter キーを押します。

  4. [Azure Cosmos DB] ページで、 [作成] を選択します。

  5. [Azure Cosmos DB アカウントの作成] ページで、次の設定を入力します。

    プロパティ
    Resource group mongodbrg
    アカウント名 mongodb*nnn*nnn は、ユーザーが選択するランダムな数値です
    API Azure Cosmos DB for MongoDB API
    ノートブック "オフ"
    場所 MongoDB サーバーと仮想ネットワークに使用したものと同じ場所を指定します
    容量モード プロビジョニング済みスループット
    Apply Free Tier Discount (Free レベルの割引の適用) [適用]
    アカウントの種類 "非運用"
    Version 3.6
    geo 冗長性 無効化
    マルチ リージョン書き込み 無効化
    可用性ゾーン 無効化
  6. [Review + create](レビュー + 作成) を選択します。

  7. 検証ページで [作成] を選択し、Cosmos DB アカウントがデプロイされるのを待ちます。

  8. Azure portal のメニューで [すべてのリソース] を選択し、自分の新しい Cosmos DB アカウントを選択します (mongodbnnn)。

  9. mongodbnnn のページで、[データ エクスプローラー] を選択します。

  10. [データ エクスプローラー] ウィンドウで [新しいコレクション] を選択します。

  11. [コレクションの追加] ウィンドウで、次の設定を指定します。

    プロパティ
    データベース ID [新規作成] を選択し、「DeviceData」と入力します
    データベースのスループットのプロビジョニング selected
    スループット 10000
    コレクション ID Temperatures
    ストレージの容量 無制限
    シャード キー deviceID
    シャード キーが 100 バイトを超える 選択解除したままにする
    すべてのフィールドにワイルドカード インデックスを作成する 選択解除したままにする
    分析ストア "オフ"
  12. [OK] を選択します。

Database Migration Service を作成する

  1. Azure portal に戻ります。

  2. [すべてのサービス] をクリックし、[サブスクリプション] をクリックして、自分のサブスクリプションをクリックします。

  3. [サブスクリプション] ページの [設定] で、[リソース プロバイダー] をクリックします。

  4. [名前でフィルター] ボックスに「DataMigration」と入力し、その後 [Microsoft.DataMigration] をクリックします。

  5. Microsoft.DataMigration が登録されていない場合は、[登録] をクリックし、[状態][登録済み] に変わるまで待ちます。 状態の変化を確認するには、[更新] をクリックする必要がある場合があります。

  6. Azure portal のメニューで [+ リソースの作成] を選択します。

  7. [新規] ページの [Marketplace で検索] ボックスに「Azure Database Migration Service」と入力し、Enter キーを押します。

  8. [Azure Database Migration Service] ページで、 [作成] を選択します。

  9. [移行サービスの作成] ページで、次の設定を入力します。

    プロパティ
    Resource group mongodbrg
    サービス名 MongoDBMigration
    場所 以前使用したのと同じ場所を選択します
    サービス モード Azure
    価格レベル Standard: 1 仮想コア
  10. [次へ: ネットワーク] を選択します。

  11. [ネットワーク] ページで、[databasevnet/default] を選択し、次に [確認と作成] を選択します。

  12. [作成] を選択し、サービスがデプロイされるまで待ってから続行します。 この操作には約 10 分かかることがあります。

新しい移行プロジェクトを作成して実行します

  1. Azure portal のメニューで [リソース グループ] を選びます。

  2. [リソース グループ] ウィンドウで、[mongodbrg] を選択します。

  3. [mongodbrg] ウィンドウで、[MongoDBMigration] を選択します。

  4. [MongoDBMigration] ページで、[+ 新しい移行プロジェクト] を選択します。

  5. [新しい移行プロジェクト] ページで、次の設定を入力します。

    プロパティ [値]
    プロジェクト名 MigrateTemperatureData
    ソース サーバー名 MongoDB
    ターゲット サーバー名 Cosmos DB (MongoDB API)
    アクティビティの種類を選択します オフライン データの移行
  6. [アクティビティの作成と実行] を選択します。

  7. 移行ウィザードが起動したら、[ソースの詳細] ページで、次の詳細を入力します。

    プロパティ
    モード 標準モード
    Source server name (依存元サーバー名) 前に記録した mongodbserver-ip の IP アドレスの値を指定します
    [サーバー ポート] 8080
    [ユーザー名] administrator
    Password Pa55w.rd
    SSL を必須にする 選択解除
  8. Next:ターゲットの選択 を選択します。

  9. [ターゲットの選択] ページで、次の詳細を入力します。

    プロパティ
    モード Cosmos DB ターゲットを選択します
    Cosmos DB 名を選択します mongodb*nnn*
    接続文字列 Cosmos DB アカウント向けに生成された接続文字列を受け入れます
  10. [次へ: データベースの設定] を選択します。

  11. [データベースの設定] ページで、次の詳細を入力します。

    プロパティ [値]
    [移行元データベース] DeviceData
    [対象になるデータベース] DeviceData
    スループット (RU/秒) 1000
    コレクションをクリーンアップする このボックスをオフにします
  12. [次へ: コレクション設定] を選択します。

  13. [コレクション設定] ページで、DeviceData データベースのドロップダウンの矢印を選択し、次の情報を入力します。

    プロパティ
    名前 Temperatures
    ターゲット コレクション Temperatures
    スループット (RU/秒) 1000
    シャード キー deviceID
    一意 空白のままにします
  14. [次へ: 移行の概要] を選択します。

  15. [移行の概要] ページで、[アクティビティ名] フィールドに「mongodb-migration」と入力し、次に [移行の開始] を選択します。

  16. [mongodb-migration] ページで、移行が完了するまで 30 秒ごとに [更新] を選択します。 処理されたドキュメントの数をメモします。

移行が正常に終了したことを確認する

  1. Azure portal のメニューで、[すべてのリソース] を選択します。

  2. [すべてのリソース] ページで、mongodbnnn を選択します。

  3. [Mongodb*nnn] ページで、[データ エクスプローラー] を選択します。

  4. [データ エクスプローラー] ウィンドウで、[DeviceData] データベースを展開し、[Temperatures] コレクションを展開して、[ドキュメント] を選択します。

  5. [ドキュメント] ペインで、ドキュメントの一覧をスクロールします。 各ドキュメントのドキュメント id (_id) とシャード キー (/deviceID) が表示されます。

  6. 任意のドキュメントを選択します。 表示されたドキュメントの詳細が表示されます。 一般的なドキュメントは次のようになります。

    {
        "_id" : ObjectId("5ce8104bf56e8a04a2d0929a"),
        "deviceID" : "Device 83",
        "temperature" : 19.65268837271849,
        "time" : 636943091952553500
    }
    
  7. [ドキュメント エクスプローラー] ペインのツールバーで、[新しいシェル] を選択します。

  8. [シェル 1] ウィンドウで、> プロンプトに次のコマンドを入力し、Enter キーを押します。

    db.Temperatures.count()
    

    このコマンドは、Temperatures コレクション内のドキュメントの数を表示します。 この値は、移行ウィザードによって報告された数値と一致している必要があります。

  9. 次のコマンドを入力して、Enter キーを押します。

    db.Temperatures.find({deviceID: "Device 99"})
    

    このコマンドは、Device 99 のドキュメントをフェッチして表示します。

Cosmos DB を使用するように既存のアプリケーションを再構成して実行する

最後の手順は、Cosmos DB を使用するように既存の MongoDB アプリケーションを再構成し、その後も機能することを検証することです。 この場合、アプリケーションからデータベースに接続する方法を変更する必要がありますが、アプリケーションのロジックは変更されません。

  1. mongodbnnn のペインの [設定] で、[接続文字列] を選択します。

  2. [mongodbnnn 接続文字列] ページで、次の設定をメモしておきます。

    • Host
    • ユーザー名
    • プライマリ パスワード
  3. Cloud Shell ウィンドウに戻り (セッションがタイムアウトになった場合は再接続)、 migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery フォルダーに移動します。

    cd ~/migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery
    
  4. コード エディターで App.config ファイルを開きます。

    code App.config
    
  5. ファイルの [MongoDB の設定] セクションで、既存の設定をコメント アウトします。

  6. [Cosmos DB Mongo API の設定] セクションの設定をコメント解除し、次のようにこれらの設定の値を設定します。

    設定 [値]
    Address [mongodbnnn 接続文字列] ページのホスト
    Port [mongodbnnn 接続文字列] ページのポート
    ユーザー名 [mongodbnnn 接続文字列] ページのユーザー名
    Password [mongodbnnn 接続文字列] ページのプライマリ パスワード

    完了すると、ファイルは次のようになります。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <appSettings>
            <add key="Database" value="DeviceData" />
            <add key="Collection" value="Temperatures" />
    
            <!-- Settings for MongoDB 
            <add key="Address" value="nn.nn.nn.nn" />
            <add key="Port" value="27017" />
            <add key="Username" value="deviceadmin" />
            <add key="Password" value="Pa55w.rd" />
            End of settings for MongoDB -->
    
            <!-- Settings for CosmosDB Mongo API -->
            <add key="Address" value="mongodbnnn.documents.azure.com"/>
            <add key="Port" value="10255"/>
            <add key="Username" value="mongodbnnn"/>
            <add key="Password" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=="/>
            <!-- End of settings for CosmosDB Mongo API -->
        </appSettings>
    </configuration>
    
  7. ファイルを保存して、コード エディターを閉じます。

  8. コード エディターを使って、Program.cs ファイルを開きます。

    code Program.cs
    
  9. ConnectToDatabase メソッドまで下にスクロールします。

  10. MongoDB に接続するための資格情報を設定する行をコメント アウトし、Cosmos DB に接続するための資格情報を指定するステートメントをコメント解除します。 コードは、次のようになります。

    // Connect to the MongoDB database
    MongoClient client = new MongoClient(new MongoClientSettings
    {
        Server = new MongoServerAddress(address, port),
        ServerSelectionTimeout = TimeSpan.FromSeconds(10),
    
        //
        // Credential settings for MongoDB
        //
    
        // Credential = MongoCredential.CreateCredential(database, azureLogin.UserName, azureLogin.SecurePassword),
    
        //
        // Credential settings for CosmosDB Mongo API
        //
    
        UseTls = true,
        Credential = new MongoCredential("SCRAM-SHA-1", new MongoInternalIdentity(database, azureLogin.UserName), new PasswordEvidence(azureLogin.SecurePassword))
    
        // End of Mongo API settings
    });
    

    これらの変更は、元の MongoDB データベースが SSL 接続を使用していなかったために必要です。 Cosmos DB では常に SSL を使用します。

  11. ファイルを保存して、コード エディターを閉じます。

  12. アプリケーションをリビルドし、実行します。

    dotnet build
    dotnet run
    
  13. [デバイス番号の入力] プロンプトで、0 から 99 の値を入力します。 アプリケーションは、Cosmos DB データベースに保持されているデータを使用していることを除き、以前とまったく同じように実行されます。

Cosmos DB でのクエリ パフォーマンスの改善

Cosmos DB では、インデックスを追加してクエリのパフォーマンスを向上させることができます。 deviceID を集計しているため、そのフィールドをインデックスとして追加すると、クエリの速度が向上します。

  1. Azure portal に戻ります。

  2. 左側で、[データ エクスプローラー] を選択します。

  3. [データ エクスプローラー] ウィンドウで、[DeviceData] データベースを展開し、[Temperatures] コレクションを展開して、[設定] を選択します。

    Screenshot showing adding a Cosmos DB indexing policy.

  4. [インデックス作成ポリシー] を選択します。

  5. [_Id] に新しいインデックスを追加し、[定義] に「deviceID」と入力し、[タイプ][単一のフィールド] を選択します。

  6. [保存] を選択して、新しいインデックスを追加します。

  7. Cloud Shell に戻り、もう一度クエリを実行し、アプリケーションで向上した応答を確認します。

  8. 他のデバイス番号を使用してアプリケーションをテストします。 「Q」と入力して終了します。

これで、MongoDB データベースを Cosmos DB に移行し、既存の MongoDB アプリケーションを再構成して新しい Cosmos DB データベースに接続することができました。

作成したリソースをクリーンアップする

重要

独自の個人用サブスクリプションでこれらの手順を実行した場合は、リソースを個別に削除するか、リソース グループを削除してリソースのセット全体を削除することができます。 リソースを実行したままにすると、お金がかかる場合があります。

  1. リソース グループを削除するには、Cloud Shell を使用して次のコマンドを実行します。

    az group delete --name mongodbrg