Azure Data Factory CI-CD的简单化:使用Azure DevOps YAML 构建和部署ARM模板

225 阅读7分钟

Azure Data Factory CI-CD的简单化。使用 Azure DevOps YAML 管道构建和部署 ARM 模板

发布/部署 Azure 数据工厂工件的最简单方法

照片:Andreas FelskeonUnsplash

如果你使用Azure数据工厂,你可能会注意到,这个工具的部署过程是独一无二的。它不同于API或网站的部署,因为它生成了ARM模板,当然也会在某个时间点质疑 "为什么部署它这么难?"。那么,它不一定是...

数据工厂CI/CD--旧的(有问题的)流程

Azure Data Factory是大数据过程中的一个伟大的协调工具。它有许多集成和功能,使数据工程师的生活非常容易。

虽然当我们谈到部署时,有一些技巧,例如,工作区内部的发布按钮 ,这对于生成要部署的ARM模板是必要的。另外,没有部署到开发环境中,因为你已经在那里作为一个编辑工具工作了。与其他 "传统开发 "相比,这个过程有点不同,这个手动步骤 会让开发工程师不寒而栗。

从Azure数据工厂工作区部署 - 图片来自微软文件

这往往会产生讨论和 "变通 "来处理这个手动步骤。在一些解决方案中,人们将生成的ARM模板从adf_publish中手动移动到功能分支,并创建一个新的提交。在其他方案中,有一个使用多个 repo 的集成,但同样,开始部署应该是--同样是--手动的步骤。

在旧的方法上,从我的观点来看,最好的解决方案是使用Azure Powershell进行部署,但它会产生额外的复杂性,因为你需要手动控制所有应该部署的元素,比如链接服务和管道。

数据工厂CI/CD--新的(而且更好的)流程

幸运的是,有一种新的方法来生成要部署的ARM模板,而且你不需要上述的变通方法。

在这个策略中,你基本上可以验证并将你的数据工厂JSON文件 "构建 "成可使用的ARM模板。为了使其发挥作用,您需要创建一个构建管道并消耗ADFUtilities NPM包。这就更干净了,手动步骤也消失了:)。

使用新的Azure数据工厂流程进行部署 - 图片来自微软文档

欲了解更多信息,请查看这里的官方文档。

如何使用IaC创建Azure数据工厂

基础设施即代码

在你的项目中使用IaC有很多理由,你可以在这里查看。其中一个原因是,基础设施即代码是实现环境的最简单和快速的方法。所以,既然我们想让我们的ADF部署保持简单,为什么不使用它呢:)?

在这个例子中,我将使用Bicep 模板来部署我们的数据工厂。如果你对Bicep感到陌生,它基本上是一个DSL(领域专用语言),使ARM模板用户更容易操作。

Bicep是VS代码的一个很好的扩展--图片来自微软文档

在这篇文章中,你可以查看如何通过git集成为数据工厂创建Bicep文件,该文件将用于部署ADF。

它将在你的Azure数据工厂和你的git repo之间建立一个链接(它适用于Azure DevOps和GitHub),所以当你在数据工厂中创建一个管道时,它也将被版本化到git repo中。

Git仓库

仓库结构

版本库的结构取决于每个项目。最好的做法之一是把部署项目所需的所有代码放在同一个 repo 中。因此,我喜欢创建一个结构,其中有组件的名称,并且总是在下面有一个 "src "文件夹。在这种情况下,我们将把 src 文件夹作为 git 集成过程中的 "根文件夹"。

仓库结构 - 图片由作者提供

构建ARM模板的必要文件

为了生成模板,我们的 repo 中必须有一些文件。这些文件需要添加到src文件夹中,并且在构建阶段会被引用。

在src文件夹中创建package.json文件。它包含软件包的元数据,将用于构建ADF Artifacts。

medium.com/media/f2a17…

在同一文件夹中还创建了publish_config.json文件,内容如下。它不会影响到ARM模板的生成,但它对于运行构建是必要的。

medium.com/media/13dab…

最后一个文件是arm-template-parameters-definition.json。它包含了你的ARM参数的定义。我就不多说了,因为这需要一个专门的帖子来说明。对于初始版本,你可以直接创建下面的内容。

medium.com/media/d9c59…

在创建了git集成和所有必要的文件后,你的Repo将是这样的。

Azure数据工厂的存储库结构 - 图片由作者提供

如何为Azure数据工厂创建构建YAML管线

毫无疑问,管道作为代码将是管道定义的特点,具有版本控制和可重复使用的能力。

变量

第一个必要的配置是变量。它们将在以后的构建和发布中使用。

在构建阶段,最重要的变量是。

  1. workingDir - 这是src目录。这里必须有上面提到的必要文件。
  2. dataFactoryResourceId - 在这里填写你的ADF的资源ID。让它成为可参数化的,以便在不同的环境中工作,这是一个好主意。

构建和部署变量 - 图片由作者提供

构建数据工厂

如上所述,我们需要在构建过程中消耗ADFUtilities NPM包

在前两个任务中,NodeJS被配置在构建代理中。请注意我们在变量部分提到的workingDir变量。

在最近的两个任务中,我们正在调用NPM包来验证和 "构建 "我们的数据工厂并生成ARM模板。在最后一个任务中,"artifacts "是相对输出目录。这意味着,它将是ARM模板的输出目录。

Azure数据工厂的构建任务 - 图片由作者提供

在接下来的任务中,我们将把ARM模板从输出目录复制到暂存目录,并将bicep文件 "构建 "成ARM模板。这些模板将被用于创建Azure数据工厂工作区。

Azure数据工厂的构建任务 - 图片由作者提供

运行构建管道后,你将拥有在部署阶段消耗的工件。

Azure数据工厂的构件 - 图片由作者提供

Azure数据工厂ARM模板 - 图片由作者提供

如何为Azure数据工厂创建发布YAML管线

为了部署数据工厂,我们使用了一次运行策略。它将消耗在构建阶段创建的工件

开发

在开发环境中启用git集成时,由于代码是在工作区产生的,因此不需要在此环境中发布。它将只部署使用基础设施即代码模板的环境。它还包含一个用于构建阶段的依赖性。

开发环境 - 图片由作者提供

UAT和生产

在UAT中,我们有一个对开发环境的依赖性。在生产阶段,依赖的是UAT。由于在这些阶段,我们需要同时部署基础设施和代码,我们将使用preDeploy和部署工作。

preDeploy阶段 - 图片由作者提供

部署阶段 - 图片由作者提供

当运行时,它将首先使用preDeploy阶段的Bicep文件创建基础设施,然后部署在构建阶段生成的工件。这就是最终的结果。

部署管线 - 图片由作者提供

主要启示

部署Azure Data Factory的策略不止一种,我已经尝试了其中的大部分策略,而且效果很好,但从我的角度来看,这个策略是实现完全自动化部署的最简单、最干净的方法。

下面你可以查看用于部署的完整YAML。你也可以在我的GitHub repo中查看其他Azure DevOps YAML模板的例子:devopsnights/azuredevops-yaml-quickstart-templates (github.com)

我希望它能对你有所帮助

medium.com/media/ea040…


Azure Data Factory CI-CD变得简单。使用Azure DevOps YAML构建和部署ARM模板......最初发表于Towards Data Scienceon Medium,人们通过强调和回应这个故事来继续对话。