33

部署以下模板:

https://gist.github.com/rnkhouse/aea0a8fd395da37b19466348b919d620

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "String"
        },
        "virtualNetworkName": {
        "type": "string",
        "metadata": {
            "description": "This is the name of the Virtual Network"
        }
        },
        "networkInterfaceName": {
        "type": "string",
        "metadata": {
            "description": "This is the prefix name of the Network interfaces"
        }
        },
        "loadBalancerName": {
        "type": "string",
        "metadata": {
            "description": "This is the name of the load balancer"
        }
        },
        "adminUsername": {
        "type": "string",
        "metadata": {
            "description": "Admin username"
        }
        },
        "adminPublicKey": {
        "type": "string",
        "metadata": {
            "description": "SSH Public Key"
        }
        },
        "imagePublisher": {
        "type": "string",
        "defaultValue": "Canonical",
        "metadata": {
            "description": "Image Publisher"
        }
        },
        "vmNamePrefix": {
        "type": "string",
        "metadata": {
            "description": "Prefix to use for VM names"
        }
        },
        "imageOffer": {
        "type": "string",
        "defaultValue": "UbuntuServer",
        "metadata": {
            "description": "Image Offer"
        }
        },
        "imageSKU": {
        "type": "string",
        "defaultValue": "14.04.5-LTS",
        "metadata": {
            "description": "Image SKU"
        }
        },
        "vmStorageAccountContainerName": {
        "type": "string",
        "defaultValue": "vhds",
        "metadata": {
            "description": "This is the storage account container name"
        }
        },
        "storageAccountName": {
        "type": "string",
        "metadata": {
            "description": "Storage account name"
        }
        },
        "vmSize": {
        "type": "string",
        "defaultValue": "Standard_D1",
        "metadata": {
            "description": "This is the allowed list of VM sizes"
        }
        },
        "subnetName": {
            "defaultValue": "subnet-2",
            "type": "String"
        }
    },
    "variables": {
        "availabilitySetName": "[concat(parameters('subnetName'),'-AVSET')]",
        "addressPrefix": "1.0.0.0/16",
        "subnetPrefix": "1.0.2.0/24",
        "storageAccountType": "Standard_LRS",
        "vnetID": "[resourceId(resourceGroup().name,'Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
        "subnetRef": "[concat(variables('vnetID'),'/subnets/',parameters ('subnetName'))]",
        "numberOfInstances": 2,
        "lbID": "[resourceId('Microsoft.Network/loadBalancers',parameters('loadBalancerName'))]"
    },
    "resources": [
        {
        "apiVersion": "2015-05-01-preview",
        "type": "Microsoft.Storage/storageAccounts",
        "name": "[parameters('storageAccountName')]",
        "location": "[parameters('location')]",
        "properties": {
            "accountType": "[variables('storageAccountType')]"
        }
        },
        {
        "apiVersion": "2016-04-30-preview",
        "type": "Microsoft.Compute/availabilitySets",
        "name": "[variables('availabilitySetName')]",
        "location": "[parameters('location')]",
        "properties": {
            "platformFaultDomainCount": "2",
            "platformUpdateDomainCount": "2",
            "managed": "true"
        }
        },
        {
        "apiVersion": "2015-05-01-preview",
        "type": "Microsoft.Network/virtualNetworks/subnets",
        "name": "[concat(parameters('virtualNetworkName'), '/', parameters('subnetName'))]",
        "location": "[parameters('location')]",
        "properties": {
            "addressPrefix": "[variables('subnetPrefix')]"
        }
        },
        {
        "apiVersion": "2015-05-01-preview",
        "type": "Microsoft.Network/networkInterfaces",
        "name": "[concat(parameters('networkInterfaceName'), copyindex())]",
        "location": "[parameters('location')]",
        "copy": {
            "name": "nicLoop",
            "count": "[variables('numberOfInstances')]"
        },
        "dependsOn": [
            "[concat('Microsoft.Network/loadBalancers/', parameters('loadBalancerName'))]"
        ],
        "properties": {
            "ipConfigurations": [
            {
                "name": "ipconfig1",
                "properties": {
                "privateIPAllocationMethod": "Dynamic",
                "subnet": {
                    "id": "[variables('subnetRef')]"
                },
                "loadBalancerBackendAddressPools": [
                    {
                    "id": "[concat(variables('lbID'), '/backendAddressPools/BackendPool1')]"
                    }
                ]
                }
            }
            ]
        }
        },
        {
        "apiVersion": "2015-05-01-preview",
        "type": "Microsoft.Network/loadBalancers",
        "name": "[parameters('loadBalancerName')]",
        "location": "[parameters('location')]",
        "dependsOn": [],
        "properties": {
            "frontendIPConfigurations": [
            {
                "properties": {
                "subnet": {
                    "id": "[variables('subnetRef')]"
                },
                "privateIPAddress": "1.0.2.50",
                "privateIPAllocationMethod": "Static"
                },
                "name": "LoadBalancerFrontend"
            }
            ],
            "backendAddressPools": [
            {
                "name": "BackendPool1"
            }
            ],
            "loadBalancingRules": [
            {
                "properties": {
                "frontendIPConfiguration": {
                    "id": "[concat(resourceId('Microsoft.Network/loadBalancers', parameters('loadBalancerName')), '/frontendIpConfigurations/LoadBalancerFrontend')]"
                },
                "backendAddressPool": {
                    "id": "[concat(resourceId('Microsoft.Network/loadBalancers', parameters('loadBalancerName')), '/backendAddressPools/BackendPool1')]"
                },
                "probe": {
                    "id": "[concat(resourceId('Microsoft.Network/loadBalancers', parameters('loadBalancerName')), '/probes/lbprobe')]"
                },
                "protocol": "Tcp",
                "frontendPort": 80,
                "backendPort": 80,
                "idleTimeoutInMinutes": 15
                },
                "Name": "lbrule"
            }
            ],
            "probes": [
            {
                "properties": {
                "protocol": "Tcp",
                "port": 80,
                "intervalInSeconds": 15,
                "numberOfProbes": 2
                },
                "name": "lbprobe"
            }
            ]
        }
        },
        {
        "apiVersion": "2016-04-30-preview",
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[concat(parameters('vmNamePrefix'), copyindex())]",
        "copy": {
            "name": "virtualMachineLoop",
            "count": "[variables('numberOfInstances')]"
        },
        "location": "[parameters('location')]",
        "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
            "[concat('Microsoft.Network/networkInterfaces/', parameters('networkInterfaceName'), copyindex())]",
            "[concat('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]"
        ],
        "properties": {
            "availabilitySet": {
            "id": "[resourceId('Microsoft.Compute/availabilitySets',variables('availabilitySetName'))]"
            },
            "hardwareProfile": {
            "vmSize": "[parameters('vmSize')]"
            },
            "osProfile": {
            "computerName": "[concat(parameters('vmNamePrefix'), copyIndex())]",
            "adminUsername": "[parameters('adminUsername')]",
            "linuxConfiguration": {
                "disablePasswordAuthentication": "true",
                "ssh": {
                    "publicKeys": [
                        {
                            "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
                            "keyData": "[parameters('adminPublicKey')]"
                        }
                    ]
                }
            }
            },
            "storageProfile": {
            "imageReference": {
                "publisher": "[parameters('imagePublisher')]",
                "offer": "[parameters('imageOffer')]",
                "sku": "[parameters('imageSKU')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            }
            },
            "networkProfile": {
            "networkInterfaces": [
                {
                "id": "[resourceId('Microsoft.Network/networkInterfaces',concat(parameters('networkInterfaceName'),copyindex()))]"
                }
            ]
            },
            "diagnosticsProfile": {
            "bootDiagnostics": {
                "enabled": "true",
                "storageUri": "[concat('http://',parameters('storageAccountName'),'.blob.core.windows.net')]"
            }
            }
        }
        }
    ]
}

错误:

“部署失败,状态码:400 和消息:部署模板验证失败:'模板中未定义资源'Microsoft.Network/virtualNetworks/mtes-dev-VNET'。请参阅https://aka.ms/arm -使用详细信息的模板。'。”

我已经在其他模板中创建了虚拟网络并在此处使用相同的资源组。但是,我仍然在克服错误。请指教!

4

3 回答 3

83

删除dependsOn代码中的 Vnet,仅当该资源是模板的一部分时才需要它,而不是如果它已经部署。

于 2017-04-18T21:10:05.303 回答
59

对于从搜索'The resource is not defined in the template'到此处结束的其他任何人,此错误消息的另一个可能原因是对表单的引用:

reference('<some complete id outside this template>')

或者

listkeys('<some complete id outside this template>')

错误消息不会告诉您,但您需要在引用当前模板之外定义的资源时包含 API 版本。

例如

reference('<some complete id outside this template>', '2018-03-01')
于 2019-02-27T08:07:25.690 回答
4

我在搜索相同的错误代码时遇到了这个问题。但是我遇到了一个不同的问题:我在模板中引用另一个资源的子资源。我猜这些被认为是在当前模板之外的。

例如

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
    "contentVersion": "1.0.0.0",
    "resources": [    
        {
            "type": "Microsoft.Network/virtualNetworks",
            "name": "vnetName",
            "location": "[resourceGroup().location]",
            "apiVersion": "2018-11-01",
            "properties": {
                ...
                }
            },
            "resources": [
                {
                    "type": "subnets",
                    "apiVersion": "2018-11-01",
                    "name": "subnetName",
                    "dependsOn": [
                        "[resourceId('Microsoft.Network/virtualNetworks', vnetName)]"
                    ],
                    "properties": {
                        ...
                    }
                }
            }
        },
        {
            "apiVersion": "2016-02-01",
            "name": "deploymentName",
            "type": "Microsoft.Resources/deployments",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks.subnets', vnetName, subnetName)]"
            ],
        }
    ]
}

解决方法是将父资源放入部署并依赖它。

例如

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
    "contentVersion": "1.0.0.0",
    "resources": [    
        {
            "apiVersion": "2016-02-01",
            "name": "deployment1",
            "type": "Microsoft.Resources/deployments",
            "resources": [
                {
                    "type": "Microsoft.Network/virtualNetworks",
                    "name": "vnetName",
                    "location": "[resourceGroup().location]",
                    "apiVersion": "2018-11-01",
                    "properties": {
                        ...
                    },
                    "resources": [
                        {
                            "type": "subnets",
                            "apiVersion": "2018-11-01",
                            "name": "subnetName",
                            "dependsOn": [
                                "[resourceId('Microsoft.Network/virtualNetworks', vnetName)]"
                            ],
                            "properties": {
                                ...
                            }
                        }
                    ]
                }
            ]
        },
        {
            "apiVersion": "2016-02-01",
            "name": "deployment2",
            "type": "Microsoft.Resources/deployments",
            "dependsOn": [
                "deployment1"
            ],
        }
    ]
}
于 2019-03-19T06:54:22.287 回答