Läs mer om mallar för VM-skalningsuppsättningar

Azure Resource Manager-mallar är ett bra sätt att distribuera grupper av relaterade resurser. Den här självstudieserien visar hur du skapar en grundläggande skalningsuppsättningsmall och hur du ändrar den här mallen så att den passar olika scenarier. Alla exempel kommer från den här GitHub-lagringsplatsen.

Den här mallen är avsedd att vara enkel. Mer fullständiga exempel på skalningsuppsättningsmallar finns i GitHub-lagringsplatsen azure-snabbstartsmallar och sök efter mappar som innehåller strängen vmss.

Om du redan är bekant med att skapa mallar kan du gå vidare till avsnittet Nästa steg för att se hur du ändrar den här mallen.

Definiera $schema och contentVersion

Definiera först $schema och contentVersion i mallen. Elementet $schema definierar versionen av mallspråket och används för Visual Studio-syntaxmarkering och liknande valideringsfunktioner. - contentVersion elementet används inte av Azure. I stället hjälper det dig att hålla reda på mallversionen.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.0",
}

Definiera parametrar

Definiera sedan två parametrar och adminUsernameadminPassword. Parametrar är värden som du anger vid tidpunkten för distributionen. Parametern adminUsername är helt enkelt en string typ, men eftersom adminPassword är en hemlighet ger du den typen securestring. Senare skickas dessa parametrar till skalningsuppsättningskonfigurationen.

  "parameters": {
    "adminUsername": {
      "type": "string"
    },
    "adminPassword": {
      "type": "securestring"
    }
  },

Definiera variabler

Resource Manager mallar kan du också definiera variabler som ska användas senare i mallen. I exemplet används inga variabler, så JSON-objektet är tomt.

  "variables": {},

Definiera resurser

Härnäst är avsnittet resurser i mallen. Här definierar du vad du faktiskt vill distribuera. Till skillnad från parameters och variables (som är JSON-objekt) resources är en JSON-lista med JSON-objekt.

  "resources": [
    ...
  ]

Alla resurser kräver typeegenskaperna , apiVersionname, och location . Det här exemplets första resurs har typen Microsoft.Network/virtualNetwork, name myVnetoch apiVersion 2018-11-01. (Information om hur du hittar den senaste API-versionen för en resurstyp finns i mallreferensen för Azure Resource Manager.)

{
  "type": "Microsoft.Network/virtualNetworks",
  "name": "myVnet",
  "apiVersion": "2018-11-01",
}

Ange plats

Om du vill ange platsen för det virtuella nätverket använder du en Resource Manager mallfunktion. Den här funktionen måste omges av citattecken och hakparenteser så här: "[<template-function>]". I det här fallet använder du resourceGroup funktionen . Det tar inga argument och returnerar ett JSON-objekt med metadata om resursgruppen som distributionen distribueras till. Resursgruppen anges av användaren vid tidpunkten för distributionen. Det här värdet indexeras sedan till det här JSON-objektet med .location för att hämta platsen från JSON-objektet.

  "location": "[resourceGroup().location]",

Ange egenskaper för virtuellt nätverk

Varje Resource Manager resurs har ett eget properties avsnitt för konfigurationer som är specifika för resursen. I det här fallet anger du att det virtuella nätverket ska ha ett undernät med hjälp av det privata IP-adressintervallet 10.0.0.0/16. En skalningsuppsättning finns alltid i ett undernät. Det kan inte sträcka sig över undernät.

  {
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      },
      "subnets": [
        {
          "name": "mySubnet",
          "properties": {
            "addressPrefix": "10.0.0.0/16"
          }
        }
      ]
    }
  },

Lägg till dependsOn-lista

Förutom de obligatoriska typeegenskaperna , name, apiVersionoch location kan varje resurs ha en valfri dependsOn lista med strängar. Den här listan anger vilka andra resurser från den här distributionen som måste slutföras innan den här resursen distribueras.

I det här fallet finns det bara ett element i listan, det virtuella nätverket från föregående exempel. Du anger det här beroendet eftersom skalningsuppsättningen måste ha nätverket innan du skapar några virtuella datorer. På så sätt kan skalningsuppsättningen ge dessa virtuella datorer privata IP-adresser från det IP-adressintervall som tidigare angavs i nätverksegenskaperna. Formatet för varje sträng i listan dependsOn är <type>/<name>. Använd samma type som tidigare name i resursdefinitionen för det virtuella nätverket.

  {
    "type": "Microsoft.Compute/virtualMachineScaleSets",
    "name": "myScaleSet",
    "apiVersion": "2019-03-01",
    "location": "[resourceGroup().location]",
    "dependsOn": [
      "Microsoft.Network/virtualNetworks/myVnet"
    ],
    ...
  }

Ange skalningsuppsättningsegenskaper

Skalningsuppsättningar har många egenskaper för att anpassa de virtuella datorerna i skalningsuppsättningen. En fullständig lista över dessa egenskaper finns i mallreferensen. I den här självstudien anges endast ett fåtal vanliga egenskaper.

Ange VM-storlek och kapacitet

Skalningsuppsättningen måste veta vilken storlek på den virtuella datorn som ska skapas ("sku-namn") och hur många sådana virtuella datorer som ska skapas ("sku-kapacitet"). Information om vilka VM-storlekar som är tillgängliga finns i dokumentationen om VM-storlekar.

  "sku": {
    "name": "Standard_A1",
    "capacity": 2
  },

Välj typ av uppdateringar

Skalningsuppsättningen måste också veta hur uppdateringar ska hanteras på skalningsuppsättningen. För närvarande finns det tre alternativ, Manual, Rolling och Automatic. Mer information om skillnaderna mellan de två finns i dokumentationen om hur du uppgraderar en skalningsuppsättning.

  "properties": {
    "upgradePolicy": {
      "mode": "Manual"
    },
  }

Välj operativsystem för virtuell dator

Skalningsuppsättningen måste veta vilket operativsystem som ska placeras på de virtuella datorerna. Här skapar du de virtuella datorerna med en fullständigt korrigerad Ubuntu 16.04-LTS-avbildning.

  "virtualMachineProfile": {
    "storageProfile": {
      "imageReference": {
        "publisher": "Canonical",
        "offer": "UbuntuServer",
        "sku": "16.04-LTS",
        "version": "latest"
      }
    },
  }

Ange computerNamePrefix

Skalningsuppsättningen distribuerar flera virtuella datorer. I stället för att ange varje namn på den virtuella datorn anger du computerNamePrefix. Skalningsuppsättningen lägger till ett index i prefixet för varje virtuell dator, så vm-namn har formatet <computerNamePrefix>_<auto-generated-index>.

I följande kodfragment använder du parametrarna från tidigare för att ange administratörens användarnamn och lösenord för alla virtuella datorer i skalningsuppsättningen. Den här processen använder parameters mallfunktionen. Den här funktionen tar in en sträng som anger vilken parameter som ska refereras till och matar ut värdet för den parametern.

 "osProfile": {
   "computerNamePrefix": "vm",
   "adminUsername": "[parameters('adminUsername')]",
   "adminPassword": "[parameters('adminPassword')]"
  },

Ange konfiguration av virtuellt datornätverk

Slutligen anger du nätverkskonfigurationen för de virtuella datorerna i skalningsuppsättningen. I det här fallet behöver du bara ange ID:t för det undernät som skapades tidigare. Detta talar om för skalningsuppsättningen att placera nätverksgränssnitten i det här undernätet.

Du kan hämta ID:t för det virtuella nätverket som innehåller undernätet med hjälp resourceId av mallfunktionen. Den här funktionen tar in typen och namnet på en resurs och returnerar den fullständigt kvalificerade identifieraren för den resursen. Det här ID:t har formuläret: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>

Identifieraren för det virtuella nätverket räcker dock inte. Ange det specifika undernät som skalningsuppsättningens virtuella datorer ska finnas i. Det gör du genom att sammanfoga /subnets/mySubnet till ID:t för det virtuella nätverket. Resultatet är det fullständigt kvalificerade ID:t för undernätet. Gör den här sammanlänkningen med concat funktionen som tar in en serie strängar och returnerar deras sammanfogning.

  "networkProfile": {
    "networkInterfaceConfigurations": [
      {
        "name": "myNic",
        "properties": {
          "primary": "true",
          "ipConfigurations": [
            {
              "name": "myIpConfig",
              "properties": {
                "subnet": {
                  "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
                }
              }
            }
          ]
        }
      }
    ]
  }

Nästa steg

Du kan distribuera föregående mall genom att följa Azure Resource Manager-dokumentationen.

Du kan starta den här självstudieserien från den grundläggande artikeln om skalningsuppsättningsmallar.

Du kan se hur du ändrar den grundläggande skalningsuppsättningsmallen för att distribuera skalningsuppsättningen till ett befintligt virtuellt nätverk.

Du kan se hur du ändrar den grundläggande skalningsuppsättningsmallen för att distribuera skalningsuppsättningen med en anpassad avbildning.

Du kan se hur du ändrar den grundläggande skalningsuppsättningsmallen för att distribuera en Linux-skalningsuppsättning med gästbaserad autoskalning.

Mer information om skalningsuppsättningar finns på översiktssidan för skalningsuppsättningar.