ARMテンプレートを使ってAzure App Service プランをデプロイ

 

App Service プランの作成をやってみました。Azure Portalで作成した後、ARMテンプレートでもやってみました。

App Service プラン自体は、App Service作成時にも作れますが、今回は勉強を兼ねて事前に作成してみました。

App Service プランは、App Service利用する為のリソース利用料になります。

https://azure.microsoft.com/ja-jp/pricing/details/app-service/plans/

App Serviceを作成時にリソースとして指定されるもので、機能やリソースによって価格が決まります。

https://azure.microsoft.com/ja-jp/pricing/details/app-service/windows/

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。ARMテンプレートを使った場合は、複数のコンテナーを一括でデプロイできるようにパラメータをCSVから読み込むようにしています。

      • App Service プランを定義するARMテンプレート(JSONファイル)
      • App Service プランのパラメータを指定するCSV
      • ARMテンプレートをデプロイするPower Shell

作成したものは GitHub上にも公開しております。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/AppServicePlan_Template_20200524

1 .Azure Portal上でApp Service プランを新規作成する

Azure Portalを利用して、App Service プランを作成します。

Azure Portal上のすべてのサービスでApp Service Planと入力すると、App Service プランのメニューが表示されれますのでこれを選択します。

App Service プランに移動しますので、+追加をクリックします。

一般的な使い方で指定するのは、以下の内容になるかと思います。実際に利用するリソースに合わせて設定します。

      • リソースグループ
      • 名前
      • オペレーティングシステム
      • 地域(ロケーション)
      • 価格レベル
      • タグ

まず、リソースグループ、名前、オペレーティングシステム、価格レベルを選択し、次へクリックします。オペレーティングシステムはApp Service利用時に選択するフレームワークにより選択します。.Net環境を利用するのであればWindows、PHPならばLinuxという感じです。現時点ではコンテナの場合はLinuxの方が選べるロケーションが多いようです。

次にタグの設定を必要に応じて実施します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。App Service プランが作成されます。

.App Service プランのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているサイトを参考にし、App ServiceプランのARMテンプレートを作成してみました。

https://docs.microsoft.com/ja-jp/azure/templates/microsoft.web/serverfarms

以下の点を修正しています。

      • skuやskucodeのデフォルト値はBasic前提にしてます。Isolatedも使わなかったので抜いてます。利用環境に合わせて適時修正下さい。
      • reservedとkindはパラメータで指定するようにしています。

結果、App ServiceプランのARMテンプレートはこういう形になりました。

{
    “$schema”: “http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “AppServicePlanName”: {
            “type”: “string”
        },
        “location”: {
            “defaultValue”: “[resourceGroup().location]”,
            “type”: “string”
        },
        “sku”: {
            “defaultValue”: “Basic”,
            “type”: “string”,
            “allowedValues”: [
                “Basic”,
                “Standard”,
                “PremiumV2”
                ]
        },
        “skucode”: {
            “defaultValue”: “B1”,
            “type”: “string”,
            “allowedValues”: [
                “B1″,”B2″,”B3”,
                “S1″,”S2″,”S3”,
                “P1v2″,”P2v2″,”P3v2”
                ]
        },
        “reserved”: {
            “defaultValue”: “true”,
            “type”: “bool”,
            “metadata”: {}
        },
        “kind”: {
            “type”: “string”,
            “allowedValues”: [
                “linux”,
                “app”
                ]
        }
     },
    “variables”: {},
    “resources”: [
        {
            “apiVersion”: “2018-11-01”,
            “type”: “Microsoft.Web/serverfarms”,
            “name”: “[parameters(‘AppServicePlanName’)]”,
            “location”: “[parameters(‘location’)]”,
            “kind”: “[parameters(‘kind’)]”,
            “tags”: {},
            “properties”: {
                “name”: “[parameters(‘AppServicePlanName’)]”,
                “reserved”: “[parameters(‘reserved’)]”
            },
            “sku”: {
                “Tier”: “[parameters(‘sku’)]”,
                “Name”: “[parameters(‘skuCode’)]”
            }
        }
    ]
}

3.App Serviceプランのパラメータ設定CSV作成する

App Serviceプランを作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。

      • リソースグループ(ResourceGroupName)
      • 名前(AppServicePlanName)
      • オペレーティングシステム(reserved,Kind)
      • 地域(location)
      • 価格レベル(sku,skucode)
      • タグ(今回は未指定)

オペレーティングシステムの組み合わせは下記の通りになります。Windowsの場合は指定がappになります。また同じリソースグループにWindowsとLinuxのデプロイはエラーになります。(現時点でのAzureでの仕様になります。)

      • Linuxの場合は、reservedをtrue、kindをlinuxに指定します。
      • Windowsの場合は、reservedをfalse、kindをappに指定します。

上記を踏まえてCSVをサンプルで作成以下のようになります。

RG1にLinux(B1)、RG2にWindows(S1)でデプロイする想定にしています。

ResourceGroupName,location,AppServicePlanName,sku,skucode,reserved,kind,
RG1,japaneast,app-service-plan-001,Basic,B1,true,linux,
RG2,japaneast,app-service-plan-002,Standard,S1,false,app,

4.App ServiceプランをARMテンプレート+Power Shellでデプロイする

ARMテンプレートのパス、CSVのパスを指定してデプロイを実施します。

reservedについては、bool形式である為StriingからBoolに変換ししています。

#AppServicePlan Template Deploy

#基本設定
#Name AppServicePlan名
#location リージョン名
#sku プラン名(Basic,Standard,PremiumV2)、
#skucode インスタンス名(B1等)
#kind (linux or Win)(Winの場合はappと指定する)

$TemplateFilePath = “ARMテンプレートのパス”
$ImportCSVPath = “CSVファイルのパス”

# Inclued Configure Entries
$csv = Import-Csv -path $ImportCSVPath 

# Template Deploy
foreach( $c in $csv ){

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.reserved)

New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -location $c.location `
  -AppServicePlanName $c.AppServicePlanName `
  -sku $c.sku `
  -skucode $c.skucode `
  -reserved $boolValue `
  -kind $c.kind
}
 

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にPortal上で確認すると設定通り出来ている事が確認できます。