次の方法で共有


チュートリアル:ARM テンプレートにパラメーターを追加する

前のチュートリアルでは、Azure ストレージ アカウントをテンプレートに追加し、そのテンプレートをデプロイする方法について説明しました。 このチュートリアルでは、パラメーターを追加することによって Azure Resource Manager テンプレート (ARM テンプレート) を改良する方法について説明します。 このチュートリアルを完了するには 14 分かかります。

前提条件

必須ではありませんが、リソースに関するチュートリアルを済ませておくことをお勧めします。

Visual Studio Code をインストールし、Azure Resource Manager ツールの拡張機能、Azure PowerShell または Azure コマンド ライン インターフェイス (CLI) のいずれかを使用する必要があります。 詳細については、テンプレートのツールに関する記事を参照してください。

テンプレートを確認する

前のチュートリアルで完成したテンプレートには、次の JSON ファイルが含まれていました。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "{provide-unique-name}",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

お気付きかもしれませんが、このテンプレートには問題があります。 ストレージ アカウント名がハードコーディングされています。 このテンプレートは、同じストレージ アカウントを毎回デプロイする目的でしか使用できません。 別の名前でストレージ アカウントをデプロイするためには、新しいテンプレートを作成する必要があり、デプロイを自動化する方法としては明らかに実用的ではありません。

テンプレートを再利用可能にする

テンプレートを再利用可能にするために、ストレージ アカウント名を渡すために使用できるパラメーターを追加しましょう。 次の例で強調表示されている JSON ファイルは、テンプレートの変更箇所を示しています。 storageName パラメーターは、文字列として指定されています。 ストレージ アカウント名は、すべて小文字または数字で、24 文字の制限があります。

ファイル全体をコピーして、既存のテンプレートの内容を置き換えてください。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

テンプレートのデプロイ

では、テンプレートをデプロイしましょう。 次の例では、Azure CLI または PowerShell を使用してテンプレートをデプロイします。 デプロイ コマンドの値の 1 つとしてストレージ アカウント名を指定していることがわかります。 ストレージ アカウント名には、前のチュートリアルで使用したものと同じ名前を指定してください。

まだリソース グループを作成していない場合は、「リソース グループの作成」を参照してください。 この例では、templateFile 変数にテンプレート ファイルのパスが設定済みであることを想定しています (最初のチュートリアルを参照)。

New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

リソースの更新について

前に使用したのと同じ名前のストレージ アカウントをデプロイした後、再デプロイがリソースにどのように影響するか疑問に思うかもしれません。

リソースが既に存在していて、プロパティに変更がない場合は、それ以上の操作は必要ありません。 リソースが存在する場合は、プロパティが変更されると更新されます。 リソースが存在しなければ作成されます。

このように更新が処理されるため、テンプレートには、Azure ソリューションに必要なすべてのリソースを含めることができます。 テンプレートを安心して再デプロイすることができ、またリソースは必要なときにだけ変更または作成されるという確信が得られます。 たとえば、自分のストレージ アカウントにファイルを追加すると、ファイルを失うことなくそのストレージ アカウントを再デプロイできます。

環境ごとにカスタマイズする

パラメーターを使用すると、特定の環境に合わせた値を指定して、デプロイをカスタマイズできます。 たとえば、開発、テスト、または運用のどの環境にデプロイするに基づいて、異なる値を渡すことができます。

前のテンプレートでは、常に標準のローカル冗長ストレージ (LRS) Standard_LRS アカウントがデプロイされます。 環境に応じて異なる SKU (Stock Keeping Unit) をデプロイする柔軟性が必要になることもあるでしょう。 次の例は、SKU のパラメーターを追加するための変更点を示しています。 ファイル全体をコピーして、既存のテンプレートに貼り付けます。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

storageSKU パラメーターには既定値があります。 デプロイで指定されていない場合は、この値を使用します。 また、指定できる一連の値も存在します。 これらの値は、ストレージ アカウントの作成に必要な値と一致します。 テンプレート ユーザーが機能する SKU を渡すようにします。

テンプレートの再デプロイ

これで再デプロイする準備は整いました。 既定の SKU は Standard_LRS に設定されているため、パラメーター値は既に指定されています。

New-AzResourceGroupDeployment `
  -Name addskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

Note

デプロイに失敗した場合は、verbose スイッチを使用して、作成しているリソースに関する情報を取得します。 デバッグの詳細については、debug スイッチを使用してください。

テンプレートの柔軟性を確認するために、再度デプロイしてみましょう。 今回は、SKU パラメーターを標準の geo 冗長ストレージ (GRS) Standard_GRS に設定します。 新しい名前を渡して異なるストレージ アカウントを作成することも、同じ名前を使用して既存のストレージ アカウントを更新することもできます。 どちらの方法でもうまくいきます。

New-AzResourceGroupDeployment `
  -Name usenondefaultsku `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU Standard_GRS

最後にもう 1 つテストを実施します。指定できる値のいずれにも該当しない SKU を渡したらどうなるかを見てみましょう。 ここでは、basic が SKU の 1 つであるとテンプレート ユーザーが思い込んでいる状況を想定してテストします。

New-AzResourceGroupDeployment `
  -Name testskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU basic

コマンドはすぐに失敗し、許可された値を示すエラー メッセージが表示されます。 デプロイが開始される前に、ARM プロセッサによってエラーが検出されます。

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

次のチュートリアルに移動する場合は、リソース グループを削除する必要はありません。

ここで終了する場合は、リソース グループを削除して、デプロイ済みのリソースをクリーンアップすることをお勧めします。

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。
  2. [任意のフィールドのフィルター] テキスト フィールドにリソース グループ名を入力します。
  3. myResourceGroup の横にあるチェック ボックスをオンにし、[myResourceGroup] またはご自分のリソース グループ名を選びます。
  4. トップ メニューから [リソース グループの削除] を選択します。

次のステップ

パラメーターを追加して、1 つ目のチュートリアルで作成したテンプレートを改良しました。 次のチュートリアルでは、テンプレート関数について説明します。