Virtuální počítače v šabloně Resource Manageru

Platí pro: ✔️ Virtuální počítače s Windows

Tento článek popisuje aspekty šablony Azure Resource Manager, které platí pro virtuální počítače. Tento článek nepopisuje úplnou šablonu pro vytvoření virtuálního počítače. k tomu potřebujete definice prostředků pro účty úložiště, síťová rozhraní, veřejné IP adresy a virtuální sítě. Další informace o tom, jak lze tyto prostředky definovat společně, najdete v návodu k šabloně Resource Manager.

V galerii je mnoho šablon , které zahrnují prostředek virtuálního počítače. Tady nejsou popsané všechny prvky, které je možné zahrnout do šablony.

Tento příklad ukazuje typickou část prostředku šablony pro vytvoření zadaného počtu virtuálních počítačů:

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

Poznámka

Tento příklad využívá dříve vytvořený účet úložiště. Účet úložiště můžete vytvořit tak, že ho nasadíte ze šablony. Příklad také spoléhá na síťové rozhraní a jeho závislé prostředky, které by byly definovány v šabloně. Tyto prostředky se v příkladu nezobrazují.

Verze rozhraní API

Když nasazujete prostředky pomocí šablony, musíte zadat verzi rozhraní API, která se má použít. Příklad ukazuje prostředek virtuálního počítače pomocí tohoto elementu apiVersion:

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

Verze rozhraní API, kterou zadáte v šabloně, má vliv na to, které vlastnosti můžete v šabloně definovat. Obecně byste při vytváření šablon měli vybrat nejnovější verzi rozhraní API. U existujících šablon se můžete rozhodnout, jestli chcete i nadále používat starší verzi rozhraní API, nebo aktualizovat šablonu na nejnovější verzi, abyste mohli využívat nové funkce.

Využijte tyto příležitosti k získání nejnovějších verzí rozhraní API:

Parametry a proměnné

Parametry usnadňují zadávání hodnot šablony při jejím spuštění. Tato část parametrů se používá v příkladu:

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

Při nasazení ukázkové šablony zadáte hodnoty pro název a heslo účtu správce na každém virtuálním počítači a počet virtuálních počítačů, které se mají vytvořit. Máte možnost zadat hodnoty parametrů v samostatném souboru spravovaném pomocí šablony nebo zadat hodnoty po zobrazení výzvy.

Proměnné usnadňují nastavení hodnot v šabloně, které se v ní opakovaně používají nebo které se můžou v průběhu času měnit. Tento oddíl proměnných se používá v příkladu:

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

Při nasazení ukázkové šablony se hodnoty proměnných použijí pro název a identifikátor dříve vytvořeného účtu úložiště. Proměnné se také používají k poskytování nastavení pro diagnostické rozšíření. Při vytváření šablon Azure Resource Manager využijte osvědčené postupy, které vám pomůžou rozhodnout, jak chcete v šabloně strukturovat parametry a proměnné.

Smyčky prostředků

Pokud potřebujete pro svou aplikaci více než jeden virtuální počítač, můžete v šabloně použít element copy. Tento volitelný prvek provede smyčku vytvořením počtu virtuálních počítačů, které jste zadali jako parametr:

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

Všimněte si také, že v příkladu se při zadávání některých hodnot pro prostředek používá index smyčky. Pokud jste například zadali počet instancí tři, názvy disků operačního systému jsou myOSDisk1, myOSDisk2 a myOSDisk3:

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

Poznámka

V tomto příkladu se pro virtuální počítače používají spravované disky.

Mějte na paměti, že vytvoření smyčky pro jeden prostředek v šabloně může vyžadovat použití smyčky při vytváření nebo přístupu k jiným prostředkům. Například více virtuálních počítačů nemůže používat stejné síťové rozhraní, takže pokud se šablona smyčí vytvořením tří virtuálních počítačů, musí se také opakovat vytvořením tří síťových rozhraní. Při přiřazování síťového rozhraní k virtuálnímu počítači se k jeho identifikaci používá index smyčky:

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

Závislosti

Většina prostředků závisí na tom, aby ostatní prostředky správně fungovaly. Virtuální počítače musí být přidružené k virtuální síti a k tomu potřebují síťové rozhraní. Element dependsOn slouží k zajištění připravenosti síťového rozhraní k použití před vytvořením virtuálních počítačů:

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

Resource Manager nasadí paralelně všechny prostředky, které nejsou závislé na nasazování jiného prostředku. Při nastavování závislostí buďte opatrní, protože můžete neúmyslně zpomalit nasazení zadáním zbytečných závislostí. Závislosti můžou zřetězí více prostředků. Například síťové rozhraní závisí na veřejné IP adrese a prostředcích virtuální sítě.

Jak zjistíte, jestli se vyžaduje závislost? Podívejte se na hodnoty, které jste nastavili v šabloně. Pokud prvek v definici prostředku virtuálního počítače odkazuje na jiný prostředek nasazený ve stejné šabloně, potřebujete závislost. Například váš ukázkový virtuální počítač definuje profil sítě:

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

Chcete-li nastavit tuto vlastnost, musí existovat síťové rozhraní. Proto potřebujete závislost. Závislost je také potřeba nastavit, když je jeden prostředek (podřízený) definovaný v rámci jiného prostředku (nadřazeného). Například nastavení diagnostiky a rozšíření vlastních skriptů jsou definované jako podřízené prostředky virtuálního počítače. Nelze je vytvořit, dokud virtuální počítač neexistuje. Proto jsou oba prostředky označené jako závislé na virtuálním počítači.

Profily

Při definování prostředku virtuálního počítače se používá několik prvků profilu. Některé jsou povinné a některé volitelné. Například hardwareProfile, osProfile, storageProfile a networkProfile elementy jsou povinné, ale diagnosticsProfile je nepovinný. Tyto profily definují nastavení, jako jsou:

Disky a image

V Azure můžou soubory VHD představovat disky nebo image. Pokud se operační systém v souboru virtuálního pevného disku specializuje na konkrétní virtuální počítač, označuje se jako disk. Když se operační systém v souboru VHD zobecní, aby se použil k vytvoření mnoha virtuálních počítačů, označuje se jako image.

Vytvoření nových virtuálních počítačů a nových disků z image platformy

Při vytváření virtuálního počítače se musíte rozhodnout, jaký operační systém se má použít. Element imageReference slouží k definování operačního systému nového virtuálního počítače. Příklad ukazuje definici operačního systému Windows Server:

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

Pokud chcete vytvořit operační systém Linux, můžete použít tuto definici:

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

Poznámka

Odpovídajícím způsobem upravte publisherhodnoty , offersku aversion.

Nastavení konfigurace pro disk operačního systému jsou přiřazena elementu osDisk. Příklad definuje nový spravovaný disk s režimem ukládání do mezipaměti nastaveným na ReadWrite a že se disk vytváří z image platformy:

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

Vytvoření nových virtuálních počítačů z existujících spravovaných disků

Pokud chcete vytvořit virtuální počítače z existujících disků, odeberte elementy imageReference a osProfile a definujte tato nastavení disku:

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

Vytvoření nových virtuálních počítačů ze spravované image

Pokud chcete vytvořit virtuální počítač ze spravované image, změňte element imageReference a definujte tato nastavení disku:

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

Připojení datových disků

Volitelně můžete do virtuálních počítačů přidat datové disky. Počet disků závisí na velikosti disku operačního systému, který používáte. Velikost virtuálních počítačů je nastavená na Standard_DS1_v2 a maximální počet datových disků, které by se k nim daly přidat, jsou dva. V tomto příkladu se do každého virtuálního počítače přidává jeden spravovaný datový disk:

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

Rozšíření

I když jsou rozšíření samostatným prostředkem, jsou úzce svázaná s virtuálními počítači. Rozšíření je možné přidat jako podřízený prostředek virtuálního počítače nebo jako samostatný prostředek. Příklad ukazuje přidání rozšíření diagnostiky do virtuálních počítačů:

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

Tento prostředek rozšíření používá k zadání hodnot proměnnou storageName a diagnostické proměnné. Pokud chcete změnit data shromažďovaná tímto rozšířením, můžete do proměnné wadperfcounters přidat další čítače výkonu. Můžete také vložit diagnostická data do jiného účtu úložiště, než ve kterém jsou disky virtuálních počítačů uložené.

Existuje mnoho rozšíření, která můžete nainstalovat na virtuální počítač, ale nejužitečnější je pravděpodobně rozšíření vlastních skriptů. V tomto příkladu se skript PowerShellu s názvem start.ps1 spustí na každém virtuálním počítači při prvním spuštění:

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

Skript start.ps1 může provádět mnoho úloh konfigurace. Například datové disky přidané do virtuálních počítačů v příkladu nejsou inicializovány; k jejich inicializaci můžete použít vlastní skript. Pokud máte několik úloh při spuštění, můžete pomocí souboru start.ps1 volat další skripty PowerShellu ve službě Azure Storage. V příkladu se používá PowerShell, ale můžete použít libovolnou metodu skriptování, která je dostupná v operačním systému, který používáte.

Stav nainstalovaných rozšíření můžete zobrazit v nastavení rozšíření na portálu:

Získání stavu rozšíření

Informace o rozšíření můžete získat také pomocí příkazu PowerShellu Get-AzVMExtension , příkazu get Azure CLI rozšíření virtuálního počítače nebo rozhraní REST API Get extension information .

Nasazení

Když nasadíte šablonu, Azure sleduje prostředky, které jste nasadili jako skupinu, a automaticky přiřadí název této nasazené skupině. Název nasazení je stejný jako název šablony.

Pokud vás zajímá stav prostředků v nasazení, podívejte se na skupinu prostředků v Azure Portal:

Získání informací o nasazení

Není problém použít stejnou šablonu k vytváření prostředků nebo aktualizaci existujících prostředků. Když k nasazení šablon používáte příkazy, máte možnost říct, který režim chcete použít. Režim je možné nastavit na Dokončeno nebo Přírůstkové. Ve výchozím nastavení se provádí přírůstkové aktualizace. Při používání režimu Dokončení buďte opatrní, protože můžete prostředky omylem odstranit. Když nastavíte režim na Dokončeno, Resource Manager odstraní všechny prostředky ve skupině prostředků, které nejsou v šabloně.

Další kroky