配置存储和数据库

已完成

通常,部署过程中有时需要连接到数据库或存储服务。 此连接有必要应用数据库架构、向数据库表添加某些参考数据或上传一些 Blob。 本单元将介绍如何扩展工作流以使用数据和存储服务。

从工作流配置数据库

许多数据库都拥有架构,这些架构表示数据库中包含的数据的结构。 通常,最好的做法是将架构应用于部署工作流中的数据库。 此做法有助于确保解决方案所需的一切都一起部署。 这样做还可以确保,若在应用架构时出现问题,工作流可显示错误,以便可以解决问题并重新部署。

使用 Azure SQL 时,需要使用 SQL 脚本连接到数据库服务器并执行命令,以应用数据库架构。 这些命令是数据平面操作。 工作流需要对数据库服务器进行身份验证,然后再执行脚本。 GitHub Actions 提供可连接到 Azure SQL 数据库服务器并执行命令的 azure/sql-action 操作。

其他一些数据和存储服务不需要通过使用数据平面 API 进行配置。 例如,使用 Azure Cosmos DB 时,会将数据存储在容器中。 可以直接在 Bicep 文件中使用控制平面配置容器。 同样,Azure 存储 Blob 容器的大部分内容也可以在 Bicep 中进行部署和管理。 在下一个练习的示例中,你将了解如何从 Bicep 创建 Blob 容器。

添加数据

许多解决方案要求在工作之前将参考数据添加到其数据库或存储帐户。 工作流是添加这些数据的好地方。 这意味着,工作流运行后,环境已完全配置并可供使用。

在数据库中包含示例数据也大有帮助,尤其是对于非生产环境。 示例数据有助于测试人员和使用这些环境的其他人员能够立即测试解决方案。 此类数据可能包括示例产品或虚设的用户帐户等内容。 通常不会将此类数据添加到生产环境中。

用于添加数据的方法取决于使用的服务。 例如:

  • 若要将数据添加到 Azure SQL 数据库,需要执行脚本,这与配置架构非常类似。
  • 若需要将数据插入 Azure Cosmos DB,则需要访问其数据平面 API,这可能需要你编写一些自定义脚本代码。
  • 若要将 Blob 上传到 Azure 存储 Blob 容器,可以使用工作流脚本中的各种工具,包括 AzCopy 命令行应用程序、Azure PowerShell 或 Azure CLI。 其中的每个工具都了解如何代表你对 Azure 存储进行身份验证,以及如何连接到数据平面 API 以上传 Blob。

幂等性

部署工作流和基础结构即代码的特征之一在于,应该能够反复重新部署,而不会产生任何负面影响。 例如,当重新部署已部署的 Bicep 文件时,Azure 资源管理器会将提交的文件与 Azure 资源的现有状态进行比较。 如果没有更改,则资源管理器不会执行任何操作。 重新执行操作的能力称为“幂等性”。 最佳做法是确保脚本和其他工作流步骤是幂等的。

与数据服务进行交互时,幂等性尤其重要,因为其可维护状态。 想象将一个示例用户从工作流插入到数据库表中。 如果不小心行事,每次运行工作流时,都会创建一个新的示例用户。 你可能不会希望发生此种结果。

将架构应用于 Azure SQL 数据库时,可以使用数据包(也称为 DACPAC 文件)来部署架构。 和应用程序一样,工作流会根据源代码生成 DACPAC 文件并创建工作流项目。 然后,工作流中的部署作业会将 DACPAC 文件发布到数据库:

显示上传工作流然后引用名为“数据库”的项目的关系图。

部署 DACPAC 文件后,它会通过将数据库的目标状态与包中定义的状态进行比较,以幂等方式运行。 在许多情况下,这意味着无需编写遵循幂等性原则的脚本,因为工具会为你处理此类操作。 某些用于 Azure Cosmos DB 和 Azure 存储的工具也能正常工作。

但是,若要在 Azure SQL 数据库或其他不能以幂等方式自动工作的存储服务中创建示例数据时,最好的做法是编写脚本,确保仅在数据不存在时创建数据。

还必须考虑是否需要回退部署,例如重新运行旧版本的部署工作流。 回滚数据可能会变得复杂,因此,如果需要允许回滚,请仔细考虑解决方案将如何运作。

网络安全性

有时可能需要对某些 Azure 资源应用网络限制。 这些限制可以强制执行有关对资源数据平面发出的请求的规则,例如:

  • 只能从指定的 IP 地址列表访问此数据库服务器。
  • 只能从在特定虚拟网络内部署的资源访问此存储帐户。

网络限制在数据库中很常见,因为似乎 Internet 上的任何内容都不需要连接到数据库服务器。

但是,网络限制也会使部署工作流难以处理资源的数据平面。 使用 GitHub 托管的运行器时,IP 地址不易事先知道,它可能分配自一个大的 IP 地址池。 此外,不能将 GitHub 托管的运行器连接到自己的虚拟网络。

某些有助于执行数据平面操作的操作可以解决这些问题。 例如 azure/sql-action 操作:

显示防火墙更新过程的图片。

当使用 azure/sql-action 操作处理 Azure SQL 逻辑服务器或数据库时,它将使用工作负载标识来连接到 Azure SQL 逻辑服务器的控制平面。 它会更新防火墙以允许运行器从其 IP 地址访问服务器。 然后,它可以成功提交 DACPAC 文件或脚本以便执行。 完成后,该操作会自动删除防火墙规则。

在其他情况下,不可能像这样创建例外。 在这些情况下,请考虑使用自托管运行器,该运行器在你控制的虚拟机或其他计算资源上运行。 然后,可以根据需要配置此运行器。 它可以使用已知的 IP 地址,也可以连接到你自己的虚拟网络。 本模块不会介绍自托管运行器,但模块“摘要”页上提供了有关详细信息的链接。

你的部署工作流

在下一练习中,你将更新部署工作流,以添加新的作业来构建网站的数据库组件、部署数据库并添加种子数据:

显示已修改工作流的关系图,其中包括新数据库生成作业、数据库部署作业和测试环境中的数据种子设定作业。