ARMテンプレートを使ってAzure Web Apps(Linux)をデプロイしてみた

 

Linux のWeb Apps のデプロイをAzure PortalとAzure Resource Manager(ARM)テンプレートの2つパターンで実施してみました。

ARMテンプレート利用時には、以下の点に対応してみました。

      • 既存のApp Serviceプランを利用するか、新規に作成するかを選べるようにしてみました。
      • Power Shellを使ってデプロイする場合に、ARMテンプレートのパラメータをCSVから読み込むようにして再利用しやすいようにしています。

※ARMテンプレートをWindowsと共通にしたかったのですが、linuxFxVersionという項目があり無理でした。

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。

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

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

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

App Serviceプラン単体での作成は、前回実施していますのでこちらの記事も併せて参考にして頂ければと。

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

 

1 .Azure Portal上でLinuxのWeb Appsを新規作成する

Azure Portalを利用して、Linux のApp Service を作成します。

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

+追加をクリックします。

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

      • リソースグループ
      • 名前
      • 公開(Dockerコンテナを利用するか(今回はコードを選択))
      • ランタイムスタック(使用する開発言語(これを選ぶとオペレーティングシステムも自動選択されます)
      • オペレーティングシステム
      • 地域(ロケーション)
      • AppServiceプラン名
      • Application Insightsの利用可否(利用できる組み合わせには制限があり、LinuxとPHPの構成では利用不可です。)
      • タグ

リソースグループ、Web Apps名、公開(コンテナの利用等)、ランタイムスタック、地域(ロケーション)やApp Serviceプラン名を選択し、次へクリックします。オペレーティングシステムはWeb Apps利用時に選択されるランタイムスタックにより自動的に選択されます。

次に監視の設定を実施します。利用できる組み合わせには制限があり、LinuxとPHPの構成では利用不可な為、”いいえ”のままにします。

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

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

完了するとLinuxのWeb Apps が作成されます。

2 .LinuxのWeb AppsのAzure Resource Manager(ARM)テンプレート

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

https://github.com/Azure/azure-quickstart-templates/tree/master/101-webapp-basic-linux

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

      • Conditionを利用して既存のApp Serviceプランを利用するかどうかを選ぶようにしてみました。パラメータにnewOrExistingを追加しています。newを指定した場合は新規にApp Serviceプランが作成され、existingを指定すると既存のものを利用します。
      • App Serviceプラン部分は前回記事で作成のものを利用しています。

結果、Web AppsのARMテンプレートはこういう形になりました。Linux用のARMテンプレートなので、Kind(linux)やreserved(true)を固定値で設定する事も可能です。

{

  “$schema”: “https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#”,
  “contentVersion”: “1.0.0.0”,
  “parameters”: {
    “webAppName”: {
        “type”: “string”,
        “defaultValue” : “AzureLinuxApp”,
        “metadata”: {},
        “minLength”: 2
    },
    “appServicePlanName”:{
        “type”: “string”,
        “defaultValue” :”[concat(‘AppServicePlan-‘, parameters(‘webAppName’))]”,
        “metadata”: {}
    },
    “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”
                ]
     },
    “linuxFxVersion” : {
        “type”: “string”,
        “defaultValue” : “PHP|7.3”,
        “metadata”: {}
    },
    “location”: {
      “type”: “string”,
      “defaultValue”: “[resourceGroup().location]”,
      “metadata”: {
      }
    },
    “newOrExisting”: {
        “type”: “string”,
        “allowedValues”: [
            “new”,
            “existing”
            ]
    }
  },
  “variables”: {},
   “resources”: [
        {
    “condition”: “[equals(parameters(‘newOrExisting’), ‘new’)]”,
    “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’)]”
            }
        },
        {
      “type”: “Microsoft.Web/sites”,
      “apiVersion”: “2018-11-01”,
      “name”: “[parameters(‘webAppName’)]”,
      “location”: “[parameters(‘location’)]”,
      “kind”: “linux,app”,
      “dependsOn”: [
        “[resourceId(‘Microsoft.Web/serverfarms’, parameters(‘appServicePlanName’))]”
      ],
      “properties”: {
        “serverFarmId”: “[resourceId(‘Microsoft.Web/serverfarms’, parameters(‘appServicePlanName’))]”,
        “siteConfig”: {
            “linuxFxVersion”: “[parameters(‘linuxFxVersion’)]”
          }
      }
    }
  ]
}

3.LinuxのWeb Appsのパラメータ設定CSV作成する

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

      • リソースグループ(ResourceGroupName)
      • Web Apps名(webAppName)
      • App Serviceプラン名(AppServicePlanName)
      • オペレーティングシステム(reserved,Kind)
      • 地域(location)
      • App Serviceプランの価格レベル(sku,skucode)
      • ランタイムスタック(RuntimeStackVersion)
      • 新規作成か既存利用か(newOrExisting)

上記を踏まえてCSVをサンプルで作成以下のようになります。(RuntimeStackVersionで改行を入れてますので実施に利用時は抜いてください。)

#新規作成の場合
ResourceGroupName,location,webAppName,AppServicePlanName,sku,skucode,reserved,kind,
RuntimeStackVersion,newOrExisting

RG1,japaneast,wbapps-01,app-service-plan-001,Basic,B1,true,linux,PHP|7.3,new
 
#既存作成の場合(事前に作成した、app-service-plan-001を利用する場合)
ResourceGroupName,location,webAppName,AppServicePlanName,sku,skucode,reserved,kind,
RuntimeStackVersion,newOrExisting

RG1,japaneast,wbapps-01,app-service-plan-001,Basic,B1,true,linux,PHP|7.3,existing

4.LinuxのWeb AppsをARMテンプレート+Power Shellでデプロイする

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

ARMテンプレートをデプロイするPower Shellは下記のようになりました。

#Web Apps Template For Linux Deploy
#基本設定
#webAppName Web Apps名
#AppServicePlanName AppServicePlan名
#location リージョン名
#sku プラン名(Basic,Standard,PremiumV2)、
#skucode インスタンス名(B1等)
#kind (linux)
#linuxFxVersion(RuntimeStackVersion)(ランタイムスタック)
#newOrExisting(新規作成 Or 既存利用)

$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 `
  -webAppName $c.webAppName `
  -AppServicePlanName $c.AppServicePlanName `
  -location $c.location `
  -sku $c.sku `
  -skucode $c.skucode `
  -reserved $boolValue `
  -kind $c.kind `
  -linuxFxVersion $c.RuntimeStackVersion `
  -newOrExisting $c.newOrExisting `
}

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