web-dev-qa-db-ja.com

Azure Power Shellを使用して既存のAzure Webアプリケーションにアプリ設定を追加する

Azure Power Shellを使用して実行するスクリプトを作成して、Webアプリケーション構成の追加を自動化したい

Azure> MyWebApp>アプリケーション設定>アプリ設定

Key = "value"のように見えます

このスクリプトを書く

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

上記のスクリプトはWebアプリケーションのみを取得することを知っているので、MyWebApp>アプリケーション設定>アプリ設定にアクセスし、新しいアプリ設定のスクリプトファイル/配列と、新しいアプリ設定キーがあるかどうかをスクリプトで確認する必要があります既存のキーがある場合、その値をオーバーライドします。手順またはAPISとは何ですか、またはAzure Power Shellでそれを実行できますか?

編集:このスクリプトは、新しいWebアプリケーションの作成とアプリ設定の追加を自動化できます。

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

これは、12/2015 Azure PowerShellコマンドに基づいた更新です。例はスロット固有の設定用です。グローバルが必要な場合は、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
81
Dan Piessens

アプリの設定を取得する

まず、これらの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を介したアプリ設定の更新を許可していないようです。上記は回避策です。別の方法は、PowerShellの代わりにAzure CLIを使用することです。

13
Shaun Luttin

これらの回答は、元の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)

説明

  1. Connection-AzAccount-Azureアカウントに接続します。サブスクリプションを選択する必要がある場合は、後続の手順を実行する必要がある場合があります
  2. $site = Get-AzWebApp...-変更するサイトを取得します
  3. $oldSettings...-既存の設定をすべて取得し、それらをHashTable に入れます
    1. $site.SiteConfig.AppSettings | %-ForEach-Objectの省略形エイリアスを介して各設定をパイプ(パス)します
    2. { $h = @{} }--Begin位置パラメーターを介してHashTableを作成します
    3. { $h[$_.Name] = $_Value }-$site.SiteConfig.AppSettings位置パラメーターを介して、-Processの各値の名前付き値をHashTableに追加します
    4. { $h }-左側の変数への-End位置パラメーターを介して、新しく設定されたHashTableを返します
  4. $newSettings = @{...-追加する設定のHashTableを作成します
  5. Set-AzWebApp...-2つのHashTableを結合し、既存のAppSettingsを結合セットに置き換えます。これは、古い設定と新しい設定の間に重複がないことを前提としていることに注意してください。その状況が当てはまる場合、あなたにとって意味のある方法で重複排除が必要になります。つまり、上書き/上書きなしです。
2
Robb Vandaveer