クイック スタート:既存の MongoDB Node.js Web アプリを Azure Cosmos DB に移行する

適用対象: MongoDB 用 Azure Cosmos DB API

このクイックスタートでは、Azure Cloud Shell と、GitHub からクローンした MEAN (MongoDB、Express、Angular、Node.js) アプリを使用して、Azure Cosmos DB for Mongo DB API アカウントを作成、管理します。 Azure Cosmos DB は、マルチモデル データベース サービスです。グローバルな分散と水平方向のスケーリング機能を備えたドキュメント データベースやテーブル データベース、キーと値のデータベース、グラフ データベースをすばやく作成し、クエリを実行することができます。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。または、Azure サブスクリプションなしで、Azure Cosmos DB を無料で試すこともできます。 Azure Cosmos DB Emulator を使用することもできます。接続文字列には、.mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true を使用してください。

  • Node.js とその実用的な知識。

  • Git.

  • Azure Cloud Shell で Bash 環境を使用します。

    新しいウィンドウで Cloud Shell を起動する

  • 必要に応じて、Azure CLI をインストールして、CLI リファレンス コマンドを実行します。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この記事では、Azure CLI のバージョン 2.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

サンプル アプリケーションの複製

次のコマンドを実行して、サンプル リポジトリを複製します。 このサンプル レポジトリには、既定の MEAN.js アプリケーションが含まれています。

  1. コマンド プロンプトを開いて git-samples という名前の新しいフォルダーを作成し、コマンド プロンプトを閉じます。

    mkdir "C:\git-samples"
    
  2. git bash などの git ターミナル ウィンドウを開いて、cd コマンドを使用して、サンプル アプリをインストールする新しいフォルダーに変更します。

    cd "C:\git-samples"
    
  3. 次のコマンドを実行して、サンプル レポジトリをクローンします。 このコマンドは、コンピューター上にサンプル アプリのコピーを作成します。

    git clone https://github.com/prashanthmadi/mean
    

アプリケーションの実行

Node.js で記述されたこの MongoDB アプリは、Azure Cosmos DB データベースに接続します。Azure Cosmos DB データベースは、MongoDB クライアントをサポートします。 言い換えると、Azure Cosmos DB データベースへのデータの格納は、アプリケーションでは意識されません。

必要なパッケージをインストールし、アプリケーションを起動します。

cd mean
npm install
npm start

アプリケーションは、MongoDB ソースに接続しようとして失敗しますが、そのまま続けてください。出力結果から "[MongoError: connect ECONNREFUSED 127.0.0.1:27017]" が返されたらアプリケーションを終了します。

Azure へのサインイン

インストールされた Azure CLI を使用する場合は、az login コマンドで Azure サブスクリプションにサインインし、画面上の指示に従います。 Azure Cloud Shell を使用する場合は、この手順を省略できます。

az login 

Azure Cosmos DB モジュールを追加する

インストールされた Azure CLI を使用する場合は、az コマンドを実行して、cosmosdb コンポーネントが既にインストールされているかどうかを調べます。 cosmosdb が基本コマンドの一覧にある場合は、次のコマンドに進みます。 Azure Cloud Shell を使用する場合は、この手順を省略できます。

cosmosdb が基本コマンドの一覧にない場合は、Azure CLI を再インストールします。

リソース グループを作成する

az group createリソース グループを作成します。 Azure リソース グループとは、Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。

次の例は、西ヨーロッパ リージョンにリソース グループを作成します。 リソース グループには一意の名前を選択します。

Azure Cloud Shell を使用する場合は、 [使ってみる] を選択し、画面のプロンプトに従ってログインしてから、コマンドをコマンド プロンプトにコピーします。

az group create --name myResourceGroup --location "West Europe"

Azure Cosmos DB アカウントを作成する

az cosmosdb create コマンドを使用して、Cosmos アカウントを作成します。

次のコマンドの <cosmosdb-name> プレースホルダーを独自の一意の Cosmos アカウント名に置き換えます。 この一意の名前は、Cosmos DB エンドポイント (https://<cosmosdb-name>.documents.azure.com/) の一部として使用されます。そのため、この名前は Azure 内のすべての Cosmos アカウントで一意である必要があります。

az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB

--kind MongoDB パラメーターにより、MongoDB のクライアント接続が有効になります。

Azure Cosmos DB アカウントが作成されると、Azure CLI によって次の例のような情報が表示されます。

注意

この例では、Azure CLI の出力形式として JSON を使用しています (既定)。 別の出力形式を使用する場合は、「Azure CLI コマンドの出力形式」を参照してください。

{
  "databaseAccountOfferType": "Standard",
  "documentEndpoint": "https://<cosmosdb-name>.documents.azure.com:443/",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Document
DB/databaseAccounts/<cosmosdb-name>",
  "kind": "MongoDB",
  "location": "West Europe",
  "name": "<cosmosdb-name>",
  "readLocations": [
    {
      "documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<cosmosdb-name>-westeurope",
      "locationName": "West Europe",
      "provisioningState": "Succeeded"
    }
  ],
  "resourceGroup": "myResourceGroup",
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "writeLocations": [
    {
      "documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<cosmosdb-name>-westeurope",
      "locationName": "West Europe",
      "provisioningState": "Succeeded"
    }
  ]
} 

データベースに Node.js アプリケーションを接続する

この手順では、MEAN.js サンプル アプリケーションを、先ほど作成した Azure Cosmos DB データベース アカウントに接続します。

Node.js アプリケーションでの接続文字列の構成

MEAN.js リポジトリにある config/env/local-development.js を開きます。

このファイルの内容を次のコードに置き換えます。 さらに、2 つの <cosmosdb-name> プレースホルダーを実際の Cosmos アカウント名に置き換えます。

'use strict';

module.exports = {
  db: {
    uri: 'mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-name>.documents.azure.com:10255/mean-dev?ssl=true&sslverifycertificate=false'
  }
};

キーを取得する

Cosmos データベースに接続するには、データベース キーが必要です。 az cosmosdb keys list コマンドを使用して、プライマリ キーを取得します。

az cosmosdb keys list --name <cosmosdb-name> --resource-group myResourceGroup --query "primaryMasterKey"

Azure CLI によって次の例のような情報が出力されます。

"RUayjYjixJDWG5xTqIiXjC..."

primaryMasterKey の値をコピーします。 これを local-development.js<primary_master_key> に上書きする形で貼り付けます。

変更を保存します。

アプリケーションをもう一度実行する

npm start をもう一度実行します。

npm start

開発環境が稼働したことを通知するコンソール メッセージが表示されます。

ブラウザーで http://localhost:3000 にアクセスします。 上部のメニューの [Sign Up] を選択し、ダミー ユーザーを 2 つ作成します。

MEAN.js サンプル アプリケーションでは、ユーザー データをデータベースに格納します。 操作が成功し、MEAN.js が作成されたユーザーに自動的にサインインすれば、Azure Cosmos DB 接続は機能しています。

MongoDB に正常に接続されている MEAN.js

データ エクスプローラーにデータを表示する

Cosmos データベースの格納データは、Azure portal で表示したり、クエリしたりできます。

前の手順で作成されたユーザー データを、表示、クエリ、操作するには、Web ブラウザーで Azure Portal にログインします。

上部の検索ボックスに、「Azure Cosmos DB」と入力します。 Cosmos アカウントのブレードが開いたら、自分の Cosmos アカウントを選択します。 左側のナビゲーションで、 [データ エクスプローラー] を選択します。 [コレクション] ウィンドウでコレクションを展開します。これで、コレクション内のドキュメントの表示とデータのクエリを実行でき、ストアド プロシージャ、トリガー、および UDF の作成と実行も行うことができます。

Azure portal でのデータ エクスプローラー

Azure に Node.js アプリケーションをデプロイする

この手順では、Node.js アプリケーションを Cosmos DB にデプロイします。

先ほど変更した構成ファイルは開発環境用であることにお気付きかもしれません (/config/env/local-development.js)。 アプリケーションを App Service にデプロイすると、既定では運用環境で実行されます。 したがって、ここで、同じ変更を該当する構成ファイルに対して行う必要があります。

MEAN.js リポジトリにある config/env/production.js を開きます。

次の例に示すように、db オブジェクトの uri の値を置き換えます。 前と同じように、必ずプレースホルダーを置き換えます。

'mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-name>.documents.azure.com:10255/mean?ssl=true&sslverifycertificate=false',

注意

Cosmos DB の要件上、ssl=true オプションは重要です。 詳細については、「接続文字列の要件」を参照してください。

ターミナルで、すべての変更を Git にコミットします。 両方のコマンドをコピーして、それらをまとめて実行することができます。

git add .
git commit -m "configured MongoDB connection string"

リソースをクリーンアップする

アプリと Azure Cosmos DB アカウントの使用を完了したら、それ以上料金がかからないように、作成した Azure リソースを削除できます。 リソースを削除するには、次の手順に従います。

  1. Azure portal の検索バーで、「リソース グループ」を検索して選択します。

  2. 一覧から、このクイック スタートで作成したリソース グループを選択します。

    削除するリソース グループを選択する

  3. リソース グループの [概要] ページで、[リソース グループの削除] を選択します。

    リソース グループを削除します

  4. 次のウィンドウで、削除するリソース グループの名前を入力し、[削除] を選択します。

次のステップ

このクイックスタートでは、Azure Cloud Shell を使用して Azure Cosmos DB MongoDB API アカウントを作成し、MEAN.js アプリを作成、実行してそのアカウントにユーザーを追加する方法について説明しました。 これで、Azure Cosmos DB アカウントに追加のデータをインポートできるようになりました。

Azure Cosmos DB への移行のための容量計画を実行しようとしていますか? 容量計画のために、既存のデータベース クラスターに関する情報を使用できます。