首页 文章

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

提问于
浏览
2

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

Is possible to programmatically scale Azure instances?

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

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

我们确实发现Azure自动调度规则可以接受Azure存储队列长度,因此理论上我们可以通过向队列添加/删除消息来控制队列长度,但它只是一种破解,并且只有在创建队列时它才有效在经典的Azure Web门户中,而不是新的Azure门户 .

1 回答

  • 5

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

    是的,我们可以使用REST API或SDK . 我使用fiddler测试REST API,详情请参考快照,有关如何获得授权的信息,请参阅document .

    Headers 信息:

    enter image description here

    身体信息:

    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

    注意:如果Azure服务计划已更新,则它将应用于服务计划中的所有WebApp .

相关问题