Использование удостоверений управляемой службы Azure для масштабирования плана службы приложений, но не указано

Я пытаюсь настроить функцию Azure, которая позволит масштабировать наш план службы приложений, увеличивая его в рабочее время и уменьшая за его пределами. Я взял из ответ на этот вопрос.

public static class ScaleUpWeekdayMornings
{
    [FunctionName(nameof(ScaleUpWeekdayMornings))]
    public static async Task Run([TimerTrigger("0 0 13 * * 1-5")]TimerInfo myTimer, ILogger log) // Uses GMT timezone
    {
        var resourceGroup = "DesignServiceResourceGroup";
        var appServicePlanName = "DesignService";
        var webSiteManagementClient = await Utilities.GetWebSiteManagementClient();
        var appServicePlanRequest = await webSiteManagementClient.AppServicePlans.ListByResourceGroupWithHttpMessagesAsync(resourceGroup);
        appServicePlanRequest.Body.ToList().ForEach(x => log.LogInformation($">>>{x.Name}"));
        var appServicePlan = appServicePlanRequest.Body.Where(x => x.Name.Equals(appServicePlanName)).FirstOrDefault();
        if (appServicePlan == null)
        {
            log.LogError("Could not find app service plan.");
            return;
        }
        appServicePlan.Sku.Family = "P";
        appServicePlan.Sku.Name = "P2V2";
        appServicePlan.Sku.Size = "P2V2";
        appServicePlan.Sku.Tier = "Premium";
        appServicePlan.Sku.Capacity = 1;
        var updateResult = await webSiteManagementClient.AppServicePlans.CreateOrUpdateWithHttpMessagesAsync(resourceGroup, appServicePlanName, appServicePlan);
    }
}

public static class Utilities
{
    public static async Task<WebSiteManagementClient> GetWebSiteManagementClient()
    {
        var azureServiceTokenProvider = new AzureServiceTokenProvider();
        var accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");
        var tokenCredentials = new TokenCredentials(accessToken);
        return new WebSiteManagementClient(tokenCredentials)
        {
            SubscriptionId = "<realSubscriptionIdHere>",                
        };
    }
}

Когда я запускаю это локально, он работает и фактически выполняет масштабирование в нашем плане службы приложений Azure (я полагаю, через Azure CLI). Однако при развертывании этой функции Azure в Azure она не находит никаких планов службы приложений. Он попадает в блок appservicePlan == null и возвращается. Я включил управляемую идентификацию службы для развернутой функции Azure и предоставил ей разрешения участника в службе приложений, для которой я хочу масштабироваться.

Разрешение службы приложений Azure

Я что-то упускаю? Почему

await webSiteManagementClient.AppServicePlans.ListByResourceGroupWithHttpMessagesAsync(resourceGroup);

ничего не вернуть при запуске как часть опубликованной функции Azure?




Ответы (1)


Проблема заключалась в том, что разрешение было установлено для службы приложений (которая была приложением в плане службы приложений). Его необходимо было установить в группе ресурсов, чтобы иметь возможность читать планы службы приложений.

person Scotty H    schedule 11.09.2019