Arm 模板 - 为什么我会收到一条错误消息,指出资源未在模板中定义?

Arm Template - Why am I getting an error saying resource is not defined in template?

我有一个使用各种链接组件模板的父臂模板。我正在创建的 webApp 需要对服务计划的依赖,但是在添加依赖项(如 documentation 的依赖项部分中的依赖项之后,我不断收到错误消息:'The resource 'Microsoft.Resources/deployments/NovaArmTestDev' is not defined in the template.

父模板:(导致问题的前两个部署)

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "resourcegroupName": {
            "type": "string",
            "metadata": {
                "description": "The name given to the group and all resources it contains by default"
            }
        },
        "templateFolderUri": {
            "type": "string",
            "metadata": {
                "description": "The URI of the template component folder"
            }
        }
    },
    "functions": [],
    "variables": {},
    "resources": [
        {
            "name": "[parameters('resourceGroupName')]",
            "type": "Microsoft.Resources/deployments",
            "resourceGroup": "[parameters('resourcegroupName')]",
            "apiVersion": "2021-04-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('templateFolderUri'), '/servicePlanCreator.json')]",
                    "contentVersion": "1.0.0.0"
                }
            }
            
        },
        {
            "name": "[concat(parameters('resourceGroupName'), 'App')]",
            "type": "Microsoft.Resources/deployments",
            "resourceGroup": "[parameters('resourcegroupName')]",
            "apiVersion": "2021-04-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('templateFolderUri'), '/dualSlotWebApp.json')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {}
            },
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments', parameters('resourceGroupName'))]"
            ]
        },
        {
            "name": "[concat(parameters('resourceGroupName'), 'Storage')]",
            "type": "Microsoft.Resources/deployments",
            "resourceGroup": "[parameters('resourcegroupName')]",
            "apiVersion": "2021-04-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('templateFolderUri'), '/storageAccountTemplate.json')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {}
            }
        },
        {
            "name": "[concat(parameters('resourceGroupName'), 'Vault')]",
            "type": "Microsoft.Resources/deployments",
            "resourceGroup": "[parameters('resourcegroupName')]",
            "apiVersion": "2021-04-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('templateFolderUri'), '/keyVaultCreator.json')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {}
            }
        }
        
    ],
    "outputs": {}
}

servicePlanCreator:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "servicePlanName": {
            "defaultValue": "[resourceGroup().name]",
            "type": "string",
            "metadata": {
                "description": "The name of the newly created resource"
                }
        },
        "operatingSystem": {
            "type": "string",
            "defaultValue": "windows",
            "metadata": {
                "description": "The Operating system the the newly created resource will use"
                }
        },
        "sku": {
            "type": "string",
            "defaultValue": "S1",
            "metadata": {
                "description": "The sku (pricing tier) the resource group the service plan will use"
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().Location]",
            "metadata": {
                "description": "(Optional) The location og the resource. Will default to the location of the resource group if not set."
            }
        }
    },
    "functions": [],
    "variables": {},
    "resources": [
        {
            "name": "[parameters('servicePlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "apiVersion": "2020-12-01",
            "location": "[parameters('location')]",
            "kind": "[parameters('operatingSystem')]",
            "sku": {
                "name": "[parameters('sku')]"
            },
            "tags": {},
            "properties": {
                "name": "[parameters('servicePlanName')]"
            }
            
        }
    ],
    "outputs": {}
}

dualSlotWebApp 模板:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "webAppName": {
            "type": "string",
            "defaultValue": "[concat(resourceGroup().name)]",
            "metadata": {
                "description": "(Optional) Web App name. Defaults to '<ResourceGroupName>Plane' if not supplied"
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "(Optional) Web App name. Defaults to Resource group location if not supplied"
            }
        },
        "appServicePlan": {
            "type": "string",
            "defaultValue": "[resourceGroup().name]",
            "metadata": {
                "description": "name of the Service plan the app will be assigned to"
            }
        }
    },
    "functions": [],
    "variables": {},
    "resources": [
        {
            "name": "[parameters('webAppName')]",
            "type": "Microsoft.Web/sites",
            "apiVersion": "2020-12-01",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('webAppName')]",
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlan'))]"
            },
            "resources": [
                {
                    "name": "[concat(parameters('webAppName'), '/Slot1')]",
                    "type": "Microsoft.Web/sites/slots",
                    "apiVersion": "2021-03-01",
                    "location": "[resourceGroup().location]",
                    "dependsOn": [
                        "[resourceId('Microsoft.Web/sites', parameters('webAppName'))]"
                    ],
                    "tags": {
                        "displayName": "Web Deploy for webApp1"
                    },
                    "properties": {
                        "packageUri": "[concat('artifactsLocation', '/WebPackages/webApp1.zip', 'artifactsLocationSasToken')]",
                        "dbType": "None",
                        "connectionString": "",
                        "setParameters": {
                            "IIS Web Application Name": "webApp1"
                        }
                    }
                }
            ]
        }
    ],
    "outputs": {}
}

参考您之前问题中的模板,dependsOn 似乎配置不正确。

最初,它的设置不正确:

"[resourceId('Microsoft.Resources/resourceGroups/', parameters('resourceGroupName'))]"

我在两个地方进行了更新以使用相同的部署名称:

"[concat(parameters('resourceGroupName'), 'ServicePlan')]"

这两个部分看起来像:

  "resources": [

...

    {
      "name": "[concat(parameters('resourceGroupName'), 'ServicePlan')]",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[parameters('resourcegroupName')]",
      "apiVersion": "2021-04-01",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[concat(parameters('templateFolderUri'), '/servicePlanCreator.json')]",
          "contentVersion": "1.0.0.0"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Resources/resourceGroups/', parameters('resourceGroupName'))]"
      ]
    },

...

    {
      "name": "[concat(parameters('resourceGroupName'), 'App')]",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[parameters('resourcegroupName')]",
      "apiVersion": "2021-04-01",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[concat(parameters('templateFolderUri'), '/dualSlotWebApp.json')]",
          "contentVersion": "1.0.0.0"
        },
        "parameters": {}
      },
      "dependsOn": [
        "[concat(parameters('resourceGroupName'), 'ServicePlan')]"
      ]
    }
  ],

按照我的方式设置依赖关系可确保服务计划 在应用程序开始部署之前完成 部署。