使用托管标识在 Azure 中部署和配置 Python Web 应用

本文是有关将 Python 应用部署到Azure 应用服务的教程的一部分。 Web 应用使用托管标识向其他 Azure 资源进行身份验证。 在本文中,你将配置App 服务,然后将 Python 应用部署到该应用。

屏幕截图显示了本教程中用于部署到 Azure 的 Azure 服务。

1.在 Azure 中配置 Web 应用

创建 Web 应用、存储帐户和 PostgreSQL 数据库资源后,下一步是告知 Web 应用如何连接到 Azure 存储帐户和Azure Database for PostgreSQL服务。

Python 示例代码需要名为 DBHOSTDBNAMEDBUSERSTORAGE_ACCOUNT_NAME以及 STORAGE_CONTAINER_NAME 连接到存储和数据库资源的环境变量。 不会为存储指定访问密钥或数据库的密码,因为身份验证由托管标识处理。

说明 屏幕快照
转到 Web 应用的App 服务页。
  1. 在左侧资源菜单上的“设置”下选择“配置”。

  2. 在页面顶部选择“应用程序设置”。

该屏幕截图显示如何在 Azure 门户中导航到“应用程序设置”。
创建应用程序设置:
  1. 选择 “+ 新建应用程序”设置 以创建以下设置:

    • DBHOST → 使用之前创建数据库时使用的服务器名称,例如 msdocs-web-app-postgres-database-unique< id>。 示例代码追加 .postgres.database.azure.com 以创建完全限定的 PostgreSQL 服务器 URL。 示例代码追加 .postgres.database.azure.com 以创建完全限定的 PostgreSQL 服务器 URL。
    • DBNAME → Enter 餐厅,应用程序数据库的名称。
    • DBUSER →输入 webappuser,这是在上一篇文章中为托管标识创建的用户。 示例代码从中DBHOST构造正确的 Postgres 用户名DBUSER,因此不包括@server部分。
    • STORAGE_ACCOUNT_NAME →存储帐户的名称,示例代码与 blob.core.windows.net 合并以创建存储 URL 终结点。
    • STORAGE_CONTAINER_NAME →存储帐户中存储照片的容器的名称。 例如, 照片
  2. 确认有五个具有正确值的设置。

  3. 选择 “保存 ”以应用设置。

该屏幕截图显示如何在 Azure 门户中配置应用程序设置。

2.将 Python Web 应用部署到 Azure

Azure 应用服务支持多种将应用程序代码部署到 Azure 的方法,包括支持GitHub Actions和所有主要 CI/CD 工具。 本文重点介绍如何将代码从本地工作站部署到 Azure。

要通过 VS Code 来部署 Web 应用,必须安装 Azure Tools 扩展包,并从 VS Code 登录到 Azure。

说明 屏幕快照
在左侧工具栏中找到 Azure 图标,并选择该图标打开 VS Code 的 Azure Tools 扩展。
在 Azure 工具扩展的应用 服务 部分中:
  1. 找到你的 Web 应用,然后右键单击以显示上下文菜单。 (确保按 资源类型分组查看资源。)

  2. 从菜单中选择“部署到 Web 应用...”。

在显示的 Visual Studio 代码提示符中,选择要部署的 Web 应用。
显示如何在 VS Code 中部署 Web 应用的屏幕截图。
在对话框中选择“部署”。 显示如何在 VS Code 中部署 Web 应用的屏幕截图:用于确认部署的对话框。
选择“是”以更新生成配置并提高部署性能。 显示如何在 VS Code 中部署 Web 应用的屏幕截图:一个对话框,用于选择始终部署到应用服务。
部署完成后,屏幕右下角将出现一个对话框,其中包含用于浏览网站的选项。 如果使用此链接,网页将报告错误,因为在下一步骤中执行迁移之前,该 Web 应用尚未准备就绪。 可能有另一个对话框会显示此问题的警告。 显示如何在 VS Code 中部署 Web 应用的屏幕截图:一个对话框,用于选择浏览到网站。显示如何在 VS Code 中部署 Web 应用的屏幕截图:一个对话框,用于选择查看部署详细信息。

3.创建数据库架构

代码部署完成且数据库就绪后,基本就可以使用该应用了。 最后一步是需要在数据库中建立必要的架构。 通过将应用代码存储的数据模型“迁移”到 PostgreSQL 数据库来创建架构。

步骤 1。 创建 SSH 会话并连接到 Web 应用服务器。

在 Azure 门户中导航到应用服务实例的页面。

  1. 在左侧资源菜单上的“开发工具”下选择 SSH
  2. 然后选择“执行”,在 Web 应用服务器上打开 SSH 控制台。 第一次连接可能需要一分钟时间。

如果无法使用 SSH 进行连接,请参阅 故障排除提示

步骤 2. 在 SSH 会话中,运行命令将模型迁移到数据库中:

将 Flask 示例应用部署到Azure 应用服务时,数据库表会自动在Azure Database for PostgreSQL服务器中创建。 如果尝试运行 flask db init ,将收到消息“目录迁移已存在且不为空”。

如果无法迁移模型,请参阅 故障排除提示

提示

在 SSH 会话中,对于 Django,还可以使用 python manage.py createsuperuser 命令创建用户,就像在典型的 Django 应用中所做的那样。 有关详细信息,请参阅 django django-admin 和 manage.py 的文档。 使用超级用户帐户访问网站的 /admin 部分。 对于 Flask,请使用 Flask-admin 之类的扩展来提供相同的功能。

4.在 Azure 中测试 Python Web 应用

示例 Python 应用使用 azure.identity 包和 DefaultAzureCredentialClass。 自动DefaultAzureCredential检测App 服务是否存在托管标识,并使用此标识访问其他 Azure 资源, (存储和 Postgres 在本例中) 。 无需向App 服务提供存储密钥、证书或凭据即可访问这些资源。

浏览到 URL http://<app-name>.azurewebsites.net上的已部署应用程序。 应用启动可能需要一两分钟的时间。 如果看到默认应用页面不是默认示例应用页面,请等待一分钟并刷新浏览器。

若要测试示例应用的功能,请添加一家餐馆,然后添加一些带有餐厅照片的评论。 餐厅和评论信息存储在Azure Database for PostgreSQL,照片存储在 Azure 存储中。 下面是示例屏幕截图:

示例应用示例显示使用 Azure 应用服务、Azure PostgreSQL 数据库和 Azure 存储的餐馆评审功能。

5. 故障排除提示

下面是排查部署问题的一些提示:

  • 将 Python 代码部署到App 服务时,将创建一个内置的 Linux 容器来运行 Web 应用。 如果部署未成功,请在Azure 门户检查在容器生成期间生成的部署中心 | 日志,以确认部署失败。 如果发生故障,请转到“诊断”并解决App 服务的问题资源来检查诊断日志记录应用程序日志记录日志最适用于故障排除失败的部署。 请务必检查日志记录条目的时间戳,以确保它们对应于要进行故障排除的部署。 编写日志时可能会延迟,可能需要等待查看部署的日志记录信息。

  • 如果在执行迁移时遇到与连接到数据库相关的错误,请检查App 服务的应用程序设置的值,具体来说DBHOSTDBNAME,以及DBUSER。 如果没有这些设置,Web 应用将无法与数据库通信。

  • 如果已正确指定数据库连接信息,请确认是否正确为数据库设置了托管标识。

  • 如果无法打开 SSH 会话以连接到Azure 应用服务,则应用可能无法启动。 检查 诊断日志 以了解详细信息,特别是应用程序日志。 由于许多原因,可能会发生错误。 例如,如果你没有在上一部分中创建必要的应用设置,则日志将指示 KeyError: 'DBNAME'

  • 检查是否已将App 服务配置设置SCM_DO_BUILD_DURING_DEPLOYMENT设置为true1设置为 。 有关如何 Azure 应用服务运行 Python 应用的详细信息和背景信息,请参阅配置适用于Azure 应用服务的 Linux Python 应用

  • 如果要使用本地 Git 部署到App 服务并且指定了错误的凭据,则可能会缓存该凭据,并且需要清除这些凭据。 有关 Git 凭据的详细信息,请参阅 Git 工具 - 凭据存储。 在 Windows 上,可以打开凭据管理器/Windows 凭据,找到凭据并删除凭据。

  • 如果部署成功且 Web 应用正在运行, print 代码中的语句将写入日志流。 在Azure 门户中,转到App 服务并打开日志流资源。 有关详细信息,请参阅在 Azure 应用服务 - 流式传输日志中为应用启用诊断日志记录

后续步骤