次の方法で共有


チュートリアル:ARM テンプレートに変数を追加する

このチュートリアルでは、Azure Resource Manager テンプレート (ARM テンプレート) に変数を追加する方法について説明します。 変数を使用すると、テンプレートが簡略化されます。 これにより、式を一度だけ記述すればテンプレート全体で再利用できます。 このチュートリアルの所要時間は 7 分です。

前提条件

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

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",
  "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"
      ]
    },
    "___location": {
      "type": "string",
      "defaultValue": "[resourceGroup().___location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "___location": "[parameters('___location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

ARM テンプレートの作成を簡単に続行するには、Azure ストレージ アカウント名が一意である必要があります。 このシリーズの先行するチュートリアルを終えている方は、一意の名前を考えることに煩わしさを感じるでしょう。 この問題を解決するには、ストレージ アカウントに一意の名前を作成する変数を追加します。

変数を使用する

以下の例で強調表示した部分は、一意のストレージ アカウント名を作成するための変数をテンプレートに追加するにあたって変更した箇所を示しています。 ファイル全体をコピーして、既存のテンプレートの内容を置き換えてください。

{
  "$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]"
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "___location": "[parameters('___location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

uniqueStorageName という名前の変数があることに注目してください。 この変数には、文字列値を作成するための関数が 4 つ使用されています。

parameters 関数については見覚えがあるかと思いますので、ここでは説明しません。

また、resourceGroup 関数もよくご存じでしょう。 このケースでは、___location プロパティ (前のチュートリアルを参照) の代わりに id プロパティを取得します。 id プロパティは、サブスクリプション ID とリソース グループ名を含む、リソース グループの完全な識別子を返します。

uniqueString は、13 文字のハッシュ値を作成する関数です。 渡すパラメーターによって、戻り値が決まります。 このチュートリアルでは、ハッシュ値の入力としてリソース グループ ID を使用します。 つまり、このテンプレートを異なるリソース グループにデプロイすれば、異なる一意の文字列値が得られることになります。 ただし、同じリソース グループにデプロイした場合には同じ値が得られます。

concat は、値を受け取ってそれらを結合する関数です。 この変数用に、パラメーターからの文字列と uniqueString 関数からの文字列を受け取り、それらを結合して 1 つの文字列にします。

storagePrefix パラメーターを使用すると、ストレージ アカウントを識別しやすくするためのプレフィックスを渡すことができます。 デプロイ後に、リソースの広範なリストからストレージ アカウントが識別しやすくなるような独自の名前付け規則を作成できます。

最後に、ストレージ アカウント名がパラメーターではなく変数に設定されている点に注目してください。

テンプレートのデプロイ

では、テンプレートをデプロイしましょう。 このテンプレートは、ストレージ アカウント名のプレフィックスを指定するだけで済むため、前のテンプレートよりもデプロイが容易です。

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

New-AzResourceGroupDeployment `
  -Name addnamevariable `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storagePrefix "store" `
  -storageSKU Standard_LRS

Note

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

デプロイの確認

Azure portal からリソース グループを探すことでデプロイを確認できます。

  1. Azure portal にサインインします。
  2. 左側のメニューから [リソース グループ] を選択します。
  3. リソース グループを選択します。
  4. デプロイされたストレージ アカウント名が store とランダムな文字の文字列になっていることに注目してください。

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

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

ここで終了する場合は、リソース グループを削除してかまいません。

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

次のステップ

このチュートリアルでは、一意のストレージ アカウント名を作成する変数を追加します。 次のチュートリアルでは、デプロイ済みのストレージ アカウントから値を返します。