部署应用程序并与其他 Azure 服务集成
了解 Azure 上用于托管应用的不同选项后,需要了解如何在这些服务上部署 Azure Database for MySQL 灵活服务器应用。 在本单元中,你将探索两个最常用的服务(Azure 应用服务和 AKS),查看使用 Azure DevOps 和 GitHub 自动执行 CI/CD 任务的选项,以及了解如何通过与 Azure AI 搜索和 Azure OpenAI 集成将人工智能融入这些应用程序中。
Azure 应用服务 + Azure Database for MySQL 灵活服务器
若要在 Azure 应用服务上部署应用并与 Azure Database for MySQL 灵活服务器集成,请考虑以下选项:
- 使用 Azure 市场中的“Web 应用 + 数据库”在虚拟网络 (VNet) 中创建独立的 Web 应用和 MySQL 灵活服务器。 灵活服务器的连接信息使用连接字符串自动添加到应用服务应用的配置设置。
- 分别创建 Azure Database for MySQL 灵活服务器和应用服务应用,然后在应用服务应用中,将 MySQL 灵活服务器的连接信息添加到“配置设置”下的“应用程序设置”。
设置应用服务应用和 MySQL 灵活服务器后,可以使用 Azure 应用服务支持的各种部署方法将应用代码部署到 Azure。 这些方法包括从 ZIP 包、本地 Git 存储库、Azure 容器注册表、GitHub Actions 或 Azure Pipelines 进行部署,每个选项基于开发和操作工作流提供灵活性。
在下一单元中,你将生成一个示例 PHP 应用并将其部署到 Azure 应用服务,完成部署过程中涉及的每个步骤,并使用 Azure 的强大平台功能来优化应用的性能和可伸缩性。
Azure Kubernetes 服务 (AKS) + MySQL - 灵活服务器
将 AKS 与 Azure Database for MySQL 灵活服务器集成可以创建一个功能强大的平台用于部署容器化应用,它可以简化数据库管理,并增强应用可伸缩性和复原能力。 若要使用后端 MySQL 灵活服务器在 AKS 上有效地部署和管理应用,请考虑以下信息。
下图演示了将 MySQL 与 AKS 应用集成的三种常见方法:
- 使用 Azure Database for MySQL 灵活服务器,这样可以减少管理 MySQL 服务器的运营开销,从而提高开发人员的工作效率。
- 使用 Azure VM 上的 MySQL(一种基础结构即服务产品/服务),需要你负责管理和维护 MySQL 服务器。
- 在 Kubernetes 上运行 MySQL,它提供了自动化优势,但需要开发人员的努力来确保稳定性、高可用性、数据持久性和合规性。 此外,鉴于 Kubernetes Pod 的瞬态特性,故障转移和重启的可能性更高,这会影响应用程序的可用性和业务连续性。
若要在 AKS 上部署与 Azure Database for MySQL 灵活服务器集成的应用,请执行以下五个步骤:
使用 Azure 门户、Azure CLI、ARM/Bicep 模板或其他 Azure 工具创建 Azure Database for MySQL 灵活服务器。 除了选择正确的计算、存储、备份和高可用性选项外,在创建 MySQL 灵活服务器时确定合适的网络选项也很重要。
重要说明:除非你的场景仅涉及小型项目或演示,否则强烈建议创建具有专用访问权限的服务器,这将有助于通过 VNet 集成保护对服务器的访问。
通过对应用代码进行以下更改来准备应用:
- 若要让应用使用 MySQL 灵活服务器,请修改相应的配置文件或应用属性文件以添加指示主机服务器 URL、数据库名称、用户名和密码的代码,这些代码将从环境变量中读取(在 Kubernetes 清单文件中定义并从中传递)。
- 创建 Dockerfile 以生成应用 Docker 映像。
创建 Azure 容器注册表并将应用作为 Docker 映像推送到注册表。
创建 AKS 群集并将 Azure 容器注册表帐户附加到群集。
将应用部署到群集,然后测试部署。 若要将应用部署到 AKS 群集,首先需要创建一个 Kubernetes 清单文件,该文件定义群集的所需状态,例如要运行的容器映像。
在 Kubernetes 清单 YAML 文件中,要定义的关键内容包括:
- The container image name: replace it with your own in the format [registryname].azurecr.io/[image-name]:[tag]
- Environment variables for MySQL flexible server host URL, database name, admin username and password.
- A service resource to access the app in the cluster. For example, a service of the type "LoadBalancer" will create an external load balancer providing an externally accessible IP address to the app.
After the YAML file is ready, deploy it with either `kubectl apply` or within the Kubernetes resource view in the Azure portal.
使用 Azure DevOps、GitHub 和 Azure 服务运营商自动执行数据库 CI/CD 任务
手动部署应用可能效率低下且容易出错,需要频繁测试和调整。 为了简化此过程,强烈建议通过持续集成 (CI) 和持续交付/部署 (CD) 实现自动化。 CI/CD 使开发团队能够定期可靠地发布较小的更新和功能,与较大、频率较低的更新相比,显著降低了所涉及的风险和工作量。
若要自动部署应用和 Azure Database for MySQL 灵活服务器,请考虑使用以下 CI/CD 工具。
Azure Pipelines
Azure DevOps 中的 Azure Pipelines 提供了强大的 CI/CD 功能,有助于将代码自动部署到各种目标,包括 Azure PaaS 服务、VM 和容器注册表。 此平台还支持跨不同环境的部署,例如其他云平台或本地系统。
具体而言,对于数据库部署,可以使用 Azure Pipelines 通过在执行 Azure CLI 命令的管道中合并任务来自动更新 Azure Database for MySQL 灵活服务器。 这些任务可以直接从 SQL 文件应用更新,也可以执行内联 SQL 脚本,确保每次成功生成后数据库模式和数据都是最新的。
GitHub Actions
GitHub Actions 支持响应存储库事件(例如推送、拉取请求或问题创建)的工作流自动化。 此集成允许在 GitHub 生态系统中实现无缝的 CI/CD 管道,处理从新拉取请求的生成和测试工作流到发布创建时的部署工作流的所有内容。
对于数据库,可以将 GitHub Actions 配置为直接连接到 Azure Database for MySQL 灵活服务器,以便在合并或推送更改时部署或更新数据库。 这可确保应用更新和数据库架构更改之间的持续同步。
Azure 服务运营商
Azure 服务运营商在 Kubernetes 环境中集成 Azure 资源管理,允许你直接通过 Kubernetes 工具管理 Azure Database for MySQL 灵活服务器等 Azure 资源。 此运营商可以将基础结构更新合并到 Kubernetes 部署工作流中,从而统一管理应用及其依赖的 Azure 服务。
其他工具
除了这些特定工具之外,还可以使用其他技术来改善 CI/CD 工作流:
- 应用服务部署槽位:用于在新版本上线之前进行暂存,允许最终验证并以最短的停机时间热交换到生产环境。
- 应用服务部署中心:通过 Azure 应用服务简化 CI/CD 设置,并与源代码管理和生成服务集成。
- Jenkins:Jenkins 是一个开源自动化服务器,支持生成、部署和自动执行任何项目,在需要自定义脚本和广泛集成的复杂环境中尤其有效。
利用这些工具,可以确保应用及其基础数据库基础结构始终与代码的最新更改保持一致,从而最大限度地减少停机时间并加快新功能和修补程序的交付。
通过与 Azure AI 搜索和 Azure OpenAI 集成来添加智能
要增强 MySQL 应用程序的智能,最简单方法是通过将检索增强生成 (RAG) 体系结构与 Azure AI 搜索和 Azure OpenAI 服务结合使用来构建解决方案,从而纳入语义搜索和生成 AI 的丰富功能。 RAG 是一种体系结构,它通过添加一个信息检索系统(如 Azure AI 搜索)来增强 LLM(如 ChatGPT)的自然语言理解和生成能力,该系统适用于 Azure Database for MySQL 等数据源中存储的数据。
MySQL AI 解决方案的示例 RAG 模式如下所示:
- Azure AI 搜索使用定期运行的索引器从后端数据源(如 Azure Database for MySQL 数据库)拉取内容。
- 数据通过对 Azure OpenAI 文本嵌入模型的内置调用进行矢量化。
- 然后,Azure AI 搜索将此矢量化数据保存在矢量搜索索引中。
- 当用户使用客户端聊天应用程序时,查询将发送到 Azure OpenAI 聊天完成服务。
- Azure AI 搜索现在用作数据源,以使用矢量搜索或混合搜索(矢量 + 语义搜索)查找最相关的答复。
- 然后,Azure OpenAI 聊天完成服务使用这些搜索结果生成对用户查询的自定义答复。
如果要运行内容管理系统 (CMS)、电子商务应用程序或游戏网站等数据托管在 Azure Database for MySQL 中的应用程序,则可以通过使用 Azure OpenAI 中提供的 LLM 以及 Azure AI 搜索提供的矢量存储和索引构建生成式 AI 搜索和聊天应用程序来增强用户体验。