如何避免使用 ARM 模板重新部署已部署的资源?

时间:2021-05-12 12:40:36

标签: azure azure-devops azure-resource-manager arm-template

我是 ARM 的新手。我创建了一个 ARM 模板,用于在资源组中部署存储帐户和数据工厂。

如果我想使用同一个ARM模板将另一个资源添加到同一个资源组中,是不是可以简单地将该资源添加到存储帐户和数据工厂部署代码下方的ARM模板中并运行ARM模板?
因为目前,当我运行相同的模板时,它给了我一个错误提示:

<块引用>

存储帐户已存在。

它似乎正在尝试重新部署我不想要的存储帐户。如何在每次必须部署一些新资源时使用相同的 ARM 模板,避免重新部署已部署的资源?
我可以在 ARM 模板中添加任何内容吗?

注意:我不想在这里使用 PowerShell 或 Azure CLI。我正在使用创建 YAML 任务的管道部署资源。
PFB 我的示例模板:

{
   "$schema": "http://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
     "location": {
       "type": "string",
       "defaultValue": "West Europe"
     },
     "storageAccountName": {
        "type": "string",
        "defaultValue": "storageabc"
      }
     "accountType": {
       "type": "string"
     },
     "kind": {
       "type": "string"
     }
     ...
   },
   "resources": [
     {
       "name": "[parameters('storageAccountName')]",
       "type": "Microsoft.Storage/storageAccounts",
       "apiVersion": "2019-06-01",
       "location": "[parameters('location')]",
       "properties": {},
       "dependsOn": [],
       "sku": {
         "name": "[parameters('accountType')]"
       },
       "kind": "[parameters('kind')]"
     },
     {
        "type": "Microsoft.DataFactory/factories,
        "apiVersion": "2018-06-01"
        -
        -
        -
        ..
        
     }
   ],
   "outputs": {}
}

1 个答案:

答案 0 :(得分:0)

存储帐户名称必须是全局唯一的。也许有人已经使用过这个名字,因此是这个信息。

常见的模式是使用 uniqueString(resourceGroup().id) 函数来减少冲突的概率。

如果您确定此名称是唯一的,请确保您重新部署到同一资源组和订阅。如果您尝试重新部署到不同的资源组或订阅,Azure 将尝试创建新资源,并会向您抛出与您收到的类似的错误。

模板部署是有范围的,因此如果您更改范围(在本例中为资源组),您将获得基于此模板的一组新资源。对于名称在整个 Azure 中必须唯一的资源(即存储帐户或容器注册表、Web 应用程序、函数应用程序等),最佳做法是使用基于资源组 ID 的哈希。 Id 包含订阅的 guid,Azure 确保它是唯一的,因此发生冲突的可能性非常低。