Sdílet prostřednictvím


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 Manageru, které platí pro virtuální počítače. Tento článek nepopisuje úplnou šablonu pro vytvoření virtuálního počítače; pro to 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 Manageru.

V galerii je mnoho šablon, které zahrnují prostředek virtuálního počítače. Ne všechny prvky, které mohou být zahrnuty do šablony, jsou zde popsány.

Tento příklad ukazuje typický oddíl prostředků š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 spoléhá na účet úložiště, který byl dříve vytvořen. Úč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

Při nasazování prostředků 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, které zadáte v šabloně, má vliv na vlastnosti, které můžete v šabloně definovat. Obecně platí, že při vytváření šablon byste měli vybrat nejnovější verzi rozhraní API. U existujících šablon se můžete rozhodnout, jestli chcete pokračovat v používání starší verze 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 pro šablonu při spuštění. Tento oddíl 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 šabloně používají opakovaně nebo 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 poskytnutí nastavení rozšíření diagnostiky. Při vytváření šablon Azure Resource Manageru využijte osvědčené postupy, které vám pomůžou rozhodnout, jak chcete strukturovat parametry a proměnné v šabloně.

Smyčky prostředků

Pokud pro aplikaci potřebujete více než jeden virtuální počítač, můžete v šabloně použít element kopírování. Tento volitelný prvek prochází 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é v příkladu, že index smyčky se používá při zadávání některých hodnot prostředku. Pokud jste například zadali počet instancí tří, názvy disků operačního systému jsou myOSDisk1, myOSDisk2 a myOSDisk3:

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

Poznámka:

Tento příklad používá spravované disky pro virtuální počítače.

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žít stejné síťové rozhraní, takže pokud vaše šablona prochází vytvořením tří virtuálních počítačů, musí také projít 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 index smyčky používá k jeho identifikaci:

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

Závislosti

Většina prostředků závisí na tom, aby ostatní prostředky fungovaly správně. Virtuální počítače musí být přidružené k virtuální síti a k tomu, aby bylo potřeba síťové rozhraní. Element dependsOn se používá k zajištění připravenosti síťového rozhraní 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 nasazení jiného prostředku. Při nastavování závislostí buďte opatrní, protože můžete neúmyslně zpomalit nasazení zadáním nepotřebných závislostí. Závislosti můžou řetězit prostřednictvím více prostředků. Síťové rozhraní například závisí na veřejné IP adrese a prostředcích virtuální sítě.

Jak poznáte, jestli se vyžaduje závislost? Podívejte se na hodnoty, které jste v šabloně nastavili. 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. Potřebujete také nastavit závislost, když je jeden prostředek (podřízený) definovaný v rámci jiného prostředku (nadřazený). Například nastavení diagnostiky a rozšíření vlastních skriptů jsou definovány jako podřízené prostředky virtuálního počítače. Nelze je vytvořit, dokud virtuální počítač neexistuje. Oba prostředky jsou proto 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é jsou volitelné. Například hardwareProfile, osProfile, storageProfile a networkProfile elementy jsou povinné, ale diagnosticsProfile je nepovinný. Tyto profily definují nastavení, například:

Disky a image

Soubory virtuálního pevného disku v Azure můžou představovat disky nebo image. Pokud je operační systém v souboru vhd specializovaný 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 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 a offersku version hodnoty.

Nastavení konfigurace disku operačního systému jsou přiřazena elementem 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 imageReference a elementy 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. S velikostí virtuálních počítačů nastavených na Standard_DS1_v2 je maximální počet datových disků, které by do nich bylo možné přidat, 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á proměnnou storageName a diagnostické proměnné k zadání hodnot. Pokud chcete změnit data shromážděná tímto rozšířením, můžete do proměnné wadperfcounters přidat další čítače výkonu. Můžete se také rozhodnout umístit diagnostická data do jiného účtu úložiště, než do kterého se ukládají disky virtuálních počítačů.

Na virtuální počítač můžete nainstalovat mnoho rozšíření, ale nejužitečnější je pravděpodobně rozšíření vlastních skriptů. V 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 dokáže provádět mnoho konfiguračních úloh. Například datové disky přidané do virtuálních počítačů v tomto příkladu nejsou inicializovány; K inicializaci můžete použít vlastní skript. Pokud máte k dispozici více úloh po spuštění, můžete pomocí souboru start.ps1 volat další skripty PowerShellu v úložišti Azure. Příklad používá PowerShell, ale můžete použít jakoukoli metodu skriptování, která je k dispozici 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 Get-AzVMExtension PowerShellu, rozšíření virtuálního počítače získat příkaz Azure CLI nebo rozhraní REST API pro získání informací o rozšíření.

Nasazení

Když nasadíte šablonu, Azure sleduje prostředky, které jste nasadili jako skupinu, a automaticky přiřadí název této nasazené skupiny. 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ů na webu Azure Portal:

Získání informací o nasazení

Není problém použít stejnou šablonu k vytvoření prostředků nebo aktualizaci existujících prostředků. Když k nasazení šablon použijete příkazy, máte možnost říct, jaký režim chcete použít. Režim lze nastavit buď na Dokončeno , nebo Přírůstkové. Výchozí hodnota je provádět přírůstkové aktualizace. Při použití režimu Dokončení buďte opatrní, protože můžete omylem odstranit prostředky. 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