Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: ✔️ Windows VM ✔️ Set Skala Seragam
Nota
Artikel berikut adalah untuk Uniform Virtual Machine Scale Sets. Sebaiknya gunakan Set Skala Komputer Virtual Fleksibel untuk beban kerja baru. Pelajari selengkapnya tentang mode orkestrasi baru ini dalam gambaran umum Set Skala Komputer Virtual Fleksibel kami.
Set Skala Komputer Virtual memungkinkan Anda menyebarkan dan mengelola sekumpulan komputer virtual penskalaan otomatis. Anda dapat menskalakan jumlah VM dalam set skala secara manual, atau menentukan aturan untuk skala otomatis berdasarkan penggunaan sumber daya seperti CPU, permintaan memori, atau lalu lintas jaringan. Penyeimbang beban Azure kemudian mendistribusikan lalu lintas ke instans VM pada set skala. Dalam panduan memulai cepat ini, Anda akan membuat Virtual Machine Scale Set dan menyebarkan aplikasi sampel menggunakan templat Azure Resource Manager (ARM template).
Templat Azure Resource Manager adalah file JavaScript Object Notation (JSON) yang menentukan infrastruktur dan konfigurasi untuk proyek Anda. Template tersebut menggunakan sintaksis deklaratif. Anda menggambarkan penyebaran yang diinginkan tanpa harus menulis urutan perintah pemrograman untuk membuat penyebaran tersebut.
Templat ARM memungkinkan Anda menyebarkan grup sumber daya terkait. Dalam satu templat, Anda dapat membuat Virtual Machine Scale Set, menginstal aplikasi, dan mengonfigurasi aturan skala otomatis. Dengan penggunaan variabel dan parameter, templat ini dapat digunakan kembali untuk memperbarui yang ada, atau membuat set skala tambahan. Anda dapat menyebarkan templat melalui portal Microsoft Azure, Azure CLI, Azure PowerShell, atau dari alur integrasi berkelanjutan/ pengiriman berkelanjutan (CI/CD).
Jika lingkungan Anda telah memenuhi prasyarat dan Anda terbiasa menggunakan templat ARM, pilih tombol Sebarkan ke Azure. Templat akan terbuka di portal Microsoft Azure.
Prasyarat
Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
Meninjau templat
Templat yang digunakan dalam panduan cepat ini dari templat Panduan Cepat Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.29.47.4906",
"templateHash": "11422221168065527308"
}
},
"parameters": {
"vmssName": {
"type": "string",
"minLength": 3,
"maxLength": 61,
"metadata": {
"description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended."
}
},
"vmSku": {
"type": "string",
"defaultValue": "Standard_D2s_v3",
"metadata": {
"description": "Size of VMs in the VM Scale Set."
}
},
"windowsOSVersion": {
"type": "string",
"defaultValue": "2022-datacenter-azure-edition",
"allowedValues": [
"2019-DataCenter-GenSecond",
"2016-DataCenter-GenSecond",
"2022-datacenter-azure-edition"
],
"metadata": {
"description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version. Allowed values: 2008-R2-SP1, 2012-Datacenter, 2012-R2-Datacenter & 2016-Datacenter, 2019-Datacenter."
}
},
"securityType": {
"type": "string",
"defaultValue": "TrustedLaunch",
"allowedValues": [
"Standard",
"TrustedLaunch"
],
"metadata": {
"description": "Security Type of the Virtual Machine."
}
},
"instanceCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 100,
"metadata": {
"description": "Number of VM instances (100 or less)."
}
},
"singlePlacementGroup": {
"type": "bool",
"defaultValue": true,
"metadata": {
"description": "When true this limits the scale set to a single placement group, of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to false. However, if singlePlacementGroup is false, it may not be modified to true."
}
},
"adminUsername": {
"type": "string",
"defaultValue": "vmssadmin",
"metadata": {
"description": "Admin username on all VMs."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Admin password on all VMs."
}
},
"_artifactsLocation": {
"type": "string",
"defaultValue": "[deployment().properties.templateLink.uri]",
"metadata": {
"description": "The base URI where artifacts required by this template are located. For example, if stored on a public GitHub repo, you'd use the following URI: https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-windows-webapp-dsc-autoscale/."
}
},
"_artifactsLocationSasToken": {
"type": "securestring",
"defaultValue": "",
"metadata": {
"description": "The sasToken required to access _artifactsLocation. If your artifacts are stored on a public repo or public storage account you can leave this blank."
}
},
"powershelldscZip": {
"type": "string",
"defaultValue": "DSC/InstallIIS.zip",
"metadata": {
"description": "Location of the PowerShell DSC zip file relative to the URI specified in the _artifactsLocation, i.e. DSC/IISInstall.ps1.zip"
}
},
"webDeployPackage": {
"type": "string",
"defaultValue": "WebDeploy/DefaultASPWebApp.v1.0.zip",
"metadata": {
"description": "Location of the of the WebDeploy package zip file relative to the URI specified in _artifactsLocation, i.e. WebDeploy/DefaultASPWebApp.v1.0.zip"
}
},
"powershelldscUpdateTagVersion": {
"type": "string",
"defaultValue": "1.0",
"metadata": {
"description": "Version number of the DSC deployment. Changing this value on subsequent deployments will trigger the extension to run."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"platformFaultDomainCount": {
"type": "int",
"defaultValue": 1,
"metadata": {
"description": "Fault Domain count for each placement group."
}
}
},
"variables": {
"vmScaleSetName": "[toLower(substring(format('vmssName{0}', uniqueString(resourceGroup().id)), 0, 9))]",
"longvmScaleSet": "[toLower(parameters('vmssName'))]",
"addressPrefix": "10.0.0.0/16",
"subnetPrefix": "10.0.0.0/24",
"vNetName": "[format('{0}vnet', variables('vmScaleSetName'))]",
"publicIPAddressName": "[format('{0}pip', variables('vmScaleSetName'))]",
"subnetName": "[format('{0}subnet', variables('vmScaleSetName'))]",
"loadBalancerName": "[format('{0}lb', variables('vmScaleSetName'))]",
"publicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]",
"lbProbeID": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('loadBalancerName'), 'tcpProbe')]",
"natPoolName": "[format('{0}natpool', variables('vmScaleSetName'))]",
"bePoolName": "[format('{0}bepool', variables('vmScaleSetName'))]",
"lbPoolID": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerName'), variables('bePoolName'))]",
"natStartPort": 50000,
"natEndPort": 50119,
"natBackendPort": 3389,
"nicName": "[format('{0}nic', variables('vmScaleSetName'))]",
"ipConfigName": "[format('{0}ipconfig', variables('vmScaleSetName'))]",
"frontEndIPConfigID": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('loadBalancerName'), 'loadBalancerFrontEnd')]",
"osType": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "[parameters('windowsOSVersion')]",
"version": "latest"
},
"securityProfileJson": {
"uefiSettings": {
"secureBootEnabled": true,
"vTpmEnabled": true
},
"securityType": "[parameters('securityType')]"
},
"imageReference": "[variables('osType')]",
"webDeployPackageFullPath": "[uri(parameters('_artifactsLocation'), format('{0}{1}', parameters('webDeployPackage'), parameters('_artifactsLocationSasToken')))]",
"powershelldscZipFullPath": "[uri(parameters('_artifactsLocation'), format('{0}{1}', parameters('powershelldscZip'), parameters('_artifactsLocationSasToken')))]"
},
"resources": [
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2023-04-01",
"name": "[variables('loadBalancerName')]",
"location": "[parameters('location')]",
"properties": {
"frontendIPConfigurations": [
{
"name": "LoadBalancerFrontEnd",
"properties": {
"publicIPAddress": {
"id": "[variables('publicIPAddressID')]"
}
}
}
],
"backendAddressPools": [
{
"name": "[variables('bePoolName')]"
}
],
"inboundNatPools": [
{
"name": "[variables('natPoolName')]",
"properties": {
"frontendIPConfiguration": {
"id": "[variables('frontEndIPConfigID')]"
},
"protocol": "Tcp",
"frontendPortRangeStart": "[variables('natStartPort')]",
"frontendPortRangeEnd": "[variables('natEndPort')]",
"backendPort": "[variables('natBackendPort')]"
}
}
],
"loadBalancingRules": [
{
"name": "LBRule",
"properties": {
"frontendIPConfiguration": {
"id": "[variables('frontEndIPConfigID')]"
},
"backendAddressPool": {
"id": "[variables('lbPoolID')]"
},
"protocol": "Tcp",
"frontendPort": 80,
"backendPort": 80,
"enableFloatingIP": false,
"idleTimeoutInMinutes": 5,
"probe": {
"id": "[variables('lbProbeID')]"
}
}
}
],
"probes": [
{
"name": "tcpProbe",
"properties": {
"protocol": "Tcp",
"port": 80,
"intervalInSeconds": 5,
"numberOfProbes": 2
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]"
]
},
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2023-09-01",
"name": "[variables('vmScaleSetName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('vmSku')]",
"tier": "Standard",
"capacity": "[parameters('instanceCount')]"
},
"properties": {
"overprovision": true,
"upgradePolicy": {
"mode": "Automatic"
},
"singlePlacementGroup": "[parameters('singlePlacementGroup')]",
"platformFaultDomainCount": "[parameters('platformFaultDomainCount')]",
"virtualMachineProfile": {
"storageProfile": {
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage"
},
"imageReference": "[variables('imageReference')]"
},
"osProfile": {
"computerNamePrefix": "[variables('vmScaleSetName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"securityProfile": "[if(equals(parameters('securityType'), 'TrustedLaunch'), variables('securityProfileJson'), null())]",
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "[variables('nicName')]",
"properties": {
"primary": true,
"ipConfigurations": [
{
"name": "[variables('ipConfigName')]",
"properties": {
"subnet": {
"id": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-04-01').subnets[0].id]"
},
"loadBalancerBackendAddressPools": [
{
"id": "[variables('lbPoolID')]"
}
]
}
}
]
}
}
]
},
"extensionProfile": {
"extensions": [
{
"name": "Microsoft.Powershell.DSC",
"properties": {
"publisher": "Microsoft.Powershell",
"type": "DSC",
"typeHandlerVersion": "2.9",
"autoUpgradeMinorVersion": true,
"forceUpdateTag": "[parameters('powershelldscUpdateTagVersion')]",
"settings": {
"configuration": {
"url": "[variables('powershelldscZipFullPath')]",
"script": "InstallIIS.ps1",
"function": "InstallIIS"
},
"configurationArguments": {
"nodeName": "localhost",
"WebDeployPackagePath": "[variables('webDeployPackageFullPath')]"
}
}
}
}
]
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2023-04-01",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "Static",
"dnsSettings": {
"domainNameLabel": "[variables('longvmScaleSet')]"
}
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2023-04-01",
"name": "[variables('vNetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('addressPrefix')]"
]
},
"subnets": [
{
"name": "[variables('subnetName')]",
"properties": {
"addressPrefix": "[variables('subnetPrefix')]"
}
}
]
}
},
{
"type": "Microsoft.Insights/autoscalesettings",
"apiVersion": "2022-10-01",
"name": "autoscalehost",
"location": "[parameters('location')]",
"properties": {
"name": "autoscalehost",
"targetResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]",
"enabled": true,
"profiles": [
{
"name": "Profile1",
"capacity": {
"minimum": "1",
"maximum": "10",
"default": "1"
},
"rules": [
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT5M",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": 50
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
},
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT5M",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": 30
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
]
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]"
]
}
],
"outputs": {
"applicationUrl": {
"type": "string",
"value": "[uri(format('http://{0}', reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName')), '2023-04-01').dnsSettings.fqdn), '/MyApp')]"
}
}
}
Sumber daya ini didefinisikan dalam templat ini:
- Microsoft.Network/virtualNetworks
- Microsoft.Network/publicIPAddresses
- Microsoft.Network/loadBalancers
- Microsoft.Compute/virtualMachineScaleSets
- Microsoft.Insights/autoscaleSettings
Definisikan set skala
Untuk membuat skala dengan templat, Anda menentukan sumber daya yang sesuai. Bagian inti dari jenis sumber daya Virtual Machine Scale Set adalah:
| Harta benda | Deskripsi properti | Contoh nilai templat |
|---|---|---|
| jenis | Jenis sumber daya Azure yang akan dibuat | Microsoft.Compute/virtualMachineScaleSets |
| Nama | Nama set skala | myScaleSet |
| lokasi | Lokasi untuk membuat himpunan skala | US Timur |
| sku.name | Ukuran VM untuk setiap instans set penskalaan | Standard_A1 |
| sku.capacity | Jumlah instans VM yang akan dibuat awalnya | 2 |
| upgradePolicy.mode | Mode peningkatan instans VM saat perubahan terjadi | Otomatis |
| imageReference | Platform atau gambar kustom yang akan digunakan untuk instans VM | Pusat Data Microsoft Windows Server 2016 |
| osProfile.computerNamePrefix | Awalan nama untuk setiap instans VM | myvmss |
| osProfile.namaPenggunaAdmin | Nama pengguna untuk setiap instans VM | azureuser |
| osProfile.adminPassword | Kata sandi untuk setiap instans VM | P@ssw0rd! |
Untuk menyesuaikan templat set skala, Anda dapat mengubah ukuran VM atau kapasitas awal. Opsi lain adalah menggunakan platform atau gambar kustom yang berbeda.
Menambahkan aplikasi sampel
Untuk menguji set skala Anda, instal aplikasi web dasar. Saat Anda menyebarkan set skala, ekstensi VM dapat menyediakan konfigurasi pasca-penyebaran dan tugas otomatisasi, seperti menginstal aplikasi. Skrip dapat diunduh dari penyimpanan Azure atau GitHub, atau disediakan ke portal Azure pada saat run-time ekstensi. Untuk menerapkan ekstensi ke set skala, Anda menambahkan bagian extensionProfile ke contoh sumber daya sebelumnya. Profil ekstensi biasanya mendefinisikan properti berikut:
- Jenis ekstensi
- Penerbit ekstensi
- Versi ekstensi
- Lokasi konfigurasi atau skrip penginstalan
- Perintah untuk dijalankan pada instans VM
Templat menggunakan ekstensi PowerShell DSC untuk menginstal aplikasi MVC ASP.NET yang berjalan di IIS.
Skrip penginstalan diunduh dari GitHub, seperti yang didefinisikan dalam url. Ekstensi kemudian menjalankan InstallIIS dari skrip IISInstall.ps1 , seperti yang didefinisikan dalam fungsi dan Skrip. Aplikasi ASP.NET itu sendiri disediakan sebagai paket Web Deploy, yang juga diunduh dari GitHub, seperti yang didefinisikan dalam WebDeployPackagePath:
Menyebarkan templat
Anda dapat menyebarkan templat dengan memilih tombol Sebarkan ke Azure . Tombol ini membuka portal Microsoft Azure, memuat templat lengkap, dan meminta beberapa parameter seperti nama set skala, jumlah instans, dan kredensial admin.
Anda juga dapat menyebarkan templat Resource Manager dengan menggunakan Azure PowerShell:
# Create a resource group
New-AzResourceGroup -Name myResourceGroup -Location EastUS
# Deploy template into resource group
New-AzResourceGroupDeployment `
-ResourceGroupName myResourceGroup `
-TemplateURI https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/demos/vmss-windows-webapp-dsc-autoscale/azuredeploy.json
# Update the scale set and apply the extension
Update-AzVmss `
-ResourceGroupName myResourceGroup `
-VmScaleSetName myVMSS `
-VirtualMachineScaleSet $vmssConfig
Jawab perintah untuk memberikan nama set skala dan kredensial admin untuk instans VM. Diperlukan waktu 10-15 menit agar set skala dibuat dan menerapkan ekstensi untuk mengonfigurasi aplikasi.
Validasikan penggelaran
Untuk melihat set skala Anda dalam tindakan, akses sampel aplikasi web di browser web. Dapatkan alamat IP publik load balancer Anda dengan Get-AzPublicIpAddress sebagai berikut:
Get-AzPublicIpAddress -ResourceGroupName myResourceGroup | Select IpAddress
Masukkan alamat IP publik load balancer ke browser web dalam format http://publicIpAddress/MyApp. Load balancer mendistribusikan lalu lintas ke salah satu instans VM Anda, seperti yang ditunjukkan dalam contoh berikut:
Membersihkan sumber daya
Jika tidak lagi diperlukan, Anda dapat menggunakan Remove-AzResourceGroup untuk menghapus grup sumber daya, set skala. Parameter -Force mengonfirmasi bahwa Anda ingin menghapus sumber daya tanpa perintah tambahan untuk melakukannya. Parameter -AsJob mengembalikan kontrol ke permintaan tanpa menunggu operasi selesai.
Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob
Langkah selanjutnya
Dalam panduan memulai cepat ini, Anda membuat kumpulan skala Windows dengan templat ARM dan menggunakan ekstensi PowerShell DSC untuk memasang aplikasi ASP.NET dasar pada instans VM. Untuk mempelajari lebih lanjut, lanjutkan ke tutorial tentang cara membuat dan mengelola Azure Virtual Machine Scale Sets.