Azure App Service プランのSKUやインスタンス数をPowerShellで変更

2020-08-16App Service,Automationアカウント,Azure,PowerShell/Azure CLI

Azure PowerShell を使用して、Azure App Service プランのSKU(サービスプランや価格レベル)を変更する方法を紹介します。

Azure App Service のアプリは起動および停止が可能ですが、プラン自体は停止できません。
Azure App Service プランのリソースに対して課金が発生するため、リソースが存在している限り課金が継続します。

Azure App Service プランの課金は、サービスプラン、価格レベル、インスタンス数によって変わります。
利用量が少ない時期には、より安価なサービスプランや価格レベルを選択したり、インスタンス数を減らすことでコストを削減できます。

今回は、Azure PowerShell を使用した Azure App Service プランのサービスプランや価格レベル変更方法について確認しました。

※Azure PowerShell のバージョン 13.0.0 を使用しています。

スポンサーリンク

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

App Service プランの情報取得はGet-AzAppServicePlan

Get-AzAppServicePlanコマンドレットを使用して、App Service プランの情報を取得できます。

Get-AzAppServicePlan

SKUの項目にサービスプラン、価格レベル、インスタンス数の情報が表示されます。
表示内容の詳細は公式サイトの記述を確認します。

AppServicePlan Class
SkuDescription Class

# Get-AzAppServicePlanでApp Service プランの情報を取得
# Get-AzAppServicePlan -ResourceGroupName “リソースグループ名" -Name “App Service プラン名"

PS C:\> Get-AzAppServicePlan -ResourceGroupName “rg-01" -Name “asp-change-01"

class AppServicePlan
{
  WorkerTierName =
  Status = Ready
  Subscription = サブスクリプションID
  HostingEnvironmentProfile =
  MaximumNumberOfWorkers = 30
  GeoRegion = Japan East
  PerSiteScaling = False
  ElasticScaleEnabled = False
  MaximumElasticWorkerCount = 1
  NumberOfSites = 1
  IsSpot = False
  SpotExpirationTime =
  FreeOfferExpirationTime =
  ResourceGroup = rg-01
  Reserved = True
  IsXenon = False
  HyperV = False
  TargetWorkerCount = 0
  TargetWorkerSizeId = 0
  ProvisioningState = Succeeded
  KubeEnvironmentProfile =
  Sku =
    class SkuDescription
    {
      Name = P0v3
      Tier = Premium0V3
      Size = P0v3
      Family = Pv3
      Capacity = 1
      SkuCapacity =
      Locations =
      Capabilities =
    }
  ExtendedLocation =
  Id = /subscriptions/サブスクリプションID/resourceGroups/rg-01/providers/Microsoft.Web/serverfarms/asp-change-01
  Name = asp-change-01
  Kind = linux
  Location = Japan East
  Type = Microsoft.Web/serverfarms
  Tags =
    [
    ]
}

各サービスプランのSKU表示例

各サービスプランの場合のSKU取得結果です。
Get-AzAppServicePlanコマンドレット実行結果のSKUのみを表示しています。

# Premium v3(P0V3)の場合
PS C:\> (Get-AzAppServicePlan -ResourceGroupName “rg-01" -Name “asp-change-01").sku

Name : P0v3
Tier : Premium0V3
Size : P0v3
Family : Pv3
Capacity : 1
SkuCapacity :
Locations :
Capabilities :

# Basic(Basic B1)の場合
PS C:\> (Get-AzAppServicePlan -ResourceGroupName “rg-01" -Name “asp-change-01").sku

Name : B1
Tier : Basic
Size : B1
Family : B
Capacity : 1
SkuCapacity :
Locations :
Capabilities :
 
# Standard(Standard S1)の場合
PS C:\> (Get-AzAppServicePlan -ResourceGroupName “rg-01" -Name “asp-change-01").sku
Name : S1
Tier : Standard
Size : S1
Family : S
Capacity : 1
SkuCapacity :
Locations :
Capabilities :

※各プラン共通でインスタンス数は1としています。インスタンス数はCapacityの値として表示されます。

App Service プランの設定変更にはSet-AzAppServicePlan

Set-AzAppServicePlanコマンドレットを使用して、App Service プランの設定を変更できます。

Set-AzAppServicePlan

サービスプラン、価格レベル、インスタンス数を変更する場合もSet-AzAppServicePlanコマンドレットを利用します。

App Service プランのSKUを変更するPowerShell

App Service プランのサービスプラン、価格レベル、インスタンス数を変更するPowerShellです。
asp-change-01(リソースグループ名:rg-01)のApp Service プランのリソースを利用して確認しています。

# App Service プランのSKUを変更するPowerShell
# 設定変更対象のApp Service プラン

$ResourceGroupName = “rg-01" #リソースグループ名
$AppServicePlanName = “asp-change-01" #App Service プラン名

# 変更後のApp Service プランのSKU(Basic B1に変更する場合の例)
$AspSkuName = “B1″ 
$AspSkuTier = “Basic"
$AspSkuSize = $AspSkuName
$AspSkuFamily = “B"
$AspSkuCapacity = “1"

# 現在のApp Service プランの情報取得
$AppservicePlanConf = Get-AzAppServicePlan -ResourceGroupName $ResourceGroupName -Name $AppServicePlanName

# 変更前のSKUを出力
write-host “変更前のSKU Nameは $($AppservicePlanConf.Sku.Name) です"
write-host “変更前のSKU Tierは $($AppservicePlanConf.Sku.Tier) です"
write-host “変更前のSKU Sizeは $($AppservicePlanConf.Sku.Size) です"
write-host “変更前のSKU Familyは $($AppservicePlanConf.Sku.Family) です"
write-host “変更前のCapacity名は $($AppservicePlanConf.Sku.Capacity) です"

# 変更後のApp Service プランの値を設定
$AppservicePlanConf.Sku.Name = $AspSkuName
$AppservicePlanConf.Sku.Tier = $AspSkuTier
$AppservicePlanConf.Sku.Size = $AspSkuSize
$AppservicePlanConf.Sku.Family = $AspSkuFamily
$AppservicePlanConf.Sku.Capacity = $AspSkuCapacity

# App Service プランを変更
$AppservicePlanConf | Set-AzAppServicePlan

# 変更後のApp Service プランの情報取得
$AppservicePlanConfAfter = Get-AzAppServicePlan -ResourceGroupName $ResourceGroupName -Name $AppServicePlanName

# 変更後のSKUを出力
write-host “現在のSKU Nameは $($AppservicePlanConfAfter.Sku.Name) です"
write-host “現在のSKU Tierは $($AppservicePlanConfAfter.Sku.Tier) です"
write-host “現在のSKU Sizeは $($AppservicePlanConfAfter.Sku.Size) です"
write-host “現在のSKU Familyは $($AppservicePlanConfAfter.Sku.Family) です"
write-host “現在のCapacity名は $($AppservicePlanConfAfter.Sku.Capacity) です"

※PowerShellはサンプルです。環境や利用用途に応じて変更して下さい。
※インスタンス数だけを変更する場合は、Capacityの設定値だけを指定します。
※App_Service_Plan_Change.ps1という名前でPowerShellを保存して実行しています。

PowerShellを実行してApp Service プランのSKUを変更

PowerShellを実行してApp Service プランのSKUを変更、確認します。
サービスプランと価格レベルをPremium v3(P0V3)からBasic(B1)に変更します。

PS C:\> C:\App_Service_Plan_Change.ps1
変更前のSKU Nameは P0v3 です
変更前のSKU Tierは Premium0V3 です
変更前のSKU Sizeは P0v3 です
変更前のSKU Familyは Pv3 です
変更前のCapacity名は 1 です

~ Set-AzAppServicePlanコマンドレット実行結果 ~

現在のSKU Nameは B1 です
現在のSKU Tierは Basic です
現在のSKU Sizeは B1 です
現在のSKU Familyは B です
現在のCapacity名は 1 です

※App_Service_Plan_Change.ps1という名前でPowerShellを保存して実行しています。

App Service プランのSKU変更時の注意点

Premium v3をBasicに変更、BasicをPremium v3など異なるFamilyに変更する場合は、SKU以外の設定について注意が必要です。
例えばSKU FamilyをBasicに変更すると、スケーリングの設定が手動となります。
App Service プランのインスタンス数の上限も異なるので、その点にも注意が必要です。

それぞれのSKUでしか利用できない機能を使っている場合は、App Service プランの変更に失敗する場合があります。
例えば、デプロイスロットを利用している場合は、BasicへのApp Service プラン変更は失敗します。

Automationアカウントを利用してスケジュール実行もできる

Automationアカウントを利用して、PowerShellをスケジュール実行させる事もできます。
仮想マシン起動の場合の例やスケジュール設定方法についてはこちらで紹介しています。

 

—広告—

最後に

Azure PowerShell を使用した、Azure App Service プランのサービスプランや価格レベルを変更方法を確認してみました。
Automationアカウントなどを利用して、スケジュール実行などもできるのでコスト削減に役立つのではないかと思います。

引き続き色々試してみたいと思います。

PowerShellの実行時間制限についてはこちらで紹介しています。

Logic AppsのワークフローからAutomationアカウントのRunbookを実行する方法についてはこちらで紹介しています。

スポンサーリンク