快速入门:将现有的 MongoDB Node.js Web 应用迁移到 Azure Cosmos DB

适用对象: MongoDB

在本快速入门中,你将使用 Azure 本地 Shell 以及从 GitHub 克隆的 MEAN(MongoDB、Express、Angular 和 Node.js)应用来创建和管理 Azure Cosmos DB for Mongo DB API 帐户。 Azure Cosmos DB 是一种多模型数据库服务,可让你通过多区域分布和水平缩放功能快速创建和查询文档、表、键/值和图数据库。

先决条件

  • 具有活动订阅的 Azure 帐户。 如果没有 Azure 订阅,请在开始前创建一个试用帐户。 你还可以将 Azure Cosmos DB 模拟器与连接字符串 .mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true 配合使用。

  • Node.js,应具备 Node.js 的实践知识。

  • Git

可以使用本地 Azure CLI。

  • 如果需要,请安装 Azure CLI 来运行 CLI 参考命令。

  • 本地 Azure CLI,请了解如何安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 通过使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

  • 本文需要 Azure CLI 版本 2.0 或更高版本。

克隆示例应用程序

运行以下命令克隆示例存储库。 此示例存储库包含默认的 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
    

运行应用程序

此 MongoDB 应用程序以 node.js 编写,连接到支持 MongoDB 客户端的 Azure Cosmos DB 数据库。 换言之,应用程序完全知道数据存储在 Azure Cosmos DB 数据库中。

安装所需的包,并启动应用程序。

cd mean
npm install
npm start

应用程序尝试连接到 MongoDB 源并失败,当输出返回“[MongoError: 连接 ECONNREFUSED 127.0.0.1:27017]”时,继续并退出应用程序。

登录 Azure

如果使用已安装的 Azure CLI,请使用 az login 命令登录到 Azure 订阅,按屏幕说明操作。

注意

在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

az cloud set -n AzureChinaCloud
az login 

添加 Azure Cosmos DB 模块

如果使用已安装的 Azure CLI,请运行 az 命令,检查是否已安装 cosmosdb 组件。 如果 cosmosdb 在基本命令列表中,请继续执行下一个命令。

如果 cosmosdb 不在基本命令列表中,请重装 Azure CLI

创建资源组

使用 az group create 创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源(例如 Web 应用、数据库和存储帐户)的逻辑容器。

以下示例在中国北部区域中创建一个资源组。 选择资源组的唯一名称。

az group create --name myResourceGroup --location "China North"

创建 Azure Cosmos DB 帐户

使用 az cosmosdb create 命令创建 Cosmos 帐户。

在以下命令中,请将 <cosmosdb-name> 占位符替换成自己的唯一 Cosmos 帐户名。 此唯一名称将用作 Cosmos DB 终结点 (https://<cosmosdb-name>.documents.azure.cn/) 的一部分,因此这个名称需要在 Azure 中的所有 Cosmos 帐户中具有唯一性。

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

--kind MongoDB 参数启用 MongoDB 客户端连接。

创建 Azure Cosmos DB 帐户后,Azure CLI 会显示类似于以下示例的信息:

注意

此示例使用 JSON 作为 Azure CLI 输出格式,此为默认设置。 若要使用其他输出格式,请参阅 Azure CLI 命令的输出格式

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

将 Node.js 应用程序连接至数据库

在此步骤中,将 MEAN.js 示例应用程序连接到你刚才创建的 Azure Cosmos DB 数据库帐户。

在 Node.js 应用程序中配置连接字符串

在 MEAN.js 存储库中,打开 config/env/local-development.js

请将此文件的内容替换为以下代码。 另外,请务必将两个 <cosmosdb-name> 占位符替换为 Cosmos 帐户名。

'use strict';

module.exports = {
  db: {
    uri: 'mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-name>.documents.azure.cn: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。 在顶部菜单中选择“注册”,并尝试创建两个虚拟用户。

MEAN.js 示例应用程序将用户数据存储在数据库中。 如果上述操作成功并且 MEAN.js 可自动登录到已创建的用户,则表示 Azure Cosmos DB 连接可正常工作。

MEAN.js connects successfully to MongoDB

在数据资源管理器中查看数据

Cosmos 数据库中存储的数据可用于在 Azure 门户中查看和查询。

若要查看、查询和处理在上一步骤中创建的用户数据,请在 Web 浏览器中登录到 Azure 门户

在顶部搜索框中,输入 Azure Cosmos DB。 打开 Cosmos 帐户边栏选项卡后,请选择 Cosmos 帐户。 在左侧导航栏中,选择“数据资源管理器”。 在“集合”窗格中展开你的集合,即可查看该集合中的文档,查询数据,甚至可以创建和运行存储过程、触发器与 UDF。

Data Explorer in the Azure portal

将 Node.js 应用程序部署到 Azure

此步骤将 Node.js 应用程序部署到 Cosmos DB。

可能已经注意到,前面更改的配置文件适用于开发环境 (/config/env/local-development.js)。 将应用程序部署到应用服务后,该应用程序默认在生产环境中运行。 因此,现在需要对相应的配置文件做出相同的更改。

在 MEAN.js 存储库中,打开 config/env/production.js

db 对象中,替换 uri 的值,如下方示例所示。 请务必像前面一样替换占位符。

'mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-name>.documents.azure.cn: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 门户的“搜索”栏中,搜索并选择“资源组” 。

  2. 从列表中选择为本快速入门创建的资源组。

    Select the resource group to delete

  3. 在资源组“概览”页上,选择“删除资源组” 。

    Delete the resource group

  4. 在下一窗口中输入要删除的资源组的名称,然后选择“删除” 。

后续步骤

本快速入门介绍了如何使用 Azure CLI 创建 Azure Cosmos DB MongoDB API 帐户,以及如何创建和运行 MEAN.js 应用,以将用户添加到该帐户。 现在可以将其他数据导入 Azure Cosmos DB 帐户了。

尝试为迁移到 Azure Cosmos DB 进行容量规划? 可以使用有关现有数据库群集的信息进行容量规划。