Azure数据工厂发布管道-找不到资源错误

时间:2019-10-02 16:58:51

标签: azure azure-pipelines-release-pipeline

我正在测试一个非常简单的ADF(仅一项活动)的构建/发布,构建,存储库,arm模板导出都正常,直到运行发布任务时,错误才显示在最后一步,即说:

 "error": {
    "code": "ResourceNotFound",
    "message": "The Resource 'Microsoft.DataFactory/factories/htTestDF' under resource group 'xxx-rg' was not found."
  }

我看了几个教程和Microsoft网站,并尝试多次导出ARM模板,但发生相同的错误。任何想法将不胜感激。

2 个答案:

答案 0 :(得分:1)

谢谢您的详细说明。现在,遇到此错误消息是由于在此ARM模板部署到另一个目标资源组时引起的。

为更清楚地说明这一点,我将根据您提供的详细信息重现该问题。幸运的是,您遇到了同样的错误。现在,让我们集中讨论其日志,然后了解导致Not Found错误的原因。(请设置 debug=true

enter image description here

正如我在上面的图片中提到的,第一步是在模板开始应用到相应的资源组和部署中时,此任务首先使用的api。要清除更多内容,请首先参考此REST API文档:Deployments - Create Or Update

此任务的逻辑是从ARM模板文件编译参数,打包参数并将其用作此 PUT api调用的请求正文。请参阅其api文档,您可以获取此API调用的信息,首先需要指定其resourceGroupNamedeploymentName。换句话说,如果您指定了另一个目标资源组,它将找不到可以应用此模板定义的正确目标位置。因为,您可以看到此ARM模板正在准备将活动SetVariable应用于数据工厂HTDF3,并且已定义的pipelines名称为HTPipe1。但是这些都不应该在目标资源组中全部存在。因此,它导致了这样的错误:

"error": {
    "code": "ResourceNotFound",
    "message": "The Resource 'Microsoft.DataFactory/factories/Merlin-1003' under resource group 'Merlin-ARM-deploy' was not found."
  }

在我的示例中,Merlin-ARM-deploy是我的目标资源组。

如果要将其部署到目标资源组中,则需要手动创建一个数据工厂,或使用另一个ARM模板在目标资源组中创建一个新的相同工厂。如果选择以前的方法,则只需修改template.json文件,使其参数与实际的目标资源组相对应。但是,如果使用第二种方法,则什么也不做。只需将它们与任务一起应用即可。

答案 1 :(得分:0)

由ADF(publish)生成的ARM模板不能直接部署到新的RG。

解决方案

  1. 创建RG(可选,假设它是IAC(以下代码))
  2. 在管道中运行Powershell脚本任务以创建一个空的ADF(而不是使用空的ARM)。由于它不是ARM,因此您需要放置一个可选条件来检查它是否已经存在)

    Set-AzDataFactoryV2 -ResourceGroupName“ RG”-名称“ ADF”-位置“ North Europe”

  3. 现在我们可以从发布文件夹(一个you had given)执行ARM模板

ADF发布系统中的错误。

  1. ARM模板的生成方式应为 幂等(如果不存在,也应该重新创建)。但这不是 在这一刻。它希望ADF已经(奇怪地)存在。
  2. 当在另一个RG中创建的空ARM模板用于在此RG(新创建)中创建新的空ADF时,它将失败。好吧,它创建了一个空的ADF,但是我们不能在其上面放置adf_publish(ADF的默认发布文件夹),因为会出现“找不到资源错误”。
  3. 但是当我们手动创建ADF并运行adf_publish模板时 然后就可以了!但是,当然,这不是我们想要的。
  4. 为什么手动和Powershell可以工作(空白+发布),但不能使用ARM模板?可能是ARM模板中提到了错误的位置/区域,但事实并非如此。(真让我感到困惑)