Добавление настроек приложения в существующее веб-приложение Azure с использованием Azure Power Shell
Я хочу написать script, которые запускаются с использованием силовой оболочки azure для автоматизации добавления конфигурации веб-приложения
Azure > MyWebApp > Параметры приложения > Настройки приложения
Он выглядит как key = "value"
Я пишу это script
###########################
# MyApp Config Automation #
###########################
#Begin
$subscriptionName="MySubscriptionName"
$webSiteName="MyWebAppName"
$storageAccountName="StorageAccountName"
########################################
$userName = "[email protected]"
$securePassword = ConvertTo-SecureString -String "mypass" -AsPlainText -Force
#####################################
$cred = New-Object System.Management.Automation.PSCredential($userName, $securePassword)
#####################################
Add-AzureAccount -Credential $cred
Select-AzureSubscription -SubscriptionName $subscriptionName -Default
#####################################
Get-AzureWebsite -Name $webSiteName
#End
но я знаю, что выше script получает только мое веб-приложение, теперь мне нужно получить доступ к настройкам MyWebApp > Настройки приложения > Настройки приложения и предоставить файл/массив script моих новых настроек приложения и script проверьте, есть ли новый ключ настроек приложения, он добавит его в настройки приложения, если есть какие-либо существующие ключи, он переопределит это значение.
Каковы шаги или APIS, или я могу сделать это с помощью лазурной оболочки питания?
Изменить:
Этот script может автоматизировать создание нового веб-приложения и добавление к нему настроек приложения:
##############################################
# Creating website and Adding Configs Script #
##############################################
$webSiteName="mywebsite"
$storageAccountName="storageaccount"
$subscriptionName="mysubsc"
$userName = "myaccount"
$securePassword = ConvertTo-SecureString -String "mypass" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($userName, $securePassword)
Add-AzureAccount -Credential $cred
Select-AzureSubscription -SubscriptionName $subscriptionName -Default
New-AzureWebsite -Name $webSiteName
New-AzureStorageAccount –StorageAccountName $storageAccountName -Location "South Central US"
$ClientId="dfgdf6"
$Password="ffefe"
$StorageAccountKey = Get-AzureStorageKey -StorageAccountName $storageAccountName
$AppSettings = @{"StorageAccountPrimary" = $StorageAccountKey.Primary;"StorageAccountSecondary" = $StorageAccountKey.Secondary;"ida:ClientId"=$ClientId;"ida:Password"=$Password}
Set-AzureWebsite -Name $webSiteName -AppSettings $AppSettings
Ответы
Ответ 1
Здесь обновление для него основано на командах Azure PowerShell 12/2015. Например, если вы хотите использовать глобальные значения, используйте Get/Set-AzureRmWebApp и удалите параметр -slot.
$myResourceGroup = 'PartsUnlimitedMRP'
$mySite = 'centpartsunlimited'
$webApp = Get-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup -Name $mySite -Slot production
$appSettingList = $webApp.SiteConfig.AppSettings
$hash = @{}
ForEach ($kvp in $appSettingList) {
$hash[$kvp.Name] = $kvp.Value
}
$hash['NewKey'] = "NewValue"
$hash['ExistingKey'] = "NewValue"
Set-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup -Name $mySite -AppSettings $hash -Slot production
Ответ 2
Получить настройки приложения
Сначала установите эти две переменные.
$myResourceGroup = 'RESOURCE_GROUP_NAME'
$mySite = 'SITE_NAME'
Затем перейдите в новый режим диспетчера ресурсов и войдите в свою учетную запись.
Switch-AzureMode AzureResourceManager
Get-AzureAccount
Затем загрузите настройки приложения. ( Примечание, что обратный тик (`) означает новую строку.)
(Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
-ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
-Action list -ApiVersion 2015-08-01 -Force).Properties
Добавить/Обновить настройки приложения
Чтобы обновить настройки, сначала поместите их в переменную.
$props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
-ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
-Action list -ApiVersion 2015-08-01 -Force).Properties
Чтобы использовать Set-AzureWebsite
преобразовать переменную в хеш-таблицу.
$hash = @{}
$props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
Теперь добавьте/обновите значения в хэш-таблице.
$hash.NewKey = "NewValue"
$hash.ExistingKey = "NewValue"
Затем вернитесь в режим управления сервисом и выполните настройки.
Switch-AzureMode AzureServiceManagement
Set-AzureWebsite -Name $mySite -AppSettings $hash
Полный листинг кода
$myResourceGroup = 'RESOURCE_GROUP_NAME'
$mySite = 'SITE_NAME'
Switch-AzureMode AzureResourceManager
Get-AzureAccount
(Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
-ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
-Action list -ApiVersion 2015-08-01 -Force).Properties
$props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
-ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
-Action list -ApiVersion 2015-08-01 -Force).Properties
$hash = @{}
$props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
$hash.NewKey = "NewValue"
$hash.ExistingKey = "NewValue"
Switch-AzureMode AzureServiceManagement
Set-AzureWebsite -Name $mySite -AppSettings $hash
Примечания
AzureServiceManagement и AzureResourceManager не предназначены для использования в одном сеансе. Пока что последнее, похоже, не позволяет обновлять настройки приложения через Set-AzureResource
. Вышесказанное является обходным решением. Другой способ - использовать интерфейс Azure CLI вместо PowerShell.
Ответ 3
Эти ответы показывают их возраст, поскольку как исходная оболочка Azure PowerShell, так и AzureRM устарели. Для этого с помощью модуля Az PowerShell это будет выглядеть следующим образом:
Пример
Connect-AzAccount
$site = Get-AzWebApp -Name foo-com-dev-as
$oldSettings = ($site.SiteConfig.AppSettings | % { $h = @{} } { $h[$_.Name] = $_.Value } { $h })
$newSettings = @{ StorageAccountPrimary = $StorageAccountKey.Primary
StorageAccountSecondary = $StorageAccountKey.Secondary
"ida:ClientId" = $ClientId
"ida:Password" = $Password }
Set-AzWebApp -ResourceGroupName foo-com-dev-rg -Name foo-com-dev-as -AppSettings ($oldSettings + $newSettings)
Объяснение
Connection-AzAccount
- подключается к учетной записи Azure, вам может потребоваться выполнить следующий шаг, если вам нужно выбрать подписку
$site = Get-AzWebApp
... - получает сайт, который нужно изменить
$oldSettings
... - получает все существующие настройки и помещает их в HashTable
$site.SiteConfig.AppSettings | %
- передает (передает) каждую настройку через сокращенный псевдоним ForEach-Object
{ $h = @{} }
- создает HashTable
через позиционный параметр -Begin
{ $h[$_.Name] = $_Value }
- добавляет именованное значение в HashTable
для каждого значения в $site.SiteConfig.AppSettings
через позиционный параметр -Process
{ $h }
- возвращает вновь заполненную HashTable
через позиционный параметр -End
в переменную слева
$newSettings = @{
... - создает HashTable
настроек для добавления
Set-AzWebApp
... - объединяет две таблицы HashTable и заменяет существующие наборы приложений комбинированным набором. Обратите внимание, что это предполагает, что у вас нет дубликатов между старыми и новыми настройками. Если эта ситуация применима к вам, вам потребуется дедупликация таким образом, чтобы она имела смысл для вас, то есть перезапись/без перезаписи.