Hantera flera Azure-distributioner med hjälp av taggar och parameterfiler för Azure Resource Manager-mallar

Slutförd

Det finns två funktioner i Arm-mallar (Azure Resource Manager) som du vill använda när du distribuerar till mer än en Azure-miljö. Dessa funktioner är resurstaggar och ARM-mallparameterfiler.

När du lägger till fler resurser i dina miljöer upptäcker du snabbt att du behöver ett sätt att identifiera syftet med dessa resurser. Resurser har ett tags:-attribut för det här ändamålet. När du distribuerar till fler miljöer behöver du ett effektivt sätt att hålla reda på indataparametrarna. ARM-mallar kan använda parameterfiler för att hantera parametrar för de olika distributionsmiljöerna.

Vad är en Azure-resurstagg?

Du kan tagga resurser om du vill lägga till värden som beskriver vad resurserna används för. Du kan till exempel lägga till taggar som visar miljön och projektet som en resurs tillhör. Eller så kan du lägga till taggar som identifierar ett kostnadsställe eller det team som äger en resurs. Lägg till valfria värden som passar din organisation.

Taggvärdet visas på översiktssidan för Azure-resursen och i kostnadsrapporter.

Hur gör jag för att skapa en Azure-resurstagg?

Varje resurs har ett tags:-attribut. Hittills har du använt det förvalda displayName för taggen för ditt lagringskonto.

"tags": {
          "displayName": "[parameters('storageName')]"
        },

Du kan göra attributet mer användbart genom att definiera en parameter som har mer information och sedan använda den parametern i tags:-attributet. Du kan till exempel skapa en parameter som ska lagra ett objekt med namnet resourceTags:

"resourceTags": {
    "type": "object",
    "defaultValue": {
        "Environment": "Dev",
        "Project": "Inventory"
        }
    }

Här har du skapat ett objekt för att lagra värden för ett miljönamn och ett projektnamn, men du kan definiera vad du vill.

Sedan kan du använda den parametern för alla resurser som är för Dev-miljön och inventeringsprojektet. till exempel ditt lagringskonto.

"resources": [{
        "name": "[variables('uniqueStorageName')]",
        "type": "Microsoft.Storage/storageAccounts",
        "apiVersion": "2019-06-01",
        "tags": "[parameters('resourceTags')]",
        ...
    }],

Vad är en ARM-mallparameterfil?

En ARM-mallparameterfil innehåller värden som skickas till ARM-mallen när mallen körs. Genom att använda en parameterfil för varje miljö som en ARM-mall distribueras till ser du till att rätt parametrar har angetts för den specifika miljön. Dessutom blir det enklare att spåra parametervärdenas historik och underhåll i källkoden.

Hur gör jag för att använda ARM-mallparameterfiler?

Parameterfiler för ARM-mallar är JSON-filer som innehåller parametervärden. För de parametrar som du har använt i ARM-mallen hittills kan du till exempel skapa en mallparameterfil på följande sätt:

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

Sedan kan du skapa en fil som liknar den här filen för varje miljö. Dessa filer kan till exempel anropas azuredeploy.parameters.dev.json och azuredeploy.parameters.prod.json och innehålla olika värden för parametrarna.

Om du vill distribuera en ARM-mall med hjälp av en parameterfil anger du sökvägen till parameterfilen i distributionskommandot. I Azure CLI använder --parameters {path to parameter file}du . I PowerShell använder -TemplateParameterFile {path to parameter file}du .

templateFile="{path-to-the-template-file}"
devParameterFile="{path-to-azuredeploy.parameters.dev.json}"
az group create \
  --name myResourceGroupDev \
  --location "East US"
az deployment group create \
  --name devenvironment \
  --resource-group myResourceGroupDev \
  --template-file $templateFile \
  --parameters $devParameterFile