c# - 是否可以通过编程方式扩展 Azure 应用服务

标签 c# azure azure-web-app-service

我正在寻找一种以编程方式扩展/缩小 Azure 应用服务实例的方法。几个月前,这个问题已经被问过(例如在下面的链接中),当时不可能得到答案,所以我只是想知道现在是否有一些变化和/或一些新功能可用。

Is possible to programmatically scale Azure instances?

请注意,我们希望在“Azure 应用服务”上执行此操作,而不是旧式的“Azure 云服务”。

我们希望以编程方式进行扩展的原因是我们可以使用自定义指标来控制它。我们没有找到将自定义指标发布到 Azure 的方法,然后 Azure 也可以使用它来进行自动缩放。

我们确实发现 Azure 自动缩放规则可以接受 Azure 存储队列长度,因此理论上我们可以通过向队列添加/删除消息来控制队列长度,但这是一种黑客行为,而且仅在以下情况下才有效:队列是在经典 Azure Web 门户中创建的,而不是在新的 Azure 门户中创建的。

最佳答案

Is it possible to scale Azure app services programmatically

是的,我们可以使用REST API来做到这一点或 SDK。 我使用fiddler测试了REST API,具体请引用快照,如何获取授权请引用document .

标题信息:

enter image description here

body 信息:

enter image description here

如果可以使用C#代码,请尝试使用
Microsoft.Azure.Management.WebSites扩展 Azure 应用服务。关于SDK的更多详细信息请引用packages.config文件。 如何注册Azure AD App以及如何获取Application ID、secretKey和tenantId请引用document 。以下是演示代码。

  var subscriptionId = "Your subscrption";
  var appId = "Registried Azure Application Id";
  var secretKey = "Secret Key";
  var tenantId = "tenant Id";
  var resourceGroup = "resource group name";
  var servicePlanName = "service plan name";
  var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
  ClientCredential clientCredential = new ClientCredential(appId, secretKey);
  var tokenResponse = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result;
  var accessToken = tokenResponse.AccessToken;
  TokenCredentials credential = new TokenCredentials(accessToken);
  var webSiteManagementClient = new Microsoft.Azure.Management.WebSites.WebSiteManagementClient(credential);
  webSiteManagementClient.SubscriptionId = subscriptionId;
  var servicePlan = webSiteManagementClient.AppServicePlans.ListByResourceGroupWithHttpMessagesAsync(resourceGroup).Result.Body.Where(x=>x.Name.Equals(servicePlanName)).FirstOrDefault();
   //scale up/down
    servicePlan.Sku.Family = "P"; 
    servicePlan.Sku.Name = "P1";
    servicePlan.Sku.Size = "P1";
    servicePlan.Sku.Tier = "Premium";
    servicePlan.Sku.Capacity = 2; // scale out: number of instances 
   var updateResult = webSiteManagementClient.AppServicePlans.CreateOrUpdateWithHttpMessagesAsync(resourceGroup, servicePlanName, servicePlan).Result;

packages.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.Management.Websites" version="1.6.0-preview" targetFramework="net462" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" targetFramework="net462" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.5" targetFramework="net462" />
  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.5" targetFramework="net462" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net462" />
</packages>

从门户检查结果。

enter image description here

Note: If the Azure Service plan is updated, it will apply to all of WebApps in the Service plan.

关于c# - 是否可以通过编程方式扩展 Azure 应用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747886/

相关文章:

wcf - 使用 RESTSharp 上传图像(addFile)

azure - 在哪里可以查看 Azure 资源管理器模板资源的所有可能属性?

azure - 使用 Azure Function 应用设置自定义域

azure - 将 Consul 与 Azure 应用服务结合使用

c# - 在 C++ 中使用常量变量

c# - 牛顿软件.Json.JsonReaderException : Additional text encountered after finished reading JSON content:

c# - 并行二进制反序列化?

c# - 来自 api c# 的 HttpContent ReadAsAsync map 数据

ASP.NET MVC 5 身份和 Azure

Azure 应用服务 API