Azure App Service Planのプラン変更をPowerShellでやってみた

App Service,Automationアカウント,Azure,PowerShell/Azure CLI

App Service Planのプラン変更をPowerShellを使ってやってみました。

App Service(Web Apps)は停止しても課金は止まらずApp Service Planの方を停止する必要があります。ですがAzure VMと違いApp Service Planには停止がありません。

課金を止めようとするとApp Service Planを削除するか無償のプランに変更する必要があります。(削除するとWeb Appsも削除されます。)

また、App Service Planですが、Basicレベルでは手動でのスケールアウト、Standardプラン以上は自動のスケールアウトをサポートしています。ただ自動でスケールアップ、ダウンは出来ません。

課金を停止する場合やBasicプランでスケールアウトさせる場合は手動で設定変更する事になります。

今回は、Azure VMの自動シャットダウンと同じ事が出来ないかという事で、App Service Planのプラン変更をPowerShellを使って試してみました。

スポンサーリンク

Set-AzAppServicePlanを使ってApp Service Planプラン変更する

今回、App Service Planの設定変更を以下の方法でやってみました。

      • Get-AzAppServicePlanで現在のApp Service Planの設定を取得
      • 変更するプラン内容の情報を指定
      • Set-AzAppServicePlanでApp Service Planの設定変更

無償プランに変更するだけなら、Set-AzAppServicePlanだけで可能なのですが、スケールアップダウンと一緒にスケールアウト等も出来るようにしたかったのでこういう形にしています。

    • PowerShellで指定する内容
      • 設定変更対象のApp Service Plan
        • リソースグループ名
        • App Service Plan名
      • App Service Planの設定値
        • Name:F1、B1~3、S1~3、P1v2~P3V2等
        • Tier:Free、Basic、Standard、PremiumV2等
        • Family:F、B、S、Pv2等
        • Capacity;インスタンス数(プランにより上限が異なります)

App Service Planの設定値ですが、例えば無料プランの場合は以下のように指定します。

        • Name : F1
        • Tier : Free
        • Size : F1
        • Family : F
        • Capacity : 1

設定値の確認を入れている為、何度か同じコマンドを実行しています。環境に合わせて適時変更して下さい。

今回作成したPowerShellはGitHubにもアップロードしてあります。

#App Service Plan変更するPowerShell

#設定変更対象のAppServicePlan
$ResourceGroupName = “リソースグループ名"
$AppServicePlanName = “AppServicePlan名"

#AppServicePlan変更後の設定値
$Name = “F1"
$Tier = “Free"
$Size = $Name
$Family = “F"
$Capacity = 1

#現在のAppServicePlanの情報取得
$AppservicePlanConf = Get-AzAppServicePlan -ResourceGroupName $ResourceGroupName -Name $AppServicePlanName

#現在の情報表示
Write-Host “変更前の設定情報: $($AppServicePlanName)"
$AppservicePlanConf
$AppservicePlanConf.Sku

$AppservicePlanConf.Sku.Name = $Name
$AppservicePlanConf.Sku.Tier = $Tier
$AppservicePlanConf.Sku.Size = $Size
$AppservicePlanConf.Sku.Family = $Family
$AppservicePlanConf.Sku.Capacity = $Capacity

$AppservicePlanConf | Set-AzAppServicePlan

#設定変更後AppServicePlanの情報取得
$AppservicePlanConfAfter = Get-AzAppServicePlan -ResourceGroupName $ResourceGroupName -Name $AppServicePlanName

#設定変更後の情報表示
Write-Host “変更後の設定情報: $($AppServicePlanName)"
$AppservicePlanConfAfter
$AppservicePlanConfAfter.Sku

 

AutomationアカウントのRunbookを使って、App Service(Web Apps) の自動シャットダウンっぽい事をやってみる

Freeプランへの変更をAutomationアカウントのRunbookを使って実施します。

AutomationアカウントでRunbookを選択します。下記画面が表示されますので、Runbookの作成を選択します。

Runbookの作成画面が表示されるので、Runbookの種類はPowerShellを選択して作成します。

PowerShell Runbookの編集画面が表示されます。

先ほどのPowerShellでFreeプランとして貼り付けます。(Runbook用に認証部分のみ追加しています。)保存をクリックした後に、テストウィンドウを選択します。

#App Service Plan変更するPowerShell

#認証
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

#設定変更対象のAppServicePlan
$ResourceGroupName = “リソースグループ名"
$AppServicePlanName = “AppServicePlan名"

#AppServicePlan変更後の設定値
$Name = “F1"
$Tier = “Free"
$Size = $Name
$Family = “F"
$Capacity = 1

—以下は先ほどのPowerShellと同じなので省略—

テストの画面が表示されますので、開始をクリックします。

しばらくすると開始します。正しく動作して完了すると、下記画面が表示されます。Freeプランへの変更が出来ている事が確認できます。

編集画面に戻り公開をクリックします。Runbookの発行が表示されますのではいを選択します。(Runbookを実際に利用する為には保存ではなく公開する必要があります。。)

 

 これで、Runbookが作成され利用できる状態になりました。。

後はスケジュールと関連づけすれば、定時にAppServicePlanの変更(自動シャットダウン)が出来ます。

なお、Automationアカウントの作成やスケジュール作成はこちらで試しております。

App Service Plan変更時の注意点

プラン変更できないパターンもあります。

例えばカスタムドメイン等を利用していると、Freeプランへの変更がエラーになります。

プラン変更時にはそのTierでしか使えないサービスを利用しているかどうか確認が必要になります。

今回のPowerShellを使った場合は、同じTierで一番安価なプランを選択する等の設定が必要そうです。

スポンサーリンク