次の方法で共有


チュートリアル:パラメーター ファイルを使用して 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 からリソース グループを探すことでデプロイを確認できます。

  1. Azure portal にサインインします。
  2. 左側のメニューから [リソース グループ] を選択します。
  3. このチュートリアルでデプロイした新しいリソース グループが 2 つ表示されます。
  4. どちらかのリソース グループを選択して、デプロイ済みのリソースを確認します。 その環境用のパラメーター ファイルに指定した値と一致していることがわかります。

リソースをクリーンアップする

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。

  2. チェック ボックスの横にある、ハイパーリンクの設定されたリソース グループ名を選択します。 このシリーズをすべて実施した場合、削除するリソース グループは myResourceGroupmyResourceGroupDevmyResourceGroupProd の 3 つです。

  3. トップ メニューから [リソース グループの削除] を選択します。

    注意事項

    リソース グループを削除すると、元に戻すことができません。

  4. 表示されるポップアップ ウィンドウにリソース グループ名を入力し、[削除] を選択します。

次のステップ

おめでとうございます。 Azure にテンプレートをデプロイするための基本的な方法は以上です。 ご意見やご提案がありましたら、フィードバック セクションからお寄せください。

次のチュートリアル シリーズでは、テンプレートのデプロイについてさらに詳しく取り上げます。