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ép létrehozásához szükséges teljes sablont; ehhez erőforrásdefiní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. Az erőforrások közös definiálásáról a Resource Manager-sablon útmutatója nyújt további információt.

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

Ez a példa egy sablon egy tipikus erőforrásszakaszát mutatja be meghatározott 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"
          }
        }
      }
    ]
  }
]

Feljegyzés

Ez a példa egy korábban létrehozott tárfiókra támaszkodik. A tárfiókot a sablonból való üzembe helyezéssel hozhatja létre. A példa egy hálózati adapterre és a sablonban definiált függő erőforrásokra 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 az apiVersion elemet használó virtuálisgép-erőforrást mutatja be:

"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 kivá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óhoz, 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ének és jelszavának értékeit, valamint a létrehozandó virtuális gépek számát. Lehetőség van paraméterértékek megadására egy külön fájlban, amelyet a sablon kezel, vagy ha a rendszer kéri, adjon meg értékeket.

A változók megkönnyítik a sablonban azokat az értékeket, amelyeket 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 diagnosztikai bővítmény beállításainak megadásához változók 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ás-hurkok

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 hurkol:

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

A példában azt is megfigyelheti, hogy a ciklusindex 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 a myOSDisk1, a myOSDisk2 és a myOSDisk3:

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

Feljegyzés

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

Ne feledje, hogy a sablonban egy erőforrás ciklusának létrehozása szükségessé teheti a hurok használatát más erőforrások létrehozásakor vagy elérésekor. Például több virtuális gép nem tudja ugyanazt a hálózati adaptert használni, így ha a sablon három virtuális gép létrehozásával ciklusokat hoz létre, akkor három hálózati adapter létrehozásával is hurkolnia kell. 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 meggyőződhet 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())]"
],

A 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 véletlenül lelassíthatja az üzembe helyezést szükségtelen függőségek megadásával. A függőségek több erőforráson is végigvezethető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, ugyanabban a sablonban üzembe helyezett erőforrásra mutat, függőségre van szükség. A példa virtuális gép például egy hálózati profilt határoz meg:

"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. Függőséget is be kell állítania, 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ő. Szükség van például a hardverprofil, az osProfile, a storageProfile és a networkProfile elemekre, de a diagnosticsProfile nem kötelező. Ezek a profilok olyan beállításokat határoznak meg, mint például:

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 specializálódott, 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ához használható legyen, rendszerképnek nevezzük.

Ú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 melyik operációs rendszert használja. 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, a következő definíciót használhatja:

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

Feljegyzés

Módosítsa publishera , sku offerés version az értékeket ennek megfelelően.

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 rendszerké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ásnak számítanak, szorosan kötődnek 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 is hozzáadhatók. 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-lemezeket tárolják.

Számos bővítményt telepíthet egy virtuális gépre, de a leg hasznosabb 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 képes elvégezni. A példában szereplő virtuális gépekhez hozzáadott adatlemezek például 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 azure CLI-parancsával vagy a REST API bővítményinformációinak lekérésével 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 az Azure Portalon:

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

Nem probléma, ha ugyanazt a sablont használja erőforrások létrehozásához vagy meglévő erőforrások frissítéséhez. Amikor parancsokat használ a sablonok üzembe helyezéséhez, lehetősége van megmondani, 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örli az erőforrásokat. Ha befejezett módra állítja a módot, a Resource Manager törli az erőforráscsoport azon erőforrásait, amelyek nem szerepelnek a sablonban.

Következő lépések