我正在寻找一种以编程方式扩展/缩小 Azure 应用服务实例的方法。几个月前,这个问题已经被问过(例如在下面的链接中),当时不可能得到答案,所以我只是想知道现在是否有一些变化和/或一些新功能可用。
请注意,我们希望在“Azure 应用服务”上执行此操作,而不是旧式的“Azure 云服务”。
我们希望以编程方式进行扩展的原因是这样我们可以使用自定义指标来控制它。我们没有找到将自定义指标发布到 Azure 的方法,然后 Azure 也可以使用它来进行自动缩放。
我们确实发现Azure自动缩放规则可以接受Azure存储队列长度,因此理论上我们可以通过向队列添加/删除消息来控制队列长度,但这是一种黑客行为,而且只有当队列是在经典 Azure Web 门户中创建,而不是在新的 Azure 门户中创建。
是否可以通过编程方式扩展 Azure 应用服务
是的,我们可以使用 REST API 或 SDK 来做到这一点。 我使用fiddler测试了REST API,详情请参阅快照,如何获取授权请参阅文档。
标题信息:
身体信息:
如果可以使用C#代码,请尝试使用
Microsoft.Azure.Management.WebSites 用于扩展 Azure 应用服务。关于SDK的更多详细信息请参考packages.config文件。
如何注册Azure AD App以及如何获取Application ID、secretKey和tenantId请参考文档。以下是演示代码。
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>
从门户网站检查结果。
注意:如果 Azure 服务计划更新,它将适用于服务计划中的所有 WebApp。
在我的中等帖子中找到答案 https://medium.com/p/c5447adbb82e