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

Azure ARM Template dependsOn: How to reference a VM extension?

我有一个 Azure ARM 模板,它应该使用 Docker 创建一个 Linux 虚拟机。 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 资源管理器模板函数

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