2017-01-27 21 views
2

我正在尝试使用Microsoft.WindowsAzure.Management.Monitoring和Microsoft.WindowsAzure.Management.WebSites NuGet包来构建一个小程序,以更改Azure WebApps的自动缩放设置。如何以编程方式(C#)读取WebApp的自动缩放设置?

我大致按照指南here。但是,我们有兴趣扩展WebApps/App Services而不是Cloud 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 

的Web应用程序(我们称之为“MyWebApp”)是一种应用服务计划的一部分,所谓的“默认设置2”(标准: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'与App Service Plan相同的想法。

当我运行的代码,无论RESOURCEID参数看起来是否是正确的或垃圾,我得到这个错误响应:

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

所以,我怎样才能构建正确的资源ID为我的WebApp或应用程序服务计划?或者,是否有另一棵树我应该大吼大叫地按计划管理WebApp扩展?

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

+0

您的应用服务计划定价层标准及以上? – juvchan

+0

定价等级列为标准:1小,我知道它是S1定价等级。我还通过Azure Portal创建了一个自动扩展计划,该计划允许我指定最多10个实例。 –

+0

感谢您对原始问题的更新,这些问题为其他人提供了一些非常有用的提示。 – juvchan

回答

0

您遵循的指南基于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} 
+0

谢谢,这正是我所希望的。 –

+0

为了完整起见,我应该注意到,我还必须在客户端对象上设置SubscriptionID,但是很容易从您提供的示例代码中找到它。 –

+0

var client = new InsightsManagementClient(new TokenCredentials(authToken)); client.SubscriptionId = Settings.SubscriptionId; var settings = client.AutoscaleSettings.Get(Settings.ResourceGroupName,Settings.AutoScaleSettingName); –

1

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

Azure Resource Explorer

它揭示了很多细节为部署的资源一个伟大的工具,它实际上给你你正在寻找的资源的ARM模板存根。

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

相关问题