次の方法で共有


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

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

[前提条件]

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

Visual Studio Code と、Azure PowerShell または Azure Command-Line インターフェイス (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) を柔軟にデプロイできます。 次の例は、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}"

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

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

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

最後に、もう 1 つのテストを実行し、許可された値の 1 つではない SKU を渡すとどうなるかを確認しましょう。 この場合、テンプレート ユーザーが 基本 が 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. トップ メニューから [リソース グループの削除] を選択します。

次のステップ

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