在ARM模板中,条件化对象构建是通过“if”语句和“copy”语句实现的。但是,在嵌套情况下,条件化对象构建可能失效。这是由于ARM模板中的“copy”语句只能针对资源组进行嵌套,而不是针对单独的资源。要解决这个问题,可以使用“nested deployment(嵌套部署)”来代替“copy”语句。
示例代码:
{ "apiVersion": "2019-05-10", "name": "[variables('nestedDeploymentName')]", "type": "Microsoft.Resources/deployments", "resourceGroup": "[parameters('resourceGroupName')]", "dependsOn": [ "[resourceId('Microsoft.Resources/resourceGroups/', parameters('resourceGroupName'))]", "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]" ], "properties": { "mode": "Incremental", "templateLink": { "uri": "[variables('templateLink')]", "contentVersion": "[variables('templateLinkVersion')]" }, "parameters": {} } }
在这个示例代码中,“nestedDeployment”使用ARM模板的资源类型“Microsoft.Resources/deployments”来创建一个嵌套的资源。这个嵌套的资源使用模板链接来引用另一个ARM模板(“variables('templateLink')”),并且可以传递任何必要的参数。这个嵌套的资源可以独立于父资源部署,并且可以在其中使用条件语句。