Веб-приложение AzureRM — как управлять настройкой слота с помощью Powershell

Я хотел бы установить строки подключения и параметры приложения моего веб-приложения Azure с помощью powershell. И я бы хотел, чтобы эти настройки были привязаны к слоту, а не к приложению при его замене.

Код настроек приложения выглядит так и работает:

$PropertiesObject = @{"SMTPUser"="myuser"; "SMTPPassword"="secretpwd";}
$webAppName = "mywebapp"
$slotName = "demo"
$resourceGroupName = "myResourceGroup"

New-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName $resourceGroupName -ResourceType Microsoft.Web/sites/slots/config -ResourceName $webAppName/$slotName/appsettings -ApiVersion 2015-08-01 -Force


$stickSlotConfigObject = @{"connectionStringNames"=@(); "appSettingNames" = @("SMTPUserName","SMTPPassword");}

$result = Set-AzureRmResource -PropertyObject $stickSlotConfigObject -ResourceGroupName $resourceGroupName -ResourceType Microsoft.Web/sites/config -ResourceName $webAppName/slotConfigNames -ApiVersion 2015-08-01 -Force

Это работает. Когда я перехожу к колонке слота веб-приложения на портале Azure, флажок «Настройка слота» установлен так, как я этого хочу.

Я борюсь с тем, как установить строки подключения, чтобы также установить флажок «настройка слота». Я попробовал следующее,

$PropertiesObject =  @{ 
  AzureWebJobsStorage = @{  
    Type = "Custom"; 
    Value = "somestring"
  };
  Common = @{   
    Type = "SQLAzure"; 
    Value = "somedatabasestring" 
  };
};

$webAppName = "mywebapp"
$slotName = "demo"
$resourceGroupName = "myResourceGroup"

New-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName $resourceGroupName -ResourceType Microsoft.Web/sites/slots/config -ResourceName $webAppName/$slotName/appsettings -ApiVersion 2015-08-01 -Force

$stickSlotConfigObject = @{"appSettingNames"=@();"connectionStringNames"=@("AzureWebJobsStorage","Common"); }

$result = Set-AzureRmResource -PropertyObject $stickSlotConfigObject -ResourceGroupName $resourceGroupName -ResourceType Microsoft.Web/sites/config -ResourceName $webAppName/appsettings -ApiVersion 2015-08-01 -Force

Это не сработало. Я получил следующую ошибку:

New-AzureRmResource : {"Code":"BadRequest","Message":"The parameter properties has an invalid value.","Target":null,"Details":[{"Message":"The parameter properties has an invalid value."},{"Code":"BadRequest"},{"ErrorEntity":{"Code":"BadRequest","Message":"The parameter properties has an invalid value.","ExtendedCode":"51008","MessageTemplate":"The parameter {0} has an invalid value.","Parameters":["properties"],"InnerErrors":null}}],"Innererror":null}

Я попробовал еще одну настройку (о которой забыл), и она сказала, что объект $PropertiesObject имеет неправильный формат.

Как мне закодировать его в Powershell, чтобы я мог установить флажок настройки слота в строке подключения веб-приложения (или настроить его как «липкий»?


comment
Есть ли у вас какие-либо обновления по этой теме?   -  person Tom Sun - MSFT    schedule 22.12.2016
comment
Я проверил и принял ответ ниже.   -  person Jay Godse    schedule 22.12.2016


Ответы (3)


Попробуйте использовать следующий код, чтобы установить строку подключения в качестве фиксированной настройки для слота. У меня работает корректно. Дополнительные сведения об автоматизации Azure WebApps с помощью PowerShell ARM см. в document.

$connectionString = @{}
$webAppName = "Web AppName"
$resourceGroup ="Resource Group Name"
$slotName ="slot Name" 
$connectionString.Add("AzureWebJobsStorage", @{ value = "The Actual connecting string here" ; Type = 3 }) #Custom
$connectionString.Add("Common", @{ value = "The Actual connecting string here" ; Type = 2 }) #Azure SQL

  Login-AzureRmAccount
  # creat slot connection string
  New-AzureRmResource -PropertyObject $connectionString `
  -ResourceGroupName $resourceGroup `
  -ResourceType "Microsoft.Web/sites/slots/config" `
  -ResourceName "$webAppName/$slotName/connectionstrings" `
  -ApiVersion 2015-08-01 -Force

  # set connection string  as sticky setting 
  $stickSlotConfigObject =  @{"connectionStringNames" = @("AzureWebJobsStorage","Common")} #connection string Name
  Set-AzureRmResource -PropertyObject $stickSlotConfigObject `
  -ResourceGroupName $resourceGroup `
  -ResourceType Microsoft.Web/sites/config `
  -ResourceName  $webAppName/slotConfigNames `
  -ApiVersion 2015-08-01 -Force

введите здесь описание изображения

person Tom Sun - MSFT    schedule 19.12.2016
comment
Спасибо. Я был так близко. Мне не хватало $webAppName/$slotName/connectionstrings и $webAppName/slotConfigNames. Я не мог сказать из документации, как называть подхэши. Кроме того, портал resources.azure.com очень помогает! Этот портал должен быть связан на каждой странице в portal.azure.comm, чтобы люди могли легко понять, как использовать REST или Powershell для создания сценария. - person Jay Godse; 22.12.2016

Теперь есть два новых командлета для управления настройками слота: Get-AzureRmWebAppSlotConfigName и Set-AzureRmWebAppSlotConfigName

Например, я хотел убедиться, что мои строки подключения не являются конфигурацией слота, поэтому я выполнил:

Set-AzureRmWebAppSlotConfigName -ResourceGroupName MyRg -Name MyWebApp -RemoveAllConnectionStringNames
person camaya    schedule 26.09.2017

$resourceName = $webappname + “/slotconfigname”
$stickySlot = Get-AzureRmResource -ResourceName $resourceName -ResourceGroupName -ResourceType “Microsoft.Web/Sites/config” -ApiVersion “2015-08-01”

Затем вы можете проверить существующие:

$stickySlot.Properties.AppSettingNames

Тут нужны разные подходы. Если они пусты с самого начала, вам нужно создать новый массив с настройками:

$settings = @(“AppSetting1, “AppSetting2”)
$stickySlot.Properties.AppSettingNames = $settings

Если уже есть другие значения, и вы хотите их сохранить:

$stickySlot.Properties.AppSettingNames += “AppSetting1”
$stickySlot.Properties.AppSettingNames += “AppSetting2”

Затем после того, как это сделано:

Set-AzureRmResource -ResourceName $resourceName -ResourceGroupName -ResourceType “Microsoft.Web/Sites/config” -Properties $stickySlot.Properties -ApiVersion “2015-08-01"

Взято с: https://msftplayground.com/2016/02/adding-azure-app-service-application-settings-powershell/

person 4c74356b41    schedule 15.12.2016
comment
Первая команда не работает, даже когда я вставляю $resourceGroupName. - person Jay Godse; 16.12.2016