演習 - Azure Resource Manager テンプレートにパラメーターと出力を追加する

完了

この演習では、デプロイ時に Azure ストレージ アカウント名を定義するパラメータを追加します。 次に、許可されるストレージ アカウント SKU を定義するパラメータを追加し、このデプロイにどれを使用するかを定義します。 また、デプロイ プロセスの後半で使用できる出力を追加して、Azure Resource Manager テンプレート (ARM テンプレート) の有用性を高めます。

ARM テンプレートのパラメーターを作成する

ここでは、実行時に設定できるパラメータを追加して、ARM テンプレートの柔軟性を高めます。 storageName 値のパラメーターを作成します。

  1. Visual Studio Code の azuredeploy.json ファイルで、parameters 属性の中かっこ内にカーソルを置きます。 これは "parameters":{}, のようになります。

  2. Enter を選択してから、「par」と入力します。 関連するスニペットの一覧が表示されます。 new-parameter を選択します。これは、テンプレートに汎用パラメータを追加します。 これは、次のように表示されます。

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. パラメータを parameter1 から storageName に変更し、型は文字列のままにします。 minLength3maxLength24 を追加します。 description 値 The name of the Azure storage resource を追加します。

  4. パラメーター ブロックは次のようになります。

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. namedisplayName の両方の値の resources ブロックで新しいパラメーターを使用します。 ファイル全体は次のようになります。

    {
      "$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,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS",
          }
        }
      ],
      "outputs": {}
    }
    
  6. ファイルを保存します。

パラメーター化された ARM テンプレートをデプロイする

ここでは、このデプロイの実行内容をより適切に反映するようにデプロイの名前を変更して、新しいパラメータの値を入力します。

ターミナルで、次の Azure CLI コマンドを入力します。 このスニペットは以前に使用したコードと同じですが、デプロイの名前が変更されています。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のユニットで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

ターミナルで、次の Azure PowerShell コマンドを実行します。 このスニペットは以前に使用したコードと同じですが、デプロイの名前が変更されています。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のユニットで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

デプロイをチェックする

  1. デプロイが完了したら、ブラウザーの Azure portal に戻ります。 リソース グループに移動して、3 件成功デプロイがあることを確認します。 このリンクを選択します。

    3 つすべてのデプロイが一覧に表示されていることに注意してください。

  2. 前に行ったように、addnameparameter デプロイを探索します。

使用可能な値を制限するために別のパラメーターを追加する

ここでは、パラメータを使用して、パラメータに使用できる値を制限します。

  1. storageName パラメーターの右中かっこの後にカーソルを置きます。 コンマを追加し、Enter を選択します。

  2. 再び、「par」と入力し、新しいパラメーターを選択します。

  3. 新しいジェネリック パラメーターを次のように変更します。

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    ここには、このパラメーターで許可されている値が一覧表示されます。 許可されていない値でテンプレートが実行された場合、デプロイは失敗します。

  4. このパラメーターにコメントを追加します。

    Screenshot of the azuredeploy.json file showing the comment This is the allowed values for an Azure storage account in the line preceding the storageSKU parameter.

    ARM テンプレートでは、///* */ のコメントがサポートされています。

  5. storageSKU パラメーターを使用するようにリソースを更新します。 Visual Studio Code の IntelliSense を利用して、このステップを簡単にします。

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    ファイル全体は次のようになります。

    {
      "$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,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]",
          }
        }
      ],
      "outputs": {}
    }
    
  6. ファイルを保存します。

ARM テンプレートをデプロイする

ここでは、許可リストに含まれている storageSKU パラメーターを使用して、正常にデプロイします。 次に、許可リストに含まれていない storageSKU パラメーターを使用して、テンプレートのデプロイを試みます。 2 番目のデプロイは、想定したとおり失敗します。

  1. テンプレートをデプロイするには、次のコマンドを実行します。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    このデプロイの完了を許可します。 このデプロイは、想定どおりに成功します。 許可される値により、テンプレートのユーザーは、リソースに対して機能しないパラメータ値を渡すことができなくなります。 無効な SKU を指定するとどうなるかを見てみましょう。

  2. 許可されていないパラメーターでテンプレートをデプロイするには、次のコマンドを実行します。 ここでは、storageSKU パラメーターを Basic に変更しました。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    このデプロイは失敗します。 エラーに注意してください。

    Screenshot of the Terminal window showing the deployment validation error.

  1. テンプレートをデプロイするには、次のコマンドを実行します。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    このデプロイの完了を許可します。 このデプロイは、想定どおりに成功します。 許可される値により、テンプレートのユーザーは、リソースに対して機能しないパラメータ値を渡すことができなくなります。 無効な SKU を指定するとどうなるかを見てみましょう。

  2. 許可されていないパラメーターでテンプレートをデプロイするには、次のコマンドを実行します。 ここでは、storageSKU パラメーターを Basic に変更しました。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    このデプロイは失敗します。 エラーに注意してください。

    Screenshot of the Terminal window showing the deployment validation error.

ARM テンプレートに出力を追加する

ここでは、ARM テンプレートの outputs セクションにストレージ アカウント リソースのエンドポイントの出力を追加します。

  1. Visual Studio Code の azuredeploy.json ファイルで、出力属性 "outputs":{}, の中かっこ内にカーソルを置きます。

  2. Enter キーを押して、「out」と入力します。関連するスニペットの一覧が表示されます。 [新しい出力] を選択します。 これにより、テンプレートに汎用的な出力が追加されます。 次のようになります。

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. "output1""storageEndpoint" に変更し、type の値を "object" に変更します。 value の値を "[reference(parameters('storageName')).primaryEndpoints]" に変更します。 この式は、前のユニットでエンドポイント データを取得する際に説明したものです。 型として object を指定したので、オブジェクトが JSON 形式で返されます。

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. ファイルを保存します。

出力を含む ARM テンプレートをデプロイする

ここでは、テンプレートをデプロイし、JSON として出力されたエンドポイントを確認します。 storageName パラメーターの一意の名前を入力する必要があります。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

  1. テンプレートをデプロイするには、次のコマンドを実行します。 {your-unique-name} を必ずご自分にとって一意の文字列に置き換えてください。

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    出力に注意してください。

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

  1. テンプレートをデプロイするには、次のコマンドを実行します。 {your-unique-name} を必ずご自分にとって一意の文字列に置き換えてください。

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    出力に注意してください。

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

出力のデプロイを確認する

Azure portal で、ご自分の addOutputs デプロイにアクセスします。 ここには出力もあります。

Screenshot of the Azure portal showing the output selection in the left menu.