你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在虚拟网络中将应用程序服务 Web 应用连接到 Azure Database for MySQL 灵活服务器

适用于:Azure Database for MySQL - 灵活服务器

本教程介绍如何创建 Azure 应用服务 Web 应用并将其连接到 Azure Database for MySQL 灵活服务器实例,这些实例隔离在相同或不同的虚拟网络

在本教程中,将了解如何:

  • 在虚拟网络中创建 Azure Database for MySQL 灵活服务器实例
  • 创建要委托给应用服务的子网并创建 Web 应用
  • 将 Web 应用添加到虚拟网络
  • 从 Web 应用连接到 Azure Database for MySQL 灵活服务器
  • 连接在不同的 VNet 中隔离的 Web 应用和 Azure Database for MySQL 灵活服务器实例

先决条件

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。 目前,通过 Azure 免费帐户,可以在 12 个月内免费试用 Azure Database for MySQL - 灵活服务器。 有关详细信息,请参阅免费试用 Azure Database for MySQL - 灵活服务器

本文要求在本地运行 Azure CLI 2.0 或更高版本。 若要查看安装的版本,请运行 az --version 命令。 如果需要进行安装或升级,请参阅安装 Azure CLI

你将需要使用 az login 命令登录到你的帐户。 记下与订阅名称相对应的命令输出中的 id 属性。

az login

如果有多个订阅,请选择应计费的资源所在的相应订阅。 使用 az account set 命令选择帐户下的特定订阅 ID。 将 az login 输出中的你的订阅的订阅 ID 属性替换到订阅 ID 占位符中 。

az account set --subscription <subscription ID>

创建 Azure Database for MySQL 灵活服务器实例

使用以下命令在虚拟网络 (VNET) 中创建专用 Azure Database for MySQL 灵活服务器实例:

az mysql flexible-server create --resource-group myresourcegroup --location westus2 --vnet VNETName

复制新创建的虚拟网络的连接字符串和名称。 此命令将执行以下操作,可能需要花几分钟的时间:

  • 创建资源组(如果尚不存在)。
  • 生成服务器名称(如果未提供)。
  • 在此 Azure Database for MySQL 灵活服务器实例的虚拟网络中,为新的 Azure Database for MySQL 灵活服务器实例和子网创建新的虚拟网络 VNETName。 确保名称是唯一的。
  • 创建服务器的管理员用户名和密码(如果未提供)。
  • 创建一个名为 flexibleserverdb 的空数据库。

注意

记下你的密码(如果未提供密码,系统将为你生成一个)。 如果忘记密码,则必须使用 az mysql flexible-server update 命令重置密码。

为应用服务终结点创建子网

现在,我们需要委托给应用服务 Web 应用终结点的子网。 运行以下命令,在创建 Azure Database for MySQL 灵活服务器实例的同一个虚拟网络中创新新的子网。

az network vnet subnet create -g myresourcegroup --vnet-name VNETName --name webappsubnetName  --address-prefixes 10.0.1.0/24  --delegations Microsoft.Web/serverFarms --service-endpoints Microsoft.Web

请在此命令后面记下虚拟网络名称和子网名称,以便在创建 Web 应用后为其添加 VNET 集成规则。

创建 Web 应用

在本节中,你将在应用服务应用中创建应用主机,并将此应用连接到 Azure Database for MySQL 灵活服务器数据库。 在终端中,请确保你位于应用程序代码的存储库根路径。

使用 az webapp up 命令创建应用服务应用(主机进程)。

az webapp up --resource-group myresourcegroup --location westus2 --plan testappserviceplan --sku P2V2 --name mywebapp

注意

  • 对于 --location 参数,请使用与上一节中数据库相同的位置。
  • <app-name> 替换为在整个 Azure 中唯一的名称(服务器终结点是 https://\<app-name>.azurewebsites.net)。 app-name<> 允许的字符包括“A-Z”、“0-9”和“-”。 良好的模式是结合使用公司名称和应用标识符。
  • 应用服务基本层不支持 VNET 集成。 请使用“标准”或“高级”。

此命令将执行以下操作,可能需要花几分钟的时间:

  • 创建资源组(如果尚未存在)。 (在此命令中,你将使用之前在其中创建数据库的同一资源组。)
  • 在基本定价层 (B1) 中创建应用服务计划 testappserviceplan(如果不存在)。 --plan 和--sku 是可选的。
  • 创建应用服务应用(如果不存在)。
  • 为应用启用默认日志记录(如果尚未启用)。
  • 在启用了生成自动化的情况下,使用 ZIP 部署上传存储库。

将 Web 应用添加到虚拟网络

使用 az webapp vnet-integration 命令向 webapp 添加区域虚拟网络集成。 将 <vnet-name> 和 <subnet-name 替换为 Azure Database for MySQL 灵活服务器实例使用的虚拟网络和子网名称。

az webapp vnet-integration add -g myresourcegroup -n  mywebapp --vnet VNETName --subnet webappsubnetName

配置环境变量以连接数据库

将代码部署到应用服务后,下一步是将应用连接到 Azure 中的 Azure Database for MySQL 灵活服务器实例。 应用代码需要在多个环境变量中查找数据库信息。 若要在应用服务中设置环境变量,请使用 az webapp config appsettings set 命令创建“应用设置”。

az webapp config appsettings set --settings DBHOST="<mysql-server-name>.mysql.database.azure.com" DBNAME="flexibleserverdb" DBUSER="<username>" DBPASS="<password>"
  • 替换新创建的 Azure Database for MySQL 灵活服务器命令的 <mysql-server-name>、<username> 和 <password> 的值。
  • <username><password> 替换为命令也为你生成的凭据。
  • 资源组和应用名称是从“.azure/config”文件中的缓存值中提取的。
  • 此命令会创建名为 DBHOST、DBNAME、DBUSER 和 DBPASS 的设置。 如果应用程序代码对数据库信息使用了不同的名称,则如代码中所述,对应用设置使用这些名称。

将 Web 应用配置为允许来自虚拟网络中的所有出站连接。

az webapp config set --name mywebapp --resource-group myresourcesourcegroup --generic-configurations '{"vnetRouteAllEnabled": true}'

不同的虚拟网络中的应用服务 Web 应用和 Azure Database for MySQL 灵活服务器实例

如果已在不同的虚拟网络 (VNet) 中创建了应用服务应用和 Azure Database for MySQL 灵活服务器实例,则需要执行以下两个步骤来建立无缝连接:

  • 使用 VNet 对等互连来连接两个 VNet(本地或全局)。 请参阅使用虚拟网络对等互连来连接虚拟网络指南。
  • 使用虚拟网络链接将 Azure Database for MySQL 灵活服务器实例的专用 DNS 区域链接到 Web 应用的 VNet。 如果使用 Azure 门户或 Azure CLI 在 VNet 中创建 Azure Database for MySQL 灵活服务器实例,则系统会使用提供的服务器名称为订阅自动预配一个新的专用 DNS 区域。 导航到 Azure Database for MySQL 灵活服务器实例的专用 DNS 区域,并按照《如何将专用 DNS 区域链接到虚拟网络》指南设置虚拟网络链接。

清理资源

使用以下命令清除在此教程中创建的所有资源。 此命令将删除这一资源组中的所有资源。

az group delete -n myresourcegroup

后续步骤