我正在尝试使用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}”,这是我不希望的。
答案 0 :(得分:2)
有一个预览服务https://resources.azure.com/,您可以在其中轻松检查所有资源。如果您在用户界面中搜索autoscale
,则可以轻松找到资源的设置。它还将向您展示如何调用相关的REST Api端点来读取或更新该resorce。
这是一个很好的工具,可以显示已部署资源的大量详细信息,它实际上会为您正在查看的资源提供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}