使用PowerShell和ARM库创建新的WebApp(应用服务)时,必须提供Name,ResourceGroupName和Location。应用服务计划是可选的 https://msdn.microsoft.com/en-us/library/mt619250.aspx
如果使用所需参数创建WebApp并且未指定AppServicePlan,则将创建名为' Default_n'的新AppServicePlan。并且与WebApp具有相同的位置。
现在如果你做了'指定具有与WepApp不同位置的AppServicePlan:
PS New-AzureRmWebApp -Name TestWebApp -ResourceGroupName -DefaultResourceGroup -AppServicePlan MyServicePlan -Location EastAsia
生成的输出将指出“新创建的'的位置”。 WebApp是东亚,尽管AppServicePlan有不同的位置。
但是如果您在ARM门户中观察结果,那么您将看到WebApp确实继承了其AppServicePlan的位置。这是预期的......
事实上,如果你使用PS查找资源:
Find-AzureRmResource -ResourceNameContains TestWebApp
然后,您会发现WebApp的位置与其Container AppServicePlan相同。
此外,如果您尝试使用ARM Portal创建新的WebApp,则无法指定位置;但你必须'指定应用服务计划。应用服务计划的位置决定了WebApp的位置,这似乎是合乎逻辑的。
那么,在创建Azure WebApp时指定位置的重点是什么?
答案 0 :(得分:1)
虽然不能直接回答你的问题,但我觉得它非常重要,可以在这里提供。我一直在试验一个容纳WebApp和App Service Plan的ARM模板。所以模板有类似的东西:
{ # App Service Plan Starts here
...
"location": "[parameters('location')]",
...
},
{ # WebApp Starts here
...
"location": "[resourcegroup().location]"
...
}
这就是我的复制粘贴错误,这让我花了很多时间进行故障排除。行为完全如您所描述的那样。因此,如果我要部署模板,WebApp将正确地分配应用服务计划的位置(因为它没有意义),但如果我尝试重新部署此模板,它将失败,说我的WebApp存在于另一个位置,因此,无法在我尝试创建它的位置创建(这是因为WebApp本身占据了资源组的位置,这是Northeurope,而应用服务计划部署到西欧,因此ARM引擎认为这两个WebApp是两种不同的资源
所有这一切都很难过,我确实相信它(至少)是微软部分的一个忽视(如果不是说ARM逻辑中的一个错误)。
就像我说的那样,这不是你问题的直接答案,但我认为它对这个问题有所启发。
答案 1 :(得分:1)
这种行为确实很古怪。这是交易:
ARM要求所有跟踪的资源都有一个位置,这就是您没有指定失败的原因。
但是,一旦该位置到达网站资源提供者,它就会在创建时忽略它,因为该位置是由应用服务计划驱动的。但是后来的更新它的行为有所不同,并且会失败,因为它不匹配。
最重要的是,虽然它没有意义,但您只需要在Web App中指定匹配的位置。