web-dev-qa-db-fra.com

Ajout de paramètres d'application à une application Web Azure existante à l'aide d'Azure Power Shell

Je veux écrire un script qui s'exécute à l'aide d'Azure Power Shell pour automatiser l'ajout de la configuration de l'application Web

Azure> MyWebApp> Paramètres d'application> Paramètres d'application

Il ressemble à key = "value"

J'écris ce 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

mais je sais que le script ci-dessus ne contient que mon application Web, maintenant je dois accéder à MyWebApp> Paramètres d'application> Paramètres d'application et donner le fichier/tableau de script de mes nouveaux paramètres d'application et le script vérifier s'il y a une nouvelle clé Paramètres d'application il l'ajoutera aux paramètres de l'application, s'il existe des clés existantes, il remplacera sa valeur. Quelles sont les étapes ou APIS ou puis-je le faire avec Azure Power Shell?

Modifier: ce script peut automatiser la création d'une nouvelle application Web et y ajouter des paramètres d'application:

##############################################
# 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
35
Marzouk

Voici une mise à jour basée sur les commandes Azure PowerShell 12/2015. L'exemple concerne les paramètres spécifiques à l'emplacement, si vous voulez global, utilisez Get/Set-AzureRmWebApp et supprimez le paramètre -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
81
Dan Piessens

Récupérer les paramètres de l'application

Définissez d'abord ces deux variables.

$myResourceGroup = 'RESOURCE_GROUP_NAME'
$mySite = 'SITE_NAME'

Passez ensuite au nouveau mode Resource Manager et connectez-vous à votre compte.

Switch-AzureMode AzureResourceManager
Get-AzureAccount

Récupérez ensuite les paramètres de l'application. (Remarque qu'une coche arrière (`) signifie une nouvelle ligne.)

(Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
 -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
 -Action list -ApiVersion 2015-08-01 -Force).Properties

Ajouter/mettre à jour les paramètres de l'application

Pour mettre à jour les paramètres, placez-les d'abord dans une variable.

$props = (Invoke-AzureResourceAction -ResourceGroupName $myResourceGroup `
 -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings `
 -Action list -ApiVersion 2015-08-01 -Force).Properties

Utiliser Set-AzureWebsite convertit la variable en table de hachage.

 $hash = @{}
 $props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }

Maintenant, ajoutez/mettez à jour les valeurs dans la table de hachage.

$hash.NewKey = "NewValue"
$hash.ExistingKey = "NewValue"

Revenez ensuite au mode Gestion des services et validez les paramètres.

Switch-AzureMode AzureServiceManagement
Set-AzureWebsite -Name $mySite -AppSettings $hash

Liste complète des codes

$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

Remarques

AzureServiceManagement et AzureResourceManager ne sont pas destinés à être utilisés dans la même session. Pour l'instant, ce dernier ne semble pas autoriser la mise à jour des paramètres de l'application via Set-AzureResource. Ce qui précède est une solution de contournement. Une autre façon consiste à utiliser l'Azure CLI au lieu de PowerShell.

13
Shaun Luttin

Ces réponses indiquent leur âge, car Azure PowerShell et AzureRM d'origine sont obsolètes. Pour ce faire, en utilisant le module Az PowerShell, cela ressemblerait à ceci:

Exemple

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)

Explication

  1. Connection-AzAccount - se connecte au compte Azure, vous devrez peut-être effectuer une étape ultérieure si vous devez sélectionner un abonnement
  2. $site = Get-AzWebApp... - récupère le site à modifier
  3. $oldSettings... - récupère tous les paramètres existants et les place dans un HashTable
    1. $site.SiteConfig.AppSettings | % - Pipes (passe) chaque paramètre via un raccourci alias de ForEach-Object
    2. { $h = @{} } - crée un HashTable via le -Begin paramètre positionnel
    3. { $h[$_.Name] = $_Value } - ajoute une valeur nommée au HashTable pour chaque valeur dans $site.SiteConfig.AppSettings via le -Process paramètre positionnel
    4. { $h } - renvoie le HashTable nouvellement rempli via le -End paramètre positionnel à la variable à gauche
  4. $newSettings = @{... - crée un HashTable des paramètres à ajouter
  5. Set-AzWebApp... - combine les deux HashTables et remplace les AppSettings existants par l'ensemble combiné. Notez que cela suppose que vous n'avez aucun doublon entre l'ancien et le nouveau paramètre. Si cette situation s'applique à vous, vous aurez besoin de la déduplication d'une manière qui vous convient, c'est-à-dire écraser/pas écraser.
2
Robb Vandaveer