ARMテンプレートを使ってAzure App Service プランをデプロイ
Azure App Service プランの作成をやってみました。Azure Portalで作成した後、ARMテンプレートでもやってみました。
App Service プラン自体は、App Service作成時にも作れますが、今回は勉強を兼ねて事前に作成してみました。
App Service プランはApp Service利用する為のリソース利用料になります。
App Serviceを作成時にリソースとして指定されるもので、機能やリソースによって価格が決まります。
ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。ARMテンプレートを使った場合は、複数のコンテナーを一括でデプロイできるようにパラメータをCSVから読み込むようにしています。
-
-
- App Service プランを定義するARMテンプレート(JSONファイル)
- App Service プランのパラメータを指定するCSV
- ARMテンプレートをデプロイするPower Shell
-
作成したものはGitHubにも公開しております。
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’)]"
}
}
]
}
|
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, |
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上で確認すると設定通り出来ている事が確認できます。