我如何以编程方式(C#)读取WebApp的自动缩放设置?

时间:2017-01-27 06:00:08

标签: azure azure-web-sites azure-sdk-.net

我正在尝试使用Microsoft.WindowsAzure.Management.Monitoring和Microsoft.WindowsAzure.Management.WebSites NuGet软件包构建一个小程序来更改Azure WebApps的自动缩放设置。

我一直在大致遵循指南here

但是,我们有兴趣扩展WebApps / App Services而不是云服务,因此我尝试使用相同的代码来读取自动缩放设置,但为我们的WebApp提供资源ID。我已经获得了建立连接所需的凭据(使用浏览器窗口弹出窗口进行Active Directory身份验证,但我知道我们可以将X.509管理证书用于非交互式程序)。

这是我要提出的要求。证书已经建立,如果它们无效,则会提前抛出异常。

AutoscaleClient autoscaleClient = new AutoscaleClient(credentials);
var resourceId = AutoscaleResourceIdBuilder.BuildWebSiteResourceId(webspaceName: WebSpaceNames.NorthEuropeWebSpace, serverFarmName: "Default2");
AutoscaleSettingGetResponse get = autoscaleClient.Settings.Get(resourceId); // exception here

WebApp(我们称之为“MyWebApp”)是北欧地区名为“WebDevResources”的资源组中名为“Default2”(标准:1小)的应用服务计划的一部分。我希望我的问题是我使用错误的名称在代码中构建resourceId - 库中的命名约定不能很好地映射到我在Azure门户中看到的内容。

我假设BuildWebSiteResourceId是正确的调用方法,请参阅MSDN文档here

然而,它采用的两个参数是webspaceName和serverFarmName,它们都不匹配Azure门户(或Google)中的任何内容。我找到了另一个似乎使用WebApp的webSpaceName地理区域的示例,因此我使用了托管我们应用程序的北欧预定义值。

在尝试在Azure门户中找到serverFarmName的正确值时,我找到了应用服务计划的资源ID,如下所示:

/subscriptions/{subscription-guid}/resourceGroups/WebDevResources/providers/Microsoft.Web/serverfarms/Default2

该资源ID对我正在尝试的呼叫无效,但它确实支持“serverfarm”与App Service Plan相同的想法。

当我运行代码时,无论resourceId参数看起来是正确还是垃圾,我都会收到此错误响应:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"> {"Code":"SettingNotFound","Message":"Could not find the autoscale settings."} </string>

那么,如何为我的WebApp或App Service Plan构建正确的资源ID?或者,是否有一个不同的树,我应该咆哮以编程方式管理WebApp扩展?

更新的 下面的解决方案得到了我想要的信息。我还发现resources.azure.com上的Azure资源浏览器对于浏览现有资源和查找正确的名称非常有用。例如,我的自动缩放设置的名称实际上是“Default2-WebDevResources”,即“{AppServicePlan} - {ResourceGroup}”,这是我不希望的。

2 个答案:

答案 0 :(得分:2)

有一个预览服务https://resources.azure.com/,您可以在其中轻松检查所有资源。如果您在用户界面中搜索autoscale,则可以轻松找到资源的设置。它还将向您展示如何调用相关的REST Api端点来读取或更新该resorce。

Azure Resource Explorer

这是一个很好的工具,可以显示已部署资源的大量详细信息,它实际上会为您正在查看的资源提供ARM模板存根。

要回答您的问题,您可以通过编程方式从具有自动缩放更新设置的客户端调用REST API。 REST API是这样做的一种方式,另一种方式是SDK,PowerShell是第三种方式。

答案 1 :(得分:1)

您所关注的指南基于Azure服务管理模型,又名经典模式,该模式已弃用,仅主要用于向后兼容性支持。

你应该使用最新的 Microsoft.Azure.Insights nuget包用于获取自动缩放设置。

使用上述nuget的示例代码如下:

using Microsoft.Azure.Management.Insights;
using Microsoft.Rest;

//... Get necessary values for the required parameters 

var client = new InsightsManagementClient(new TokenCredentials(token));
client.AutoscaleSettings.Get(resourceGroupName, autoScaleSettingName);

此外, autoscalesettings 是“ Microsoft.Insights ”提供商下的资源,而不是“ Microsoft.Web ”提供商下的资源,这解释了为什么你无法使用serverfarm resourceId找到它。

请参阅下面的REST API Reference获取自动缩放设置。

GET
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/microsoft.insights/autoscaleSettings/{autoscale-setting-name}?api-version={api-version}