Megosztás a következőn keresztül:


Virtuális számítógépek egy Azure Resource Manager-sablonban

A következőkre vonatkozik: ✔️ Windows rendszerű virtuális gépek

Ez a cikk egy Azure Resource Manager-sablon virtuális gépekre vonatkozó aspektusait ismerteti. Ez a cikk nem írja le a virtuális gépek létrehozásának teljes sablonját; ehhez erőforrás-definíciókra van szüksége a tárfiókokhoz, a hálózati adapterekhez, a nyilvános IP-címekhez és a virtuális hálózatokhoz. További információ arról, hogy ezek az erőforrások hogyan definiálhatók együtt, lásd a Resource Manager sablon útmutatóját.

A katalógusban számos sablon található, amelyek tartalmazzák a virtuálisgép-erőforrást. Itt nem minden olyan elemet ismertetünk, amely belefoglalható egy sablonba.

Ez a példa egy sablon egy tipikus erőforrásszakaszát mutatja be egy adott számú virtuális gép létrehozásához:

"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"
          }
        }
      }
    ]
  }
]

Megjegyzés

Ez a példa egy korábban létrehozott tárfiókra támaszkodik. A tárfiókot úgy hozhatja létre, hogy üzembe helyezi azt a sablonból. A példa egy hálózati adapterre és annak a sablonban definiált függő erőforrásaira is támaszkodik. Ezek az erőforrások nem jelennek meg a példában.

API-verzió

Amikor sablonnal telepít erőforrásokat, meg kell adnia a használni kívánt API-verziót. A példa a virtuálisgép-erőforrást mutatja be az apiVersion elem használatával:

"apiVersion": "2016-04-30-preview",

A sablonban megadott API-verzió hatással van a sablonban definiálható tulajdonságokra. A sablonok létrehozásakor általában a legújabb API-verziót kell választania. Meglévő sablonok esetén eldöntheti, hogy folytatja-e a korábbi API-verzió használatát, vagy frissíti a sablont a legújabb verzióra, hogy kihasználhassa az új funkciókat.

Használja az alábbi lehetőségeket a legújabb API-verziók beszerzéséhez:

Paraméterek és változók

A paraméterek megkönnyítik a sablon értékeinek megadását a futtatáskor. Ez a paraméterszakasz a példában használatos:

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

A példasablon üzembe helyezésekor minden virtuális gépen meg kell adnia a rendszergazdai fiók nevét és jelszavát, valamint a létrehozandó virtuális gépek számát. Lehetősége van paraméterértékek megadására egy külön fájlban, amelyet a sablon kezel, vagy amikor a rendszer kéri, megadhatja az értékeket.

A változók megkönnyítik a sablonban azokat az értékeket, amelyeket az egészben többször használnak, vagy amelyek idővel változhatnak. Ez a változók szakasz a példában használatos:

"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>"
},

A példasablon üzembe helyezésekor a rendszer változó értékeket használ a korábban létrehozott tárfiók nevére és azonosítójára. A változók a diagnosztikai bővítmény beállításainak megadására is használhatók. Az Azure Resource Manager-sablonok létrehozásához ajánlott eljárásokkal eldöntheti, hogyan szeretné strukturálni a sablon paramétereit és változóit.

Erőforráshurokok

Ha egynél több virtuális gépre van szüksége az alkalmazáshoz, használhat egy másolási elemet egy sablonban. Ez az opcionális elem a paraméterként megadott virtuális gépek számának létrehozásával hurkolható:

"copy": {
  "name": "virtualMachineLoop",
  "count": "[parameters('numberOfInstances')]"
},

A példában azt is megfigyelheti, hogy a hurokindex az erőforrás egyes értékeinek megadásakor használatos. Ha például három példányszámot adott meg, az operációsrendszer-lemezek neve myOSDisk1, myOSDisk2 és myOSDisk3:

"osDisk": {
  "name": "[concat('myOSDisk', copyindex())]",
  "caching": "ReadWrite",
  "createOption": "FromImage"
}

Megjegyzés

Ez a példa felügyelt lemezeket használ a virtuális gépekhez.

Ne feledje, hogy a sablonban egy erőforrás hurokjának létrehozásához szükség lehet a hurok használatára más erőforrások létrehozásakor vagy elérésekor. Több virtuális gép például nem használhatja ugyanazt a hálózati adaptert, így ha a sablon három virtuális gép létrehozásával hurkol, akkor három hálózati adapter létrehozásával is létre kell hoznia a hurkot. Amikor hálózati adaptert rendel egy virtuális géphez, a rendszer a hurokindexet használja annak azonosítására:

"networkInterfaces": [ {
  "id": "[resourceId('Microsoft.Network/networkInterfaces',
    concat('myNIC', copyindex()))]"
} ]

Függőségek

A legtöbb erőforrás más erőforrásoktól függ, hogy megfelelően működjön. A virtuális gépeket virtuális hálózathoz kell társítani, és ehhez hálózati adapterre van szükség. A dependsOn elem használatával győződjön meg arról, hogy a hálózati adapter készen áll a virtuális gépek létrehozása előtt való használatra:

"dependsOn": [
  "[concat('Microsoft.Network/networkInterfaces/', 'myNIC', copyindex())]"
],

Resource Manager párhuzamosan üzembe helyez minden olyan erőforrást, amely nem függ egy másik üzembe helyezett erőforrástól. Legyen óvatos a függőségek beállításakor, mert szükségtelen függőségek megadásával véletlenül lelassíthatja az üzembe helyezést. A függőségek több erőforráson keresztül is láncra kapcsolhatók. A hálózati adapter például a nyilvános IP-címtől és a virtuális hálózati erőforrásoktól függ.

Honnan tudja, hogy szükség van-e függőségre? Tekintse meg a sablonban beállított értékeket. Ha a virtuális gép erőforrásdefiníciójának egy eleme egy másik erőforrásra mutat, amely ugyanabban a sablonban van üzembe helyezve, függőségre van szüksége. A példaként használt virtuális gép például meghatároz egy hálózati profilt:

"networkProfile": {
  "networkInterfaces": [ {
    "id": "[resourceId('Microsoft.Network/networkInterfaces',
      concat('myNIC', copyindex())]"
  } ]
},

A tulajdonság beállításához a hálózati adapternek léteznie kell. Ezért függőségre van szüksége. Akkor is be kell állítania egy függőséget, ha egy erőforrás (gyermek) egy másik erőforrásban (szülőben) van definiálva. A diagnosztikai beállítások és az egyéni szkriptbővítmények például a virtuális gép gyermekerőforrásaiként vannak definiálva. Csak akkor hozhatók létre, ha a virtuális gép létezik. Ezért mindkét erőforrás a virtuális géptől függőként van megjelölve.

Profilok

A virtuálisgép-erőforrás definiálásakor több profilelem is használható. Néhány kötelező, néhány pedig nem kötelező. A hardverprofil, az osProfile, a storageProfile és a networkProfile elemekre például szükség van, de a diagnosticsProfile nem kötelező. Ezek a profilok a következő beállításokat határozzák meg:

Lemezek és képek

Az Azure-ban a vhd-fájlok lemezeket vagy lemezképeket jelölhetnek. Ha egy vhd-fájl operációs rendszere egy adott virtuális gépre van specializált, lemeznek nevezzük. Ha egy vhd-fájl operációs rendszere általánosítva van, hogy sok virtuális gép létrehozására szolgáljon, a rendszer lemezképnek nevezi.

Új virtuális gépek és új lemezek létrehozása platformrendszerképből

Virtuális gép létrehozásakor el kell döntenie, hogy milyen operációs rendszert szeretne használni. Az imageReference elem egy új virtuális gép operációs rendszerének meghatározására szolgál. A példa egy Windows Server operációs rendszer definícióját mutatja be:

"imageReference": {
  "publisher": "MicrosoftWindowsServer",
  "offer": "WindowsServer",
  "sku": "2012-R2-Datacenter",
  "version": "latest"
},

Ha Linux operációs rendszert szeretne létrehozni, használhatja ezt a definíciót:

"imageReference": {
  "publisher": "Canonical",
  "offer": "UbuntuServer",
  "sku": "20.04.2-LTS",
  "version": "latest"
},

Megjegyzés

Ennek megfelelően módosítsa publishera , offera sku és version az értékeket.

Az operációsrendszer-lemez konfigurációs beállításai az osDisk elemhez vannak rendelve. A példa egy új felügyelt lemezt határoz meg, amelynek gyorsítótárazási módja ReadWrite , és hogy a lemez egy platformrendszerképből jön létre:

"osDisk": {
  "name": "[concat('myOSDisk', copyindex())]",
  "caching": "ReadWrite",
  "createOption": "FromImage"
},

Új virtuális gépek létrehozása meglévő felügyelt lemezekről

Ha virtuális gépeket szeretne létrehozni meglévő lemezekről, távolítsa el az imageReference és az osProfile elemeket, és adja meg az alábbi lemezbeállításokat:

"osDisk": {
  "osType": "Windows",
  "managedDisk": {
    "id": "[resourceId('Microsoft.Compute/disks', [concat('myOSDisk', copyindex())])]"
  },
  "caching": "ReadWrite",
  "createOption": "Attach"
},

Új virtuális gépek létrehozása felügyelt rendszerképből

Ha egy felügyelt lemezképből szeretne virtuális gépet létrehozni, módosítsa az imageReference elemet, és adja meg az alábbi lemezbeállításokat:

"storageProfile": {
  "imageReference": {
    "id": "[resourceId('Microsoft.Compute/images', 'myImage')]"
  },
  "osDisk": {
    "name": "[concat('myOSDisk', copyindex())]",
    "osType": "Windows",
    "caching": "ReadWrite",
    "createOption": "FromImage"
  }
},

Adatlemezek csatolása

Igény szerint adatlemezeket is hozzáadhat a virtuális gépekhez. A lemezek száma a használt operációsrendszer-lemez méretétől függ. A virtuális gépek méretének Standard_DS1_v2 értékre van állítva, a hozzájuk adható adatlemezek maximális száma kettő. A példában minden virtuális géphez egy felügyelt adatlemez lesz hozzáadva:

"dataDisks": [
  {
    "name": "[concat('myDataDisk', copyindex())]",
    "diskSizeGB": "100",
    "lun": 0,
    "caching": "ReadWrite",
    "createOption": "Empty"
  }
],

Bővítmények

Bár a bővítmények külön erőforrást jelentenek, szorosan kapcsolódnak a virtuális gépekhez. A bővítmények a virtuális gép gyermekerőforrásaként vagy külön erőforrásként vehetők fel. A példa a virtuális gépekhez hozzáadott Diagnosztikai bővítményt mutatja be:

{
  "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"
    }
  }
},

Ez a bővítményerőforrás a storageName változót és a diagnosztikai változókat használja az értékek megadásához. Ha módosítani szeretné a bővítmény által gyűjtött adatokat, további teljesítményszámlálókat adhat hozzá a wadperfcounters változóhoz. Dönthet úgy is, hogy a diagnosztikai adatokat egy másik tárfiókba helyezi, mint ahol a virtuálisgép-lemezek vannak tárolva.

Számos bővítményt telepíthet egy virtuális gépre, de a leginkább hasznos lehet valószínűleg az egyéni szkriptbővítmény. A példában egy start.ps1 nevű PowerShell-szkript fut az egyes virtuális gépeken az első indításkor:

{
  "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"
    }
  }
}

A start.ps1 szkript számos konfigurációs feladatot el tud végezni. Például a példában a virtuális gépekhez hozzáadott adatlemezek nincsenek inicializálva; egyéni szkripttel inicializálhatja őket. Ha több indítási feladatot is el kell végeznie, a start.ps1 fájllal meghívhat más PowerShell-szkripteket az Azure Storage-ban. A példa a PowerShellt használja, de bármilyen szkriptelési módszert használhat, amely elérhető a használt operációs rendszeren.

A telepített bővítmények állapotát a portál Bővítmények beállításai között tekintheti meg:

Bővítmény állapotának lekérése

A bővítményinformációkat a Get-AzVMExtension PowerShell-paranccsal, a virtuálisgép-bővítmény get Azure CLI-parancsával vagy a Bővítményinformációk lekérése REST API-val is lekérheti.

Központi telepítés

Sablon üzembe helyezésekor az Azure nyomon követi a csoportként üzembe helyezett erőforrásokat, és automatikusan hozzárendel egy nevet ehhez az üzembe helyezett csoporthoz. Az üzembe helyezés neve megegyezik a sablon nevével.

Ha kíváncsi az üzemelő példány erőforrásainak állapotára, tekintse meg az erőforráscsoportot a Azure Portal:

Üzembehelyezési információk lekérése

Nem jelent problémát, ha ugyanazt a sablont használja erőforrások létrehozásához vagy meglévő erőforrások frissítéséhez. Amikor parancsokkal helyez üzembe sablonokat, meg tudja mondani, hogy melyik módot szeretné használni. A mód a Kész vagy a Növekményes értékre állítható be. Alapértelmezés szerint növekményes frissítéseket hajt végre. Legyen óvatos a Teljes mód használatakor, mert előfordulhat, hogy véletlenül töröl erőforrásokat. Ha a módot Befejezve értékre állítja, Resource Manager törli az erőforráscsoport azon erőforrásait, amelyek nem szerepelnek a sablonban.

Következő lépések