1

使用 PowerShell 和 ARM 库创建新的 WebApp(应用服务)时,您必须提供名称、资源组名称和位置。应用服务计划是可选的。
https://msdn.microsoft.com/en-us/library/mt619250.aspx

如果您使用所需参数创建 WebApp,但未指定 AppServicePlan,则将创建一个名为“Default_n”且位置与 WebApp 相同的新 AppServicePlan。

现在,如果您“确实”指定一个位置与 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 门户创建新的 WebApp,则无法指定位置;但您“必须”指定应用服务计划。应用服务计划的位置决定了 WebApp 的位置,这似乎是合乎逻辑的。

那么,在创建 Azure WebApp 时指定位置有什么意义呢?

4

2 回答 2

1

这种行为确实很古怪。这是交易:

ARM 要求所有被跟踪的资源都有一个位置,这就是为什么你没有指定它会失败。

但是,一旦该位置到达网站资源提供程序,它会在创建时忽略它,因为该位置是由应用服务计划驱动的。但是在以后的更新中,它的行为会有所不同,并且会失败,这是不匹配的。

底线是,虽然它没有真正意义,但您只需要始终在 Web 应用程序中指定匹配的位置。

于 2016-11-16T18:12:18.497 回答
1

虽然不能直接回答您的问题,但我觉得它足够重要,可以在这里提供。我一直在试验包含 WebApp 和应用服务计划的 ARM 模板。所以模板有这样的东西:

{ # App Service Plan Starts here
   ...
   "location": "[parameters('location')]",
   ...
},
{ # WebApp Starts here
   ...
   "location": "[resourcegroup().location]"
   ...
}

所以这是我的一个复制粘贴错误,这让我花了很多时间进行故障排除。行为与您描述的完全一样。因此,如果我要部署模板,WebApp 将正确分配应用服务计划的位置(因为否则它没有意义),但如果我尝试重新部署此模板,它将失败,说我的 WebApp 存在于另一个位置,因此无法在我尝试创建它的位置创建(这是因为 WebApp 本身占据了位于北欧的资源组的位置,而应用服务计划部署到了西欧,所以ARM 引擎认为这 2 个 WebApp 是 2 个不同的资源)。
所有这一切都令人难过,我确实相信它(至少)忽略了 Microsoft 部分(如果不是说 ARM 逻辑中的错误)。
就像我说的那样,这不是对您问题的直接回答,但我认为它对这个问题有所启发。

于 2016-11-16T14:39:44.803 回答