Azure ARM模板部署失败:ResourceSku对象中找不到'type'成员
我来帮你搞定这个部署问题~你遇到的错误根源很明确:App Service Plan的SKU配置格式写错了,我们来一步步修正它。
错误原因分析
你看到的错误提示Could not find member 'type' on object of type 'ResourceSku',对应模板里Microsoft.Web/serverfarms资源的SKU部分——你错误地使用了type属性,但这个属性根本不属于ResourceSku对象。
单独部署存储账户能成功,是因为存储账户的SKU配置是正确的(用了name属性指定SKU),但加上App Service Plan的错误配置后,整个模板解析直接失败了。
修正方案
把App Service Plan资源里的SKU配置部分,替换成正确的格式:原来的"type": "string"要删掉,改用name来指定SKU名称(比如免费层的F1)。
修正后的App Service Plan资源代码如下:
{ "type": "Microsoft.Web/serverfarms", "apiVersion": "2021-02-01", "name": "[variables('uniqueappplanname')]", "location": "[parameters('location')]", "sku": { "name": "F1" // 这里用name指定具体的SKU,比如F1、B1、S1等 }, "properties": { "reserved": false } }
如果你想让App Service Plan的SKU支持参数化配置(就像存储账户的storagesku参数那样),也可以先在parameters里新增一个参数,比如:
"appserviceplanskus": { "type": "string", "defaultValue": "F1" }
然后在SKU部分引用这个参数:"name": "[parameters('appserviceplanskus')]"
完整修正后的ARM模板
这里给你整理好整个可以正常部署的模板:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storagename": { "type": "string", "minLength": 4, "maxLength": 20 }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]" }, "storagesku": { "type": "string", "defaultValue": "Standard_LRS" }, "appserviceplanname": { "type": "string" }, "appname": { "type": "string" }, "appserviceplanskus": { "type": "string", "defaultValue": "F1" } }, "functions": [], "variables": { "uniquestoragename": "[concat(parameters('storagename'),uniqueString(resourceGroup().id))]", "uniqueappplanname": "[concat(parameters('appserviceplanname'),uniqueString(resourceGroup().id))]", "uniqueappname": "[concat(parameters('appname'),uniqueString(resourceGroup().id))]" }, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "name": "[variables('uniquestoragename')]", "apiVersion": "2021-04-01", "tags": { "displayName": "" }, "location": "[parameters('location')]", "kind": "StorageV2", "sku": { "name": "[parameters('storagesku')]" } }, { "type": "Microsoft.Web/serverfarms", "apiVersion": "2021-02-01", "name": "[variables('uniqueappplanname')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('appserviceplanskus')]" }, "properties": { "reserved": false } }, { "type": "Microsoft.Web/sites", "apiVersion": "2021-02-01", "name": "[variables('uniqueappname')]", "location": "[parameters('location')]", "properties": { "httpsOnly": false }, "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', variables('uniqueappplanname'))]" ] } ], "outputs": {} }
另外我还给你修正了Web App的dependsOn引用,用resourceId来确保依赖关系的正确性,避免潜在的部署顺序问题。
现在用这个修正后的模板重新执行PowerShell部署命令,应该就能顺利完成了。
备注:内容来源于stack exchange,提问作者Abhishek Upadhyay

