Virtuella datorer i en Azure Resource Manager-mall
Gäller för: ✔️ Virtuella Windows-datorer
Den här artikeln beskriver aspekter av en Azure Resource Manager-mall som gäller för virtuella datorer. Den här artikeln beskriver inte en fullständig mall för att skapa en virtuell dator. för att du behöver resursdefinitioner för lagringskonton, nätverksgränssnitt, offentliga IP-adresser och virtuella nätverk. Mer information om hur dessa resurser kan definieras tillsammans finns i genomgången av Resource Manager-mallen.
Det finns många mallar i galleriet som innehåller den virtuella datorresursen. Alla element som kan ingå i en mall beskrivs inte här.
Det här exemplet visar ett typiskt resursavsnitt i en mall för att skapa ett angivet antal virtuella datorer:
"resources": [
{
"apiVersion": "2016-04-30-preview",
"type": "Microsoft.Compute/virtualMachines",
"name": "[concat('myVM', copyindex())]",
"location": "[resourceGroup().location]",
"copy": {
"name": "virtualMachineLoop",
"count": "[parameters('numberOfInstances')]"
},
"dependsOn": [
"[concat('Microsoft.Network/networkInterfaces/myNIC', copyindex())]"
],
"properties": {
"hardwareProfile": {
"vmSize": "Standard_DS1"
},
"osProfile": {
"computername": "[concat('myVM', copyindex())]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2012-R2-Datacenter",
"version": "latest"
},
"osDisk": {
"name": "[concat('myOSDisk', copyindex())]",
"caching": "ReadWrite",
"createOption": "FromImage"
},
"dataDisks": [
{
"name": "[concat('myDataDisk', copyindex())]",
"diskSizeGB": "100",
"lun": 0,
"createOption": "Empty"
}
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',
concat('myNIC', copyindex()))]"
}
]
},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": "true",
"storageUri": "[concat('https://', variables('storageName'), '.blob.core.windows.net')]"
}
}
},
"resources": [
{
"name": "Microsoft.Insights.VMDiagnosticsSettings",
"type": "extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2016-03-30",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/myVM', copyindex())]"
],
"properties": {
"publisher": "Microsoft.Azure.Diagnostics",
"type": "IaaSDiagnostics",
"typeHandlerVersion": "1.5",
"autoUpgradeMinorVersion": true,
"settings": {
"xmlCfg": "[base64(concat(variables('wadcfgxstart'),
variables('wadmetricsresourceid'),
concat('myVM', copyindex()),
variables('wadcfgxend')))]",
"storageAccount": "[variables('storageName')]"
},
"protectedSettings": {
"storageAccountName": "[variables('storageName')]",
"storageAccountKey": "[listkeys(variables('accountid'),
'2015-06-15').key1]",
"storageAccountEndPoint": "https://core.windows.net"
}
}
},
{
"name": "MyCustomScriptExtension",
"type": "extensions",
"apiVersion": "2016-03-30",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/myVM', copyindex())]"
],
"properties": {
"publisher": "Microsoft.Compute",
"type": "CustomScriptExtension",
"typeHandlerVersion": "1.7",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"[concat('https://', variables('storageName'),
'.blob.core.windows.net/customscripts/start.ps1')]"
],
"commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File start.ps1"
}
}
}
]
}
]
Kommentar
Det här exemplet förlitar sig på ett lagringskonto som skapades tidigare. Du kan skapa lagringskontot genom att distribuera det från mallen. Exemplet förlitar sig också på ett nätverksgränssnitt och dess beroende resurser som skulle definieras i mallen. Dessa resurser visas inte i exemplet.
API-version
När du distribuerar resurser med hjälp av en mall måste du ange en version av API:et som ska användas. Exemplet visar den virtuella datorresursen med hjälp av det här apiVersion-elementet:
"apiVersion": "2016-04-30-preview",
Den version av API:et som du anger i mallen påverkar vilka egenskaper du kan definiera i mallen. I allmänhet bör du välja den senaste API-versionen när du skapar mallar. För befintliga mallar kan du bestämma om du vill fortsätta använda en tidigare API-version eller uppdatera mallen för den senaste versionen för att dra nytta av nya funktioner.
Använd dessa möjligheter för att hämta de senaste API-versionerna:
- REST API – Visa en lista över alla resursprovidrar
- PowerShell – Get-AzResourceProvider
- Azure CLI – az provider show
Parametrar och variabler
Parametrar gör det enkelt för dig att ange värden för mallen när du kör den. Det här parameteravsnittet används i exemplet:
"parameters": {
"adminUsername": { "type": "string" },
"adminPassword": { "type": "securestring" },
"numberOfInstances": { "type": "int" }
},
När du distribuerar exempelmallen anger du värden för namnet och lösenordet för administratörskontot på varje virtuell dator och antalet virtuella datorer som ska skapas. Du kan välja att ange parametervärden i en separat fil som hanteras med mallen eller ange värden när du uppmanas att göra det.
Variabler gör det enkelt för dig att konfigurera värden i mallen som används upprepade gånger i den eller som kan ändras över tid. Det här avsnittet med variabler används i exemplet:
"variables": {
"storageName": "mystore1",
"accountid": "[concat('/subscriptions/', subscription().subscriptionId,
'/resourceGroups/', resourceGroup().name,
'/providers/','Microsoft.Storage/storageAccounts/', variables('storageName'))]",
"wadlogs": "<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB=\"4096\" xmlns=\"http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration\">
<DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter=\"Error\"/>
<WindowsEventLog scheduledTransferPeriod=\"PT1M\" >
<DataSource name=\"Application!*[System[(Level = 1 or Level = 2)]]\" />
<DataSource name=\"Security!*[System[(Level = 1 or Level = 2)]]\" />
<DataSource name=\"System!*[System[(Level = 1 or Level = 2)]]\" />
</WindowsEventLog>",
"wadperfcounters": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\">
<PerformanceCounterConfiguration counterSpecifier=\"\\Process(_Total)\\Thread Count\" sampleRate=\"PT15S\" unit=\"Count\">
<annotation displayName=\"Threads\" locale=\"en-us\"/>
</PerformanceCounterConfiguration>
</PerformanceCounters>",
"wadcfgxstart": "[concat(variables('wadlogs'), variables('wadperfcounters'),
'<Metrics resourceId=\"')]",
"wadmetricsresourceid": "[concat('/subscriptions/', subscription().subscriptionId,
'/resourceGroups/', resourceGroup().name ,
'/providers/', 'Microsoft.Compute/virtualMachines/')]",
"wadcfgxend": "\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/>
<MetricAggregation scheduledTransferPeriod=\"PT1M\"/>
</Metrics></DiagnosticMonitorConfiguration>
</WadCfg>"
},
När du distribuerar exempelmallen används variabelvärden för namnet och identifieraren för det tidigare skapade lagringskontot. Variabler används också för att ange inställningarna för diagnostiktillägget. Använd metodtipsen för att skapa Azure Resource Manager-mallar som hjälper dig att bestämma hur du vill strukturera parametrarna och variablerna i mallen.
Resursloopar
När du behöver mer än en virtuell dator för ditt program kan du använda ett kopieringselement i en mall. Det här valfria elementet loopar genom att skapa det antal virtuella datorer som du angav som en parameter:
"copy": {
"name": "virtualMachineLoop",
"count": "[parameters('numberOfInstances')]"
},
Observera också i exemplet att loopindexet används när du anger några av värdena för resursen. Om du till exempel har angett ett instansantal på tre är namnen på operativsystemdiskarna myOSDisk1, myOSDisk2 och myOSDisk3:
"osDisk": {
"name": "[concat('myOSDisk', copyindex())]",
"caching": "ReadWrite",
"createOption": "FromImage"
}
Kommentar
I det här exemplet används hanterade diskar för de virtuella datorerna.
Tänk på att om du skapar en loop för en resurs i mallen kan du behöva använda loopen när du skapar eller kommer åt andra resurser. Till exempel kan flera virtuella datorer inte använda samma nätverksgränssnitt, så om mallen loopar genom att skapa tre virtuella datorer måste den också loopa genom att skapa tre nätverksgränssnitt. När du tilldelar ett nätverksgränssnitt till en virtuell dator används loopindexet för att identifiera det:
"networkInterfaces": [ {
"id": "[resourceId('Microsoft.Network/networkInterfaces',
concat('myNIC', copyindex()))]"
} ]
Beroenden
De flesta resurser är beroende av andra resurser för att fungera korrekt. Virtuella datorer måste associeras med ett virtuellt nätverk och för att göra det måste de ha ett nätverksgränssnitt. DependsOn-elementet används för att se till att nätverksgränssnittet är redo att användas innan de virtuella datorerna skapas:
"dependsOn": [
"[concat('Microsoft.Network/networkInterfaces/', 'myNIC', copyindex())]"
],
Resource Manager distribuerar parallellt alla resurser som inte är beroende av att en annan resurs distribueras. Var försiktig när du ställer in beroenden eftersom du oavsiktligt kan sakta ned distributionen genom att ange onödiga beroenden. Beroenden kan länkas genom flera resurser. Nätverksgränssnittet beror till exempel på den offentliga IP-adressen och de virtuella nätverksresurserna.
Hur vet du om ett beroende krävs? Titta på de värden som du anger i mallen. Om ett element i resursdefinitionen för den virtuella datorn pekar på en annan resurs som distribueras i samma mall behöver du ett beroende. Den virtuella exempeldatorn definierar till exempel en nätverksprofil:
"networkProfile": {
"networkInterfaces": [ {
"id": "[resourceId('Microsoft.Network/networkInterfaces',
concat('myNIC', copyindex())]"
} ]
},
Om du vill ange den här egenskapen måste nätverksgränssnittet finnas. Därför behöver du ett beroende. Du måste också ange ett beroende när en resurs (en underordnad) definieras i en annan resurs (en överordnad). Diagnostikinställningarna och tilläggen för anpassade skript definieras till exempel båda som underordnade resurser för den virtuella datorn. De kan inte skapas förrän den virtuella datorn finns. Därför markeras båda resurserna som beroende av den virtuella datorn.
Profiler
Flera profilelement används när du definierar en virtuell datorresurs. Vissa krävs och vissa är valfria. Till exempel krävs elementen hardwareProfile, osProfile, storageProfile och networkProfile, men diagnosticsProfile är valfritt. Dessa profiler definierar inställningar som:
- storlek
- namn och autentiseringsuppgifter
- inställningar för diskar och operativsystem
- nätverksgränssnitt
- startdiagnostik
Diskar och avbildningar
I Azure kan vhd-filer representera diskar eller avbildningar. När operativsystemet i en vhd-fil är specialiserat på att vara en specifik virtuell dator kallas det för en disk. När operativsystemet i en vhd-fil generaliseras för att användas för att skapa många virtuella datorer kallas det för en avbildning.
Skapa nya virtuella datorer och nya diskar från en plattformsbild
När du skapar en virtuell dator måste du bestämma vilket operativsystem som ska användas. Elementet imageReference används för att definiera operativsystemet för en ny virtuell dator. Exemplet visar en definition för ett Windows Server-operativsystem:
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2012-R2-Datacenter",
"version": "latest"
},
Om du vill skapa ett Linux-operativsystem kan du använda den här definitionen:
"imageReference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "20.04.2-LTS",
"version": "latest"
},
Kommentar
Ändra publisher
, offer
sku
och version
värden i enlighet med detta.
Konfigurationsinställningar för operativsystemdisken tilldelas med osDisk-elementet. Exemplet definierar en ny hanterad disk med cachelagringsläget inställt på ReadWrite och att disken skapas från en plattformsbild:
"osDisk": {
"name": "[concat('myOSDisk', copyindex())]",
"caching": "ReadWrite",
"createOption": "FromImage"
},
Skapa nya virtuella datorer från befintliga hanterade diskar
Om du vill skapa virtuella datorer från befintliga diskar tar du bort imageReference- och osProfile-elementen och definierar dessa diskinställningar:
"osDisk": {
"osType": "Windows",
"managedDisk": {
"id": "[resourceId('Microsoft.Compute/disks', [concat('myOSDisk', copyindex())])]"
},
"caching": "ReadWrite",
"createOption": "Attach"
},
Skapa nya virtuella datorer från en hanterad avbildning
Om du vill skapa en virtuell dator från en hanterad avbildning ändrar du imageReference-elementet och definierar följande diskinställningar:
"storageProfile": {
"imageReference": {
"id": "[resourceId('Microsoft.Compute/images', 'myImage')]"
},
"osDisk": {
"name": "[concat('myOSDisk', copyindex())]",
"osType": "Windows",
"caching": "ReadWrite",
"createOption": "FromImage"
}
},
Koppla datadiskar
Du kan också lägga till datadiskar till de virtuella datorerna. Antalet diskar beror på storleken på den operativsystemdisk som du använder. Med storleken på de virtuella datorerna inställda på Standard_DS1_v2 är det maximala antalet datadiskar som kan läggas till i dem två. I exemplet läggs en hanterad datadisk till på varje virtuell dator:
"dataDisks": [
{
"name": "[concat('myDataDisk', copyindex())]",
"diskSizeGB": "100",
"lun": 0,
"caching": "ReadWrite",
"createOption": "Empty"
}
],
Tillägg
Även om tillägg är en separat resurs är de nära knutna till virtuella datorer. Tillägg kan läggas till som en underordnad resurs för den virtuella datorn eller som en separat resurs. Exemplet visar diagnostiktillägget som läggs till i de virtuella datorerna:
{
"name": "Microsoft.Insights.VMDiagnosticsSettings",
"type": "extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2016-03-30",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/myVM', copyindex())]"
],
"properties": {
"publisher": "Microsoft.Azure.Diagnostics",
"type": "IaaSDiagnostics",
"typeHandlerVersion": "1.5",
"autoUpgradeMinorVersion": true,
"settings": {
"xmlCfg": "[base64(concat(variables('wadcfgxstart'),
variables('wadmetricsresourceid'),
concat('myVM', copyindex()),
variables('wadcfgxend')))]",
"storageAccount": "[variables('storageName')]"
},
"protectedSettings": {
"storageAccountName": "[variables('storageName')]",
"storageAccountKey": "[listkeys(variables('accountid'),
'2015-06-15').key1]",
"storageAccountEndPoint": "https://core.windows.net"
}
}
},
Den här tilläggsresursen använder variabeln storageName och diagnostikvariablerna för att ange värden. Om du vill ändra de data som samlas in av det här tillägget kan du lägga till fler prestandaräknare i wadperfcounters-variabeln. Du kan också välja att placera diagnostikdata i ett annat lagringskonto än där de virtuella datordiskarna lagras.
Det finns många tillägg som du kan installera på en virtuell dator, men det mest användbara är förmodligen tillägget för anpassat skript. I exemplet körs ett PowerShell-skript med namnet start.ps1 på varje virtuell dator när det startas:
{
"name": "MyCustomScriptExtension",
"type": "extensions",
"apiVersion": "2016-03-30",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/myVM', copyindex())]"
],
"properties": {
"publisher": "Microsoft.Compute",
"type": "CustomScriptExtension",
"typeHandlerVersion": "1.7",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"[concat('https://', variables('storageName'),
'.blob.core.windows.net/customscripts/start.ps1')]"
],
"commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File start.ps1"
}
}
}
Start.ps1-skriptet kan utföra många konfigurationsuppgifter. Till exempel initieras inte de datadiskar som läggs till i de virtuella datorerna i exemplet. du kan använda ett anpassat skript för att initiera dem. Om du har flera startuppgifter att göra kan du använda filen start.ps1 för att anropa andra PowerShell-skript i Azure Storage. I exemplet används PowerShell, men du kan använda valfri skriptmetod som är tillgänglig i det operativsystem som du använder.
Du kan se statusen för de installerade tilläggen från tilläggsinställningarna i portalen:
Du kan också hämta tilläggsinformation med hjälp av Kommandot Get-AzVMExtension PowerShell, vm-tillägget hämta Azure CLI-kommandot eller REST API:et Hämta tilläggsinformation .
Distributioner
När du distribuerar en mall spårar Azure de resurser som du distribuerade som en grupp och tilldelar automatiskt ett namn till den distribuerade gruppen. Namnet på distributionen är samma som namnet på mallen.
Om du är nyfiken på status för resurser i distributionen kan du visa resursgruppen i Azure-portalen:
Det är inte ett problem att använda samma mall för att skapa resurser eller uppdatera befintliga resurser. När du använder kommandon för att distribuera mallar har du möjlighet att säga vilket läge du vill använda. Läget kan anges till Antingen Slutfört eller Inkrementellt. Standardvärdet är att göra inkrementella uppdateringar. Var försiktig när du använder läget Slutför eftersom du kan ta bort resurser av misstag. När du ställer in läget på Slutför tar Resource Manager bort alla resurser i resursgruppen som inte finns i mallen.
Nästa steg
- Skapa en egen mall med hjälp av Redigering av Azure Resource Manager-mallar.
- Distribuera mallen som du skapade med hjälp av Skapa en virtuell Windows-dator med en Resource Manager-mall.
- Lär dig hur du hanterar de virtuella datorer som du skapade genom att läsa Skapa och hantera virtuella Windows-datorer med Azure PowerShell-modulen.
- JSON-syntax och egenskaper för resurstyper i mallar finns i Mallreferens för Azure Resource Manager.