如何避免使用 ARM 模板重新部署已部署的资源?
How to avoid redeployment of already deployed resources with ARM Template?
我是 ARM 新手。我创建了一个用于在资源组中部署存储帐户和数据工厂的 ARM 模板。
如果我想使用同一个 ARM 模板将另一个资源添加到同一个资源组中,我能否不简单地在存储帐户和数据工厂部署代码下方的 ARM 模板中添加该资源和 运行 ARM 模板?
因为目前,当我 运行 相同的模板时,它给我一个错误提示:
storage accounts already exists.
它似乎在尝试重新部署我不想要的存储帐户。每次我必须部署一些新资源时,如何通过避免重新部署已部署的资源来使用相同的 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": {}
}
存储帐户名称必须是全局唯一的。也许有人已经使用过该名称,因此出现了消息。
常用模式是使用 uniqueString(resourceGroup().id) 函数来降低冲突的可能性。
如果您确定此名称是唯一的,请确保重新部署到同一资源组和订阅。如果您尝试重新部署到不同的资源组或订阅,Azure 将尝试创建新资源并抛出您收到的错误。
模板部署是有范围的,因此如果您更改范围(在本例中为资源组),您将获得一组基于此模板的新资源。对于名称在整个 Azure 中必须唯一的资源(即存储帐户或容器注册表、Web 应用程序、函数应用程序等),最佳做法是使用基于资源组 ID 的哈希。 I'd 包含订阅的 guid,Azure 确保它是唯一的,因此发生冲突的可能性非常低。
我是 ARM 新手。我创建了一个用于在资源组中部署存储帐户和数据工厂的 ARM 模板。
如果我想使用同一个 ARM 模板将另一个资源添加到同一个资源组中,我能否不简单地在存储帐户和数据工厂部署代码下方的 ARM 模板中添加该资源和 运行 ARM 模板?
因为目前,当我 运行 相同的模板时,它给我一个错误提示:
storage accounts already exists.
它似乎在尝试重新部署我不想要的存储帐户。每次我必须部署一些新资源时,如何通过避免重新部署已部署的资源来使用相同的 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": {}
}
存储帐户名称必须是全局唯一的。也许有人已经使用过该名称,因此出现了消息。
常用模式是使用 uniqueString(resourceGroup().id) 函数来降低冲突的可能性。
如果您确定此名称是唯一的,请确保重新部署到同一资源组和订阅。如果您尝试重新部署到不同的资源组或订阅,Azure 将尝试创建新资源并抛出您收到的错误。
模板部署是有范围的,因此如果您更改范围(在本例中为资源组),您将获得一组基于此模板的新资源。对于名称在整个 Azure 中必须唯一的资源(即存储帐户或容器注册表、Web 应用程序、函数应用程序等),最佳做法是使用基于资源组 ID 的哈希。 I'd 包含订阅的 guid,Azure 确保它是唯一的,因此发生冲突的可能性非常低。