Azure Cosmos DB:借助 MongoDB API 构建 Flask 应用

Azure Cosmos DB 是 21Vianet 提供的多区域分布式多模型数据库服务。 可快速创建和查询文档数据库,这些数据库受益于 Azure Cosmos DB 核心的多区域分布和水平缩放功能。

本快速入门指南使用以下 Flask 示例并演示如何借助 Azure Cosmos DB 模拟器和 Azure Cosmos DB MongoDB API 而不是 MongoDB 构建简单的待办事项 Flask 应用。

先决条件

  • 下载 Azure Cosmos DB 模拟器。 当前只有 Windows 支持模拟器。 此示例演示如何借助 Azure 中的生产密钥使用示例,此操作可在任何平台上完成。

  • 如果尚未安装 Visual Studio Code,可为平台(Windows、Mac、Linux)快速安装 VS Code

  • 请务必通过安装任一常用 Python 扩展来添加 Python 语言支持。

    1. 选择扩展。
    2. 通过在命令面板 Ctrl+Shift+P 中键入 ext install 来安装扩展。

      本文档中的示例使用 Don Jayamanne 的常用、全功能型 Python 扩展

克隆示例应用程序

现在,请从 github 克隆 Flask-MongoDB API 应用、设置连接字符串并运行。 你会看到以编程方式处理数据是多么容易。

  1. 打开命令提示符,新建一个名为“git-samples”的文件夹,然后关闭命令提示符。

    md "C:\git-samples"
    
  2. 打开诸如 git bash 之类的 git 终端窗口,并使用 cd 命令更改为要安装示例应用的新文件夹。

    cd "C:\git-samples"
    
  3. 运行下列命令以克隆示例存储库。 此命令在计算机上创建示例应用程序的副本。

    git clone https://github.com/Azure-Samples/CosmosDB-Flask-Mongo-Sample.git
    
  4. 运行以下命令以安装 python 模块。

    pip install -r .\requirements.txt
    
  5. 在 Visual Studio Code 中打开该文件夹。

查看代码

此步骤是可选的。 如果有意了解如何使用代码创建数据库资源,可以查看以下代码片段。 否则,可以跳到运行 Web 应用

以下代码片段全部摘自 app.py 文件,并对本地 Azure Cosmos DB 模拟器使用连接字符串。 密码需要进行拆分(如下所示)以适应在其他方面无法解析的正斜杠。

  • 初始化 MongoDB 客户端、检索数据库,并进行身份验证。

    client = MongoClient("mongodb://127.0.0.1:10250/?ssl=true") #host uri
    db = client.test    #Select the database
    db.authenticate(name="localhost",password='C2y6yDjf5' + r'/R' + '+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw' + r'/Jw==')
    
  • 检索集合或创建集合(如果不存在)。

    todos = db.todo #Select the collection
    
  • 创建应用程序

    app = Flask(__name__)
    title = "TODO with Flask"
    heading = "ToDo Reminder"
    

运行 Web 应用

  1. 确保 Azure Cosmos DB 模拟器正在运行。

  2. 打开终端窗口并使用 cd 切换到保存应用的目录。

  3. 然后使用 set FLASK_APP=app.pyexport FLASK_APP=app.py 设置 Flask 应用的环境变量(如果使用的是 Mac)。

  4. 使用 flask run 运行此应用并浏览到 http://127.0.0.1:5000/

  5. 添加和删除任务,并查看集合中添加和更改的任务。

创建数据库帐户

  1. 在新窗口中,登录到 Azure 门户
  2. 在左菜单中,依次单击“创建资源”、“数据库”,然后在“Azure Cosmos DB”下单击“创建”。

    Azure 门户的屏幕截图,其中突出显示了“更多服务”和“Azure Cosmos DB”

  3. 在“新建帐户”边栏选项卡中,指定“MongoDB”作为 API,并填充 Azure Cosmos DB 帐户所需的配置。

    • “ID”必须是用于标识 Azure Cosmos DB 帐户的唯一名称。 ID 只能包含小写字母、数字和“-”字符,且长度必须为 3 到 50 个字符。
    • “订阅”是你的 Azure 订阅。 系统会自动填充此值。
    • “资源组”是 Azure Cosmos DB 帐户的资源组名称。 选择“新建”,然后输入帐户的新资源组名称。 为简单起见,可以使用与 ID 相同的名称。
    • “位置”是 Azure Cosmos DB 实例所在的地理位置。 请选择最靠近用户的位置。

      然后单击“创建” 。

      Azure Cosmos DB 的“新建帐户”页

  4. 创建帐户需要几分钟时间。 等待门户中显示“祝贺你!使用 MongoDB API 的 Azure Cosmos DB 帐户已准备就绪”页。

    Azure 门户“通知”窗格

更新连接字符串

若要针对实时 Azure Cosmos DB 帐户测试代码,请转到 Azure 门户创建一个帐户,并获取连接字符串信息。 然后将其复制到此应用中。

  1. Azure 门户的 Azure Cosmos DB 帐户的左侧导航栏中,单击“连接字符串”,然后单击“读写密钥”。 使用屏幕右侧的复制按钮将用户名、密码和主机复制到下一步的 Dal.cs 文件中。

  2. 在根目录中打开 app.py 文件。

  3. 从门户中(使用复制按钮)复制“用户名”值,并在 app.py 文件中将其设为“名称”的值。

  4. 然后从门户中复制“连接字符串”值,并在 app.py 文件中将其设为 MongoClient 值。

  5. 最后从门户复制“密码”值,并在 app.py 文件中将其设为“密码”的值。

现已使用与 Azure Cosmos DB 进行通信所需的所有信息更新应用。 此时,即可像以前一样运行它。

“部署到 Azure”

若要部署此应用,可在 Azure 中创建新的 Web 应用,并使用此 github 存储库分支启用持续部署。 按照此教程,在 Azure 中使用 Github 设置持续部署。

部署到 Azure 时,应删除应用程序密钥并确保以下部分未被注释掉:

    client = MongoClient(os.getenv("MONGOURL"))
    db = client.test    #Select the database
    db.authenticate(name=os.getenv("MONGO_USERNAME"),password=os.getenv("MONGO_PASSWORD"))

然后需要将 MONGOURL、MONGO_PASSWORD 和 MONGO_USERNAME 添加到应用程序设置中。 可参阅此教程了解有关 Azure Web 应用中应用程序设置的详细信息。

如果不想创建此存储库的分支,也可单击下方的“部署到 Azure”按钮。 然后应转到 Azure,就可使用 Cosmos DB 的帐户信息设置应用程序设置。

Note

如果打算将代码存储在 Github 或其他源代码管理选项中,请务必从代码中删除连接字符串。 可改为使用 Web 应用的应用程序设置进行设置。

在 Azure 门户中查看 SLA

在 Azure 门户中监视帐户中资源的吞吐量、存储空间、可用性、延迟和一致性。 让我们快速了解一下这些指标。

  1. 在导航菜单中单击“指标”。

    Azure 门户中的指标

  2. 单击每个选项卡,以便了解 Azure Cosmos DB 提供的指标。

    Azure Cosmos DB 服务级别协议 (SLA) 关联的每个图表都提供了一行,显示是否违反了任何 SLA。 Azure Cosmos DB 通过此套指标使监视 SLA 的操作更透明。

    Azure Cosmos DB 指标套件

清理资源

如果不打算继续使用此应用,请按照以下步骤删除本快速入门中创建的所有资源,以免产生任何费用:

  1. 在 Azure 门户的最左侧选择“资源组”,,然后选择创建的资源组。

    如果左侧菜单处于折叠状态,请单击 “展开”按钮 将其展开。

    Azure 门户中的指标

  2. 在新窗口中选择资源组,然后单击“删除资源组”。

    Azure 门户中的指标

  3. 在新窗口中键入要删除的资源组的名称,然后单击“删除”。

后续步骤

在本快速入门教程中,已了解如何创建 Azure Cosmos DB 帐户和使用 MongoDB API 运行 Flask 应用。现在即可将其他数据导入 Cosmos DB 帐户。