7

我想使用 Visual Studio 2015 在 azure 中为资源组创建一个新的 vm。新的 vm 依赖于同一资源组中的现有资源,该资源未在模板中声明。但我得到“资源 'Microsoft.Storage/storageAccounts/***' 是 02:21:10 - 未在模板中定义”

"resources": [
{
  "apiVersion": "2015-06-15",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[variables('vmName')]",
  "location": "[resourceGroup().location]",
  "tags": {
    "displayName": "VirtualMachine"
  },
  "dependsOn": [
    "[resourceId('0abb7c58-93b4-45f4-b1be-61a98ac347a3','securitydata','Microsoft.Storage/storageAccounts', parameters('storageAccounts_simscitestrg6892_name'))]"
  ],

DependsOn 只能引用同一个 ARM 模板中的资源?

任何帮助表示赞赏。

问候,弗兰克。

4

3 回答 3

11

DependsOn 只能引用同一个 ARM 模板中的资源?

从这篇关于在 Azure 资源管理器模板中定义依赖关系的官方文档中,我们可以找到如下内容:

资源管理器评估资源之间的依赖关系,并按依赖顺序部署它们。当资源不相互依赖时,资源管理器会并行部署它们。您只需为部署在同一模板中的资源定义依赖关系

根据我的测试,我可以重现此问题。您需要在模板中添加 Storage 资源,如下所示:

{
    "name": "[parameters('storageAccounts_simscitestrg6892_name')]",
    "type": "Microsoft.Storage/storageAccounts",
    "location": "[resourceGroup().location]",
    "apiVersion": "2015-06-15",
    "dependsOn": [],
    "tags": {
      "displayName": "StorageAccountResourceName"
    },
    "properties": {
      "accountType": "[parameters('StorageAccountType')]"
    }
}

对于您的 VM 资源,您可以osDisk在“properties > storageProfile”部分下配置如下:

"osDisk": {
  "name": "Your-VMOSDisk",
  "vhd": {
    "uri": "[concat('https://', parameters('storageAccounts_simscitestrg6892_name'), '.blob.core.windows.net/', variables('Your-VMStorageAccountContainerName'), '/', variables('Your-VMOSDiskName'), '.vhd')]"
  },
  "caching": "ReadWrite",
  "createOption": "FromImage"
}

存储资源将在与您的 VM 相同的位置创建(如果不存在)。

于 2016-12-15T10:25:23.260 回答
3

不,这没有任何意义,dependsOn 属性旨在跟踪 ARM 模板内部的依赖关系,因此它可以按特定顺序配置资源。如果有资源,那么跟踪它是没有意义的。它已经在那里了。您只需在使用时引用它。

于 2016-12-15T08:20:29.350 回答
0

是的。当您创建依赖于您通过同一模板创建的另一个资源的资源时,将使用 DependsOn。如果资源已经创建,那么您只需添加对它的引用。在您的情况下,您可以像这样为 VM 添加属性键:

"properties": {
                "hardwareProfile": {
                    "vmSize": "Standard_DS1"
                },
                "storageProfile": {
                    "imageReference": {
                        "publisher": "MicrosoftWindowsServerHPCPack",
                        "offer": "WindowsServerHPCPack",
                        "sku": "2012R2",
                        "version": "latest"
                    },
                    "osDisk": {
                        "name": "[parameters('virtualMachines_APP01_name')]",
                        "createOption": "FromImage",
                        "vhd": {
                            "uri": "[concat('https', '://', parameters('storageAccounts_vmdkstorageacct_name'), '.blob.core.windows.net', concat('/vhds/', parameters('virtualMachines_APP01_name'),'APP01.vhd'))]"
                        },
                        "caching": "ReadWrite"
                    },
                    "dataDisks": []
                },
                "osProfile": {
                    "computerName": "[parameters('virtualMachines_APP01_name')]",
                    "adminUsername": "vmadmin",
                    "windowsConfiguration": {
                        "provisionVMAgent": true,
                        "enableAutomaticUpdates": true
                    },
                    "secrets": [],
                    "adminPassword": "[parameters('virtualMachines_APP01_adminPassword')]"
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaces_app01_name'))]"
                        }
                    ]
                }
            }
于 2016-12-15T10:06:21.433 回答