次の方法で共有


チュートリアル: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"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

Azure ストレージ アカウントの場所を eastus にハードコーディングしたが、別のリージョンにデプロイする必要があるとします。 テンプレートに柔軟性を追加し、別の場所に配置できるようにパラメーターを追加する必要があります。

関数を使用する

パラメーターのチュートリアルを完了している場合は、関数を使用しています。 "[parameters('storageName')]" を追加したときに、parameters 関数を使用しているのです。 ブラケットは、その内側の構文がテンプレート式であることを示します。 Resource Manager では、それらがリテラル値として扱われる代わりに、構文として解決されます。

関数を使うことでデプロイ中に動的に値が取得されるため、テンプレートの柔軟性が増します。 このチュートリアルでは、関数を使用して、リソース グループのデプロイ場所を取得します。

次の例では、location というパラメーターを追加するための変更箇所が強調表示されています。 このパラメーターの既定値によって、resourceGroup 関数が呼び出されます。 この関数は、デプロイされたリソース グループについての情報を含んだオブジェクトを返します。 そのオブジェクト プロパティの 1 つが location プロパティです。 既定値を使用すると、ストレージ アカウントとリソース グループは同じ場所に配置されます。 グループ内のリソースの場所は異なります。

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

{
  "$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
      }
    }
  ]
}

テンプレートのデプロイ

先行するチュートリアルでは、ストレージ アカウントを米国東部に作成しましたが、リソース グループは米国中部に作成されています。 このチュートリアルでは、リソース グループと同じリージョンにストレージ アカウントを作成します。 location には既定値を使用するので、そのパラメーター値を指定する必要はありません。 ストレージ アカウントの作成場所が変わることになるので、ストレージ アカウントに新しい名前を指定する必要があります。 たとえば、プレフィックスとして store1 の代わりに store2 を使用します。

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

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

Note

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

デプロイの確認

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

  1. Azure portal にサインインします。
  2. 左側のメニューから [リソース グループ] を選択します。
  3. myResourceGroup の左側にあるチェック ボックスをオンにし、myResourceGroup を選択します。
  4. 作成したリソース グループを選択します。 既定の名前は myResourceGroup です。
  5. デプロイされたストレージ アカウントとリソース グループの場所が同じであることに注意してください。

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

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

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

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

次のステップ

このチュートリアルでは、パラメーターの既定値を定義するための関数を使用しました。 このチュートリアル シリーズでは、関数を引き続き使用します。 シリーズの終わりまでに、テンプレートのすべてのセクションに関数を追加します。