Gör Azure Resource Manager-mallen mer flexibel med hjälp av parametrar och utdata

Slutförd

I den senaste lektionen skapade du en Arm-mall (Azure Resource Manager) och lade till ett Azure Storage-konto i den. Du kanske märker att det finns ett problem med mallen. Lagringskontonamnet är hårdkodat. Du kan bara använda den här mallen för att distribuera samma lagringskonto varje gång. Om du vill distribuera ett lagringskonto med ett annat namn måste du skapa en ny mall, vilket inte är ett praktiskt sätt att automatisera dina distributioner. Lagringskontots SKU är också hårdkodad, vilket innebär att du inte kan variera typen av lagringskonto för olika miljöer. Kom ihåg att varje distribution i vårt scenario kan ha en annan typ av lagringskonto. Du kan göra mallen mer användbar genom att lägga till en parameter för lagringskontots SKU.

I den här lektionen får du lära dig om parametrar och utdata i mallen.

ARM-mallparametrar

Med ARM-mallparametrar kan du anpassa distributionen genom att ange värden som är skräddarsydda för en viss miljö. Du kan till exempel skicka olika värden baserat på om du distribuerar till en miljö för utveckling, testning, produktion eller annat. I mallen ovan används till exempel SKU:n Standard_LRS för lagringskonto. Du kan återanvända den här mallen för andra distributioner som skapar ett lagringskonto genom att göra namnet på lagringskontots SKU till en parameter. Sedan skickar du in namnet på den SKU som du vill använda för denna distribution när mallen distribueras. Du kan göra detta antingen på kommandoraden eller med hjälp av en parameterfil.

I avsnittet parameters i mallen anger du vilka värden du kan ange när du distribuerar resurserna. Du kan ha högst 256 parametrar i en mall. Parameterdefinitioner kan använda de flesta mallfunktioner.

Tillgängliga egenskaper för en parameter är:

"parameters": {
  "<parameter-name>": {
    "type": "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [
      "<array-of-allowed-values>"
    ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

De tillåtna parametertyperna är:

  • sträng
  • secureString
  • heltal
  • boolean
  • objekt
  • secureObject
  • matris

Rekommendationer för att använda parametrar

Använd parametrar för inställningar som varierar beroende på miljö. till exempel SKU, storlek eller kapacitet. Använd även parametrar för resursnamn som du vill ange själv för enkel identifiering eller för att följa interna namngivningskonventioner. Ange en beskrivning för varje parameter och använda standardvärdena när det är möjligt.

Av säkerhetsskäl kan du aldrig hårdkoda eller ange standardvärden för användarnamn och/eller lösenord i mallar. Använd alltid parametrar för användarnamn och lösenord (eller hemligheter). Använd secureString för alla lösenord och hemligheter. Om du skickar känsliga data i ett JSON-objekt använder du typen secureObject . Mallparametrar av typen secureString eller secureObject kan inte läsas eller samlas in efter resursens distribution.

Använda parametrar i en ARM-mall

I avsnittet parametrar i ARM-mallen anger du de parametrar som du kan ange när du distribuerar resurserna. Du kan ha högst 256 parametrar i en mall.

Här är ett exempel på en mallfil med en parameter för lagringskontots SKU som definieras i mallens parameters avsnitt. Du kan ange ett standardvärde för parametern som ska användas om inget värde har angetts vid körning.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

Använd sedan parametern i resursdefinitionen. Syntax: [parameters('name of the parameter')]. När du sedan distribuerar använder parameters du funktionen. I nästa modul lär du dig mer om funktioner.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2023-05-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

När du distribuerar mallen kan du ange ett värde för parametern. Lägg märke till den sista raden i kommandot nedan:

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

ARM-mallutdata

I arm-mallens utdataavsnitt kan du ange de värden som returneras efter en lyckad distribution. Här följer de element som utgör utdata-avsnittet.

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Element Description
output-name Måste vara ett giltigt JavaScript-ID.
tillstånd (Valfritt) Ett booleskt värde som anger om det här utdatavärdet returneras. När värdet är true ingår värdet i distributionens utdata. Om värdet är false hoppas utdata över för den här distributionen. Om inget värde anges är standardvärdet true.
typ Typ av utdata-värde.
värde (Valfritt) Ett mallspråkuttryck som ska utvärderas och returneras som ett utdatavärde.
kopia (Valfritt) Kopiera används för att returnera fler än ett värde för utdata.

Använda utdata i en ARM-mall

Här är ett exempel på hur du matar ut lagringskontots slutpunkter:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

Lägg märke till reference-delen av uttrycket. Den här funktionen hämtar lagringskontots körningstillstånd.

Distribuera en ARM-mall igen

Kom ihåg att ARM-mallar är idempotenter, vilket innebär att du kan distribuera mallen till samma miljö igen, och om inget ändras i mallen ändras ingenting i miljön. Om en ändring görs i mallen (till exempel om du ändrar ett parametervärde) distribueras endast den ändringen. Din mall kan innehålla alla resurser du behöver för din Azure-lösning och du kan köra en mall igen på ett säkert sätt. Resurser skapas bara om de inte redan finns och uppdateras endast om det sker en ändring.