チュートリアル:パラメーター ファイルを使用して ARM テンプレートをデプロイする
このチュートリアルでは、デプロイ時に渡す値をパラメーター ファイルを使用して格納する方法について説明します。 先行する各チュートリアルでは、デプロイ コマンドでインライン パラメーターを使用しました。 このアプローチは、Azure Resource Manager テンプレート (ARM テンプレート) をテストする用途には役立ちますが、デプロイを自動化する場合には、ご利用の環境に使用する値をまとめて渡した方が簡単です。 パラメーター ファイルには、特定の環境に使用するパラメーターの値をまとめやすくする効果があります。 このチュートリアルでは、開発環境用と運用環境用のパラメーター ファイルを作成します。 このチュートリアルを完了するには 12 分かかります。
前提条件
必須ではありませんが、タグに関するチュートリアルを済ませておくことをお勧めします。
Visual Studio Code と Resource Manager ツールの拡張機能、そして Azure PowerShell または Azure CLI のいずれかを使用する必要があります。 詳細については、テンプレートのツールに関する記事を参照してください。
テンプレートを確認する
これまでのテンプレートには、デプロイ時に指定できるパラメーターが多数存在します。 前のチュートリアルで完成したテンプレートには、次の JSON ファイルが含まれていました。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"defaultValue": "exampleplan"
},
"webAppName": {
"type": "string",
"metadata": {
"description": "Base name of the resource such as web app name and app service plan "
},
"minLength": 2
},
"linuxFxVersion": {
"type": "string",
"defaultValue": "php|7.0",
"metadata": {
"description": "The Runtime stack of current web app"
}
},
"resourceTags": {
"type": "object",
"defaultValue": {
"Environment": "Dev",
"Project": "Tutorial"
}
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
"webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"tags": "[parameters('resourceTags')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
},
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2021-03-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"tags": "[parameters('resourceTags')]",
"sku": {
"name": "B1",
"tier": "Basic",
"size": "B1",
"family": "B",
"capacity": 1
},
"kind": "linux",
"properties": {
"perSiteScaling": false,
"reserved": true,
"targetWorkerCount": 0,
"targetWorkerSizeId": 0
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2021-03-01",
"name": "[variables('webAppPortalName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[parameters('appServicePlanName')]"
],
"tags": "[parameters('resourceTags')]",
"kind": "app",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"siteConfig": {
"linuxFxVersion": "[parameters('linuxFxVersion')]"
}
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
このテンプレートでも適切に機能しますが、テンプレートに渡すパラメーターはもっと管理しやすくしたいところです。
パラメーター ファイルを追加する
パラメーター ファイルは、テンプレートに似た構造の JSON ファイルです。 デプロイ時に渡したいパラメーターの値をこのファイルに指定します。
パラメーター ファイル内で、テンプレートのパラメーターの値を指定します。 パラメーター ファイル内の各パラメーターの名前は、テンプレート内のパラメーターの名前と一致している必要があります。 名前の大文字と小文字は区別されませんが、値が一致していることを簡単に確認するには、テンプレートとの間で大文字と小文字を一致させることをお勧めします。
すべてのパラメーターに値を指定する必要はありません。 未指定のパラメーターに既定値がある場合、その値がデプロイ時に使用されます。 パラメーターに既定値がなく、パラメーター ファイルにも値が指定されていない場合は、デプロイ時に値を指定するように求められます。
テンプレート内のパラメーター名と一致しないパラメーター名をパラメーター ファイルに指定することはできません。 不明なパラメーターを指定すると、エラーが発生します。
Visual Studio Code で、次の内容を含む新しいファイルを作成します。 このファイルに azuredeploy.parameters.dev.json という名前を付けて保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"value": "devstore"
},
"storageSKU": {
"value": "Standard_LRS"
},
"appServicePlanName": {
"value": "devplan"
},
"webAppName": {
"value": "devapp"
},
"resourceTags": {
"value": {
"Environment": "Dev",
"Project": "Tutorial"
}
}
}
}
このファイルは、開発環境用のパラメーター ファイルです。 ストレージ アカウントに Standard_LRS が使用され、リソースに dev で始まる名前が付き、さらに Environment
タグが Dev に設定されていることがわかります。
もう一度、次の内容を含んだ新しいファイルを作成します。 このファイルには azuredeploy.parameters.prod.json という名前を付けて保存します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"value": "contosodata"
},
"storageSKU": {
"value": "Standard_GRS"
},
"appServicePlanName": {
"value": "contosoplan"
},
"webAppName": {
"value": "contosowebapp"
},
"resourceTags": {
"value": {
"Environment": "Production",
"Project": "Tutorial"
}
}
}
}
このファイルは、運用環境用のパラメーター ファイルです。 ストレージ アカウントに Standard_GRS が使用され、リソースに contoso で始まる名前が付き、さらに Environment
タグが Production に設定されていることがわかります。 実際の運用環境では、無料以外の SKU の App Service を使用したい場合もあるかもしれませんが、このチュートリアルではこの SKU を使用します。
テンプレートのデプロイ
テンプレートをデプロイするには、Azure CLI または Azure PowerShell を使用します。
テンプレートの最終テストとして、新しいリソース グループを 2 つ作成しましょう。 1 つは開発環境用で、もう 1 つは運用環境用です。
テンプレート変数とパラメーター変数については、{path-to-the-template-file}
、{path-to-azuredeploy.parameters.dev.json}
、{path-to-azuredeploy.parameters.prod.json}
(中かっこ {}
を含む) を、実際のテンプレート ファイルとパラメーター ファイルのパスに置き換えてください。
まず開発環境にデプロイします。
$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
-Name myResourceGroupDev `
-Location "East US"
New-AzResourceGroupDeployment `
-Name devenvironment `
-ResourceGroupName myResourceGroupDev `
-TemplateFile $templateFile `
-TemplateParameterFile $parameterFile
次に、運用環境にデプロイします。
$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
-Name myResourceGroupProd `
-Location "West US"
New-AzResourceGroupDeployment `
-Name prodenvironment `
-ResourceGroupName myResourceGroupProd `
-TemplateFile $templateFile `
-TemplateParameterFile $parameterFile
Note
デプロイに失敗した場合は、verbose
スイッチを使用して、作成しているリソースに関する情報を取得します。 デバッグの詳細については、debug
スイッチを使用してください。
デプロイの確認
Azure portal からリソース グループを探すことでデプロイを確認できます。
- Azure portal にサインインします。
- 左側のメニューから [リソース グループ] を選択します。
- このチュートリアルでデプロイした新しいリソース グループが 2 つ表示されます。
- どちらかのリソース グループを選択して、デプロイ済みのリソースを確認します。 その環境用のパラメーター ファイルに指定した値と一致していることがわかります。
リソースをクリーンアップする
Azure portal で、左側のメニューから [リソース グループ] を選択します。
チェック ボックスの横にある、ハイパーリンクの設定されたリソース グループ名を選択します。 このシリーズをすべて実施した場合、削除するリソース グループは myResourceGroup、myResourceGroupDev、myResourceGroupProd の 3 つです。
トップ メニューから [リソース グループの削除] を選択します。
注意事項
リソース グループを削除すると、元に戻すことができません。
表示されるポップアップ ウィンドウにリソース グループ名を入力し、[削除] を選択します。
次のステップ
おめでとうございます。 Azure にテンプレートをデプロイするための基本的な方法は以上です。 ご意見やご提案がありましたら、フィードバック セクションからお寄せください。
次のチュートリアル シリーズでは、テンプレートのデプロイについてさらに詳しく取り上げます。