Можно ли включать веб-сайты Always On для Azure с помощью API-интерфейсов управления/управления ресурсами?

Я пишу код для автоматического развертывания веб-сайтов Azure (включая создание веб-сайта в Azure). Я использую библиотеки управления Azure Management и библиотеки управления ресурсами Azure, доступные в Nuget. Большинство из них на месте, однако я не смог найти способ включить свойство "Всегда на" через любой из API, которые я видел. Это свойство можно установить через портал управления лазурью на вкладке "Конфигурация" для веб-сайта.

Я проверил:

  • Ссылка на свойства в MSDN: http://msdn.microsoft.com/en-us/library/azure/dn236426.aspx
  • API-интерфейсы powershell (get-azureresource, get-azurewebsite,...), чтобы увидеть, есть ли ссылка на Always On (там нет)
  • Звонок REST на портал управления отправляет через Fiddler. Здесь есть ссылка на Always On в POST, идущем на https://manage.windowsazure.com/Websites/UpdateConfig (который, насколько я знаю, не является частью API управления или управления ресурсами). Точный путь в отправленном теле JSON -/siteConfig/AlwaysOn.

Итак, вопрос в том, можно ли включить/отключить Always On через "официальный" API?

Спасибо!

Ответ 1

Я считаю, что нашел решение!

Используя API управления ресурсами, я могу установить свойство AlwaysOn через объект siteConfig. В powershell:

Set-AzureResource -ApiVersion 2014-04-01 -PropertyObject @{"siteConfig" = @{"AlwaysOn" = $false}} -Name mywebsite -ResourceGroupName myrg -ResourceType Microsoft.Web/sites

В API управления ресурсами в .NET это будет похоже на это.

Полученный вызов REST, чтобы https://management.azure.com/subscriptions/xxx/resourcegroups/yyy/providers/Microsoft.Web/sites/zzz?api-version=2014-04-01: { "location": "West Europe", "properties": { "siteConfig": { "AlwaysOn": true } }, "tags": {} }

Ответ 2

Использование обновленной версии ARM (Azure Resource Manager) Powershell, v1.0 +

Get-AzureRmResource: https://msdn.microsoft.com/en-us/library/mt652503.aspx

Set-AzureRmResource: https://msdn.microsoft.com/en-us/library/mt652514.aspx

# Variables - substitute your own values here
$ResourceGroupName = 'My Azure RM Resource Group Name'
$WebAppName = 'My Azure RM WebApp Name'
$ClientAffinityEnabled = $false

# Property object for nested, not exposed directly properties
$WebAppPropertiesObject = @{"siteConfig" = @{"AlwaysOn" = $true}}

# Variables
$WebAppResourceType = 'microsoft.web/sites'

# Get the resource from Azure (consider adding sanity checks, e.g. is $webAppResource -eq $null)
$webAppResource = Get-AzureRmResource -ResourceType $WebAppResourceType -ResourceGroupName $ResourceGroupName -ResourceName $WebAppName

# Set a directly exposed property, in this case whether client affinity is enabled
$webAppResource.Properties.ClientAffinityEnabled = $ClientAffinityEnabled

# Pass the resource object into the cmdlet that saves the changes to Azure
$webAppResource | Set-AzureRmResource -PropertyObject $WebAppPropertiesObject -Force

Ответ 3

Для тех, кто использует .NET API, это

var cfg = await websiteClient.Sites.GetSiteConfigAsync(site.ResourceGroup, site.Name, cancellationToken).ConfigureAwait(false);
if (!cfg.AlwaysOn.GetValueOrDefault())
{
    cfg.AlwaysOn = true;
    await websiteClient.Sites.UpdateSiteConfigAsync(site.ResourceGroup, site.Name, cfg, cancellationToken).ConfigureAwait(false);
}