Azure Data Factory CI-CD的简单化。使用 Azure DevOps YAML 管道构建和部署 ARM 模板
发布/部署 Azure 数据工厂工件的最简单方法
如果你使用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。
在同一文件夹中还创建了publish_config.json文件,内容如下。它不会影响到ARM模板的生成,但它对于运行构建是必要的。
最后一个文件是arm-template-parameters-definition.json。它包含了你的ARM参数的定义。我就不多说了,因为这需要一个专门的帖子来说明。对于初始版本,你可以直接创建下面的内容。
在创建了git集成和所有必要的文件后,你的Repo将是这样的。
Azure数据工厂的存储库结构 - 图片由作者提供
如何为Azure数据工厂创建构建YAML管线
毫无疑问,管道作为代码将是管道定义的特点,具有版本控制和可重复使用的能力。
变量
第一个必要的配置是变量。它们将在以后的构建和发布中使用。
在构建阶段,最重要的变量是。
- workingDir - 这是src目录。这里必须有上面提到的必要文件。
- 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)
我希望它能对你有所帮助
Azure Data Factory CI-CD变得简单。使用Azure DevOps YAML构建和部署ARM模板......最初发表于Towards Data Scienceon Medium,人们通过强调和回应这个故事来继续对话。