パラメーター ファイルを使用して値を指定する

完了

前のユニットでは、デプロイの作成時にコマンドラインでパラメーター値を指定しました。 この方法は、Bicep ファイルを作成してテストする場合に適していますが、多数のパラメーターがある場合やデプロイを自動化する必要がある場合にはうまく機能しません。 このユニットでは、パラメーター値を指定するさまざまな方法について説明します。

注意

このユニットのコマンドは、概念を説明するために示されています。 コマンドはまだ実行しないでください。 ここで学習した内容をすぐに練習します。

パラメーター ファイルを作成する

"パラメーター ファイル" を使用すると、パラメーター値をまとめてセットとして簡単に指定できます。 パラメーター ファイル内で、Bicep ファイルのパラメーターの値を指定します。 パラメーター ファイルは、JavaScript Object Notation (JSON) 言語を使用して作成されます。 Bicep テンプレートをデプロイするときに、パラメーター ファイルを指定できます。 パラメーター ファイルは次のようになります。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    },
    "cosmosDBAccountLocations": {
      "value": [
        {
          "locationName": "australiaeast"
        },
        {
          "locationName": "southcentralus"
        },
        {
          "locationName": "westeurope"
        }
      ]
    }
  }
}

パラメーター ファイルの各部分をさらに詳しく見てみましょう。

  • $schema により、このファイルがパラメーターファイルであることが Azure Resource Manager に示されます。
  • contentVersion は、必要に応じてパラメーター ファイルの重要な変更を追跡するために使用できるプロパティです。 通常は、既定値の 1.0.0.0 に設定されます。
  • parameters セクションには、各パラメーターと使用する値が記載されています。 パラメーター値は、オブジェクトとして指定する必要があります。 オブジェクトには、使用する実際のパラメーター値を定義するという value プロパティがあります。

通常は、環境ごとにパラメーター ファイルを作成します。 パラメーター ファイルの名前には環境名を含めることをお勧めします。 たとえば、開発環境では main.parameters.dev.json という名前のパラメーター ファイルを、運用環境では main.parameters.production.json という名前のパラメーター ファイルを作成することができます。

Note

Bicep テンプレートに存在するパラメーター値のみを指定してください。 デプロイを作成する際に、Azure によってパラメーターがチェックされ、Bicep ファイルに含まれていないパラメーター値を指定しようとするとエラーになります。

デプロイ時にパラメーター ファイルを使用する

az deployment group create コマンドを使用して新しいデプロイを作成する場合は、--parameters 引数で使用するパラメーター ファイルの名前を指定できます。

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json

New-AzResourceGroupDeployment コマンドレットを使用して新しいデプロイを作成する場合は、-TemplateParameterFile 引数で使用するパラメーター ファイルの名前を指定できます。

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json

パラメーター値をオーバーライドする

ここまでで、パラメーター値を指定する 3 つの方法 (既定値、コマンドライン、パラメーター ファイル) について学習しました。 同じパラメーターでも、異なる値を指定するには、異なる方法を用いるのが一般的です。 この方法は、既定値を扱ったときに、既に確認しています。 パラメーターの既定値を作成した後、コマンドラインを使用して別の値を指定すると、コマンドラインの値が優先されます。 ここでは、パラメーター ファイルの優先順位がどのようになるのか説明します。

Diagram that shows the order of precedence for parameter values. Parameter files override default values, and command-line parameter values override parameter files.

パラメーター ファイルによって既定値がオーバーライドされ、コマンドラインのパラメーター値によってパラメーター ファイルがオーバーライドされることがわかります。

この方法がどのように機能するか見てみましょう。 次に示すのは、3 つのパラメーターを定義する Bicep ファイルの例です。それぞれに既定値が設定されています。

param location string = resourceGroup().location
param appServicePlanInstanceCount int = 1
param appServicePlanSku object = {
  name: 'F1'
  tier: 'Free'
}

2 つのパラメーターの値をオーバーライドし、location パラメーターの値を指定していないパラメーター ファイルを見てみましょう。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    }
  }
}

デプロイを作成するときに、appServicePlanInstanceCount の値もオーバーライドします。 パラメーター ファイルと同様に、--parameters 引数を使用しますが、オーバーライドする値を独自の値として追加します。

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json \
               appServicePlanInstanceCount=5

デプロイを作成するときに、パラメーター値の 1 つをオーバーライドします。 パラメーター名は、コマンドレットの引数であるかのように指定します。

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json `
  -appServicePlanInstanceCount 5

どのような値になるのか見てみましょう。

パラメーター 説明
location リソース グループの場所。 Bicep ファイルは、このパラメーターを既定値として指定しており、オーバーライドされません。
appServicePlanSku name プロパティが P1v3に、tier プロパティが PremiumV3 に設定されたオブジェクト。 Bicep ファイルの既定値は、パラメーター ファイルによってオーバーライドされます。
appServicePlanInstanceCount 5 デプロイ時に指定された値は、既定値とパラメーター ファイルの値よりも優先されます。

これらの方法を組み合わせてパラメーター値を指定することで、多くの場所でパラメーター値を重複して指定する必要がなくなりますが、必要な場所では柔軟にオーバーライドできるようになります。