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

How can I programatically (C#) read the autoscale settings for a WebApp?

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

我已经大致遵循了指南here

但是,我们对缩放 Web 应用程序/应用程序服务而不是云服务感兴趣,因此我尝试使用相同的代码来读取自动缩放设置,但为我们的 Web 应用程序提供资源 ID。我已经获得建立连接所需的凭据(使用浏览器 window 弹出窗口进行 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")是名为 "Default2"(标准:1 小)的应用服务计划的一部分,在名为 "WebDevResources" 的资源组中北欧地区。我预计我的问题是我在代码中使用了错误的名称来构建 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' 与应用服务计划相同的想法。

当我 运行 代码时,无论 resourceId 参数似乎是正确的还是垃圾,我都会得到这个错误响应:

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

那么,如何为我的 Web 应用程序或应用程序服务计划构建正确的资源 ID?或者,我是否应该使用不同的树来以编程方式管理 WebApp 缩放?

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

您所遵循的指南基于 Azure 服务管理模型,也称为经典模式,该模型已被弃用,主要用于向后兼容支持。

你应该使用最新的 Microsoft.Azure.Insights 用于获取 autoscale 设置的 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”提供程序下的资源,而不是“[=24]”下的资源=]Microsoft.Web" 提供商,这解释了为什么您无法使用您的服务器场 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}

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

这是一个很好的工具,可以揭示您部署的资源的很多细节,它实际上会为您提供您正在查看的资源的 ARM 模板存根。

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