Zelfstudie: Parameterbestanden gebruiken voor het implementeren van uw ARM-sjabloon

In deze zelfstudie leert u hoe u parameterbestanden kunt gebruiken om de waarden op te slaan die tijdens de implementatie worden doorgegeven. In de vorige zelfstudies hebt u inline parameters gebruikt bij de implementatieopdracht. Deze aanpak werkt voor het testen van uw ARM-sjabloon (Azure Resource Manager), maar voor het automatiseren van implementaties is het gemakkelijker om een set waarden voor uw omgeving door te geven. Met parameterbestanden kunt u gemakkelijker parameterwaarden voor een specifieke omgeving inpakken. In deze zelfstudie maakt u parameterbestanden voor ontwikkel- en productieomgevingen. Deze instructie duurt 12 minuten .

Vereisten

U wordt aangeraden om eerst de zelfstudie over tags te voltooien, maar dit is niet verplicht.

U moet Beschikken over Visual Studio Code met de extensie Resource Manager Tools en Azure PowerShell of Azure Command-Line Interface (CLI). Zie Hulpprogramma's voor sjablonen voor meer informatie.

Sjabloon controleren

De sjabloon bevat veel parameters die u tijdens de implementatie kunt opgeven. Aan het einde van de vorige zelfstudie had uw sjabloon het volgende JSON-bestand:

{
  "$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]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[parameters('appServicePlanName')]"
      ],
      "tags": "[parameters('resourceTags')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

Deze sjabloon werkt goed, maar nu wilt u de parameters die u aan de sjabloon doorgeeft, eenvoudig kunnen beheren.

Parameterbestanden toevoegen

Parameterbestanden zijn JSON-bestanden met een structuur die vergelijkbaar is met uw sjabloon. In het bestand geeft u de parameterwaarden op die u tijdens de implementatie wilt doorgeven.

In het parameterbestand geeft u waarden op voor de parameters in uw sjabloon. De naam van elke parameter in het parameterbestand moet overeenkomen met de naam van een parameter in uw sjabloon. De naam is niet hoofdlettergevoelig, maar om eenvoudig de overeenkomende waarden te zien, is het raadzaam om het hoofdlettergebruik van de sjabloon aan te houden.

U hoeft niet voor alle parameters een waarde op te geven. Als een ongespecificeerde parameter een standaardwaarde heeft, wordt die waarde gebruikt tijdens de implementatie. Als een parameter geen standaardwaarde heeft en er geen waarde is opgegeven in het parameterbestand, wordt u gevraagd een waarde op te geven tijdens de implementatie.

U kunt geen parameternaam in het parameterbestand opgeven die niet overeenkomt met een parameternaam in de sjabloon. U krijgt een foutmelding wanneer u onbekende parameters opgeeft.

Maak in Visual Studio Code een nieuw bestand met de volgende inhoud. Sla het bestand op met de naam azuredeploy.parameters.dev.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "devstore"
    },
    "storageSKU": {
      "value": "Standard_LRS"
    },
    "appServicePlanName": {
      "value": "devplan"
    },
    "webAppName": {
      "value": "devapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  }
}

Dit bestand is het parameterbestand voor de ontwikkelomgeving. U ziet dat Standard_LRS wordt gebruikt als opslagaccount, namen van resources worden voorzien van het voorvoegsel dev en de tag Environment wordt ingesteld op Dev.

Maak nogmaals een nieuw bestand, ditmaal met de volgende inhoud. Sla het bestand op met de naam azuredeploy.parameters.prod.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

Dit bestand is het parameterbestand voor de productieomgeving. Notice that it uses Standard_GRS for the storage account, names resources with a contoso prefix, and sets the Environment tag to Production. In een echte productieomgeving wilt u ook een app-service gebruiken met een andere SKU dan gratis, maar we gebruiken die SKU voor deze zelfstudie.

Sjabloon implementeren

Gebruik Azure CLI of Azure PowerShell om de sjabloon te implementeren.

Als laatste test van uw sjabloon maken we twee nieuwe resourcegroepen. Eén voor de ontwikkelomgeving en één voor de productieomgeving.

Vervang als variabelen voor de sjabloon en parameter {path-to-the-template-file}, {path-to-azuredeploy.parameters.dev.json}, {path-to-azuredeploy.parameters.prod.json} en de accolades {} door de bestandspaden voor de sjabloon en de parameter.

Eerst gaan we implementeren in de ontwikkelomgeving.

$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "East US"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Nu implementeren we in de productieomgeving.

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "West US"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Notitie

Als de implementatie mislukt, gebruikt u de verbose schakeloptie om informatie op te halen over de resources die u maakt. Gebruik de schakeloptie debug voor meer informatie over foutopsporing.

Implementatie verifiëren

U kunt de implementatie controleren door de resourcegroepen te bekijken vanuit de Azure-portal.

  1. Meld u aan bij de Azure-portal.
  2. Selecteer Resourcegroepen in het linkermenu.
  3. U ziet de twee nieuwe resourcegroepen die u in deze zelfstudie implementeert.
  4. Selecteer een van beide resourcegroepen en bekijk de geïmplementeerde resources. U ziet dat ze overeenkomen met de waarden die u hebt opgegeven in het parameterbestand voor die omgeving.

Resources opschonen

  1. Selecteer in het Azure Portal Resourcegroepen in het menu links.

  2. Schakel de naam van de hyperlink van de resourcegroep naast het selectievakje in. Als u deze reeks hebt voltooid, moet u drie resourcegroepen verwijderen: myResourceGroup, myResourceGroupDev en myResourceGroupProd.

  3. Selecteer het pictogram Resourcegroep verwijderen in het bovenste menu.

    Waarschuwing

    Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt.

  4. Typ de naam van de resourcegroep in het pop-upvenster dat wordt weergegeven en selecteer Verwijderen.

Volgende stappen

Gefeliciteerd. U hebt deze inleiding tot het implementeren van sjablonen in Azure voltooid. Laat het ons weten als u opmerkingen en suggesties hebt in de feedbacksectie.

De volgende serie zelfstudies gaat dieper in op het implementeren van sjablonen.