【问题标题】:ADF ARM Template doesn't appear to include the factory itselfADF ARM 模板似乎不包括工厂本身
【发布时间】:2020-11-11 18:34:14
【问题描述】:

我正在配置 DevOps 以将我的 Dev ADF 部署到 UAT ADF 实例。

我遇到了部署不删除过时管道的标准问题,并尝试使用“完整”部署模式来解决该问题。

于是 DevOps 完全删除了 UAT ADF 实例!

进一步查看文档,似乎this is the expected behaviour if the factories are not in the ARM Templates。 查看我的 ARM 模板(完全由 ADF 生成,并使用 [AFAIK] 完全标准设置),它确认工厂本身不在要创建的文档资源中。

这看起来……很奇怪。


我错过了什么吗? 如何让工厂包含在 ARM 模板中?

或者,我如何使用“完整”部署模式而不删除目标 ADF 实例?

请注意,我想要使用 "define a separate script to solve this" 方法的原因是,当“完整”模式听起来应该完全符合我的要求时,它似乎过于复杂: )(如果不是因为这个关于删除工厂的怪事)

【问题讨论】:

    标签: azure azure-devops azure-pipelines azure-data-factory-2 arm-template


    【解决方案1】:

    你是对的。我以前遇到过这个问题。为了绕过它,我建议创建一个核心 ARM 模板,该模板将包含数据工厂和数据工厂单独使用的任何必要的链接服务。这将确保在创建新实例时部署“基础架构/连接”。

    如果您关注Azure Data Factory CI/CD,这将是部署管道之前的一项额外 Azure 资源组部署任务,并引用应位于单独存储库中的 ARM 模板。

    以下是带有 Log Analytics 的数据工厂模板,可帮助您入门。我将 Log Analytics 包括在内,因为大多数人直到他们需要它才意识到日志保留。另外,这是一个最佳实践。只需更新系统名称,因为这将创建 adf-systemName-environment-regionAbrviation 的命名标准。区域缩写是基于对象动态的,并且会根据资源组进行查找。

    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "environment": {
                "type": "string",
                "metadata": "Name of the environment being deployed to"
            },
        "location": {
          "type": "string",
          "defaultValue": "[resourceGroup().location]",
          "metadata": {
            "description": "Location for all resources."
          }
        }
        },
        "variables": {
            "systemName": "DataFactoryBaseName",
        "regionReference": {
          "centralus": "cus",
          "eastus": "eus",
          "westus": "wus"
        },
        "dataFactoryName": "[toLower(concat('adf-', variables('systemName'),'-', parameters('environment'),'-',variables('regionDeployment')))]",
        "logAnalyticsName": "[toLower(concat('law-', variables('systemName'),'-', parameters('environment'),'-',variables('regionDeployment')))]",
        "regionDeployment": "[toLower(variables('regionReference')[parameters('location')])]"
        },
        "resources": [
            {
      "name": "[variables('dataFactoryName')]",
      "type": "Microsoft.DataFactory/factories",
      "apiVersion": "2018-06-01",
      "location": "[parameters('location')]",
      "tags": {
            "displayName": "Data Factory",
            "ProjectName": "[variables('systemName')]",
            "Environment":"[parameters('environment')]"
      },
      "identity": {
        "type": "SystemAssigned"
      }
    },
        {
          "type": "Microsoft.OperationalInsights/workspaces",
          "name": "[variables('logAnalyticsName')]",
          "tags": {
            "displayName": "Log Analytics",
            "ProjectName": "[variables('systemName')]",
            "Environment":"[parameters('environment')]"
          },
          "apiVersion": "2020-03-01-preview",
          "location": "[parameters('location')]"
        },
            {
          "type": "microsoft.datafactory/factories/providers/diagnosticsettings",
          "name": "[concat(variables('dataFactoryName'),'/Microsoft.Insights/diagnostics')]",
          "location": "[parameters('location')]",
          "apiVersion": "2017-05-01-preview",
          "dependsOn": [
            "[resourceID('Microsoft.OperationalInsights/workspaces',variables('logAnalyticsName'))]",
            "[resourceID('Microsoft.DataFactory/factories',variables('dataFactoryName'))]"
          ],
          "properties": {
            "name": "diagnostics",
            "workspaceId": "[resourceID('Microsoft.OperationalInsights/workspaces',variables('logAnalyticsName'))]",
            "logAnalyticsDestinationType": "Dedicated",
            "logs": [
              {
                "category": "PipelineRuns",
                "enabled": true,
                "retentionPolicy": {
                  "enabled": false,
                  "days": 0
                }
              },
              {
                "category": "TriggerRuns",
                "enabled": true,
                "retentionPolicy": {
                  "enabled": false,
                  "days": 0
                }
              },
              {
                "category": "ActivityRuns",
                "enabled": true,
                "retentionPolicy": {
                  "enabled": false,
                  "days": 0
                }
              }
            ],
            "metrics": [
              {
                "category": "AllMetrics",
                "timeGrain": "PT1M",
                "enabled": true,
                "retentionPolicy": {
                  "enabled": false,
                  "days": 0
                }
              }
            ]
          }
       }
        ]
    }
    

    【讨论】:

    • 呃,糟糕 :( 真令人失望。我想你不知道有什么方法可以从现有的工厂生成这些东西的初始模板?
    • @Brondahl 更新了答案以包含一个。
    • @Brondahl 如果这对您有帮助,请为答案投票或提供其他可以提供的反馈。
    • 一旦我有机会对其进行测试:D 唉,我无法直接控制我的 Azure 上下文,所以当我第一次搞砸并删除 ADF 实例时,我不得不让“Azure 平台团队”为我提供替代品。这意味着我可以明智地测试替代方案,以防它们也删除目标。我打算尝试建立一个 What-If DevOps 管道,它应该告诉我这是否有效。
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2012-07-03
    相关资源
    最近更新 更多