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

Azure Cosmos DB 是 Azure 的多个区域分布式多模型数据库服务。 可快速创建和查询文档及键/值,所有这些都受益于 Azure Cosmos DB 核心的多个区域分布和水平缩放功能。

本快速入门指南使用以下 Flask 示例并演示如何借助 Azure Cosmos DB 模拟器 而不是 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 终端窗口(例如 git bash)并使用 cd 切换到工作目录。
  2. 运行下列命令,克隆示例存储库。

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

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

查看代码

快速查看应用中发生的情况。 打开根目录下的 app.py 文件,会发现以下代码行创建 Azure Cosmos DB 连接。 以下代码使用适用于本地 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. 在“新建帐户”窗格中,为 Azure Cosmos DB 帐户指定所需的配置。

    使用 Azure Cosmos DB,可以选择以下二个编程模型之一:MongoDB 和 SQL。

    在本快速入门教程中,我们会针对 MongoDB API 编程,因此,在填写表单时,请选择“MongoDB”。 但如果有来自目录应用的文档数据,请意识到 Azure Cosmos DB 可以为所有任务关键型应用程序提供高度可用的多区域分布式数据库服务平台。

    以表中的信息作为指南,填写“新建帐户”窗格。

    “新 Azure Cosmos DB”窗格的屏幕截图

    设置 建议的值 说明
    ID 唯一值 选择用于标识 Azure Cosmos DB 帐户的唯一名称。 documents.azure.cn 会追加到所提供的 ID 以创建 URI,因此,请使用唯一但可识别的 ID。 ID 只能包含小写字母、数字及“-”字符,且长度必须为 3 到 50 个字符。
    API MongoDB API 确定要创建的帐户的类型。 Azure Cosmos DB 提供了二种 API,用于满足应用程序的需求:SQL(文档数据库)、MongoDB(文档数据库),每个目前都需要单独的帐户。

    之所以选择 MongoDB 是因为,在本快速入门中将创建可使用 MongoDB 查询的文档数据库。

    详细了解 MongoDB API
    订阅 订阅 要用于 Azure Cosmos DB 帐户的 Azure 订阅。
    资源组 与 ID 相同的值 帐户的新资源组名称。 为简单起见,可以使用与 ID 相同的名称。
    位置 离用户最近的区域 要在其中托管 Azure Cosmos DB 帐户的地理位置。 选择离用户最近的位置,使其能够以最快的速度访问数据。
  4. 单击“创建” 以创建帐户。

  5. 在工具栏上,单击“通知”可监视部署过程。

    “部署已启动”通知

  6. 部署完成后,请从“所有资源”磁贴打开新帐户。

    “所有资源”磁贴中的 Azure Cosmos DB 帐户

更新连接字符串

若要针对实时 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 应用中应用程序设置的详细信息。

Note

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

在 Azure 门户中查看 SLA

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

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

    Azure 门户中的指标

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

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

    Azure Cosmos DB 指标套件

清理资源

如果不打算继续使用此应用,请删除本快速入门教程在 Azure 门户中创建的所有资源,步骤如下:

  1. 在 Azure 门户的左侧菜单中,单击“资源组”,然后单击已创建资源的名称。
  2. 在资源组页上单击“删除”,在文本框中键入要删除的资源的名称,并单击“删除”。

后续步骤

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