Azure ARM模板dependsOn:如何引用VM扩展?

我有一个Azure ARM Teamplate应该用Docker创build一个Linux VM。 Docker使用Azure的DockerExtension安装。 在安装Docker之后,我需要使用Azure的CustomScriptForLinux来运行自定义脚本。 因此,第二个脚本应该依赖于Docker安装。 下面是一个示例,显示了我如何在ARM模板中编写该代码:

 { ..., "variables": { "extensionName": "DockerExtension", "vmName": "Docker", ... }, "resources": [ ..., { "type": "Microsoft.Compute/virtualMachines/extensions", "name": "[concat(variables('vmName'), '/', variables('extensionName'))]", "tags": { "displayName": "DockerExtension" }, "apiVersion": "2015-06-15", "location": "[resourceGroup().location]", "dependsOn": [ "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" ], "properties": { "publisher": "Microsoft.Azure.Extensions", "type": "DockerExtension", "typeHandlerVersion": "1.1", "autoUpgradeMinorVersion": true, "settings": { } } }, { "type": "Microsoft.Compute/virtualMachines/extensions", "name": "[concat(variables('vmName'), '/config')]", "apiVersion": "2015-06-15", "location": "[resourceGroup().location]", "dependsOn": [ "[concat('Microsoft.Compute/virtualMachines/extensions/', variables('vmName'), '/', variables('extensionName'))]" ], "properties": { "publisher": "Microsoft.OSTCExtensions", "type": "CustomScriptForLinux", "typeHandlerVersion": "1.4", "settings": { "fileUris": [ "..." ], "commandToExecute": "bash configure.sh" } } } ] } 

如果我运行这个ARM模板,我得到错误The resource 'Microsoft.Compute/virtualMachines/extensions/Docker/DockerExtension' is not defined in the template. 我不明白为什么。 这是我在模板中的Docker扩展名,不是吗?

如果我只运行其中一个脚本,该模板将起作用。 所以模板中不应该有一个通用的错误。

任何帮助赞赏。

问候,莱纳。

您可以尝试在ARM模板中使用ARM模板函数resourceId()来引用Docker扩展资源,如下所示。

  "type": "Microsoft.Compute/virtualMachines/extensions", "name": "[concat(variables('vmName'), '/config')]", "dependsOn": [ "[resourceId('Microsoft.Compute/virtualMachines/extensions', variables('vmName'), variables('extensionName'))]" ],... 

参考:Azure资源pipe理器模板函数

https://azure.microsoft.com/en-gb/documentation/articles/resource-group-template-functions/#resourceid