Samouczek: wdrażanie globalnego modułu równoważenia obciążenia przy użyciu szablonów usługi Azure Resource Manager

Globalny moduł równoważenia obciążenia zapewnia, że usługa jest dostępna globalnie w wielu regionach świadczenia usługi Azure. Jeśli jeden region ulegnie awarii, ruch jest kierowany do najbliższego regionalnego modułu równoważenia obciążenia, który działa prawidłowo.

Użycie szablonu usługi ARM wymaga mniejszej liczby kroków w porównaniu z innymi metodami wdrażania.

Szablon usługi Azure Resource Manager to plik JavaScript Object Notation (JSON), który definiuje infrastrukturę i konfigurację projektu. Szablon używa składni deklaratywnej. Możesz opisać zamierzone wdrożenie bez konieczności pisania sekwencji poleceń programowania w celu utworzenia wdrożenia.

Jeśli środowisko spełnia wymagania i znasz szablony ARM, wybierz przycisk Wdróż na platformie Azure. Szablon zostanie otwarty w witrynie Azure Portal.

Przycisk wdrażania szablonu usługi Resource Manager na platformie Azure.

W tym poradniku nauczysz się, jak:

  • Wszystkie samouczki zawierają listę podsumowującą kroki do ukończenia
  • Każdy z tych punktów punktorowych jest wyrównany do klucza H2
  • Użyj tych zielonych pól wyboru w samouczku

Wymagania wstępne

Przegląd szablonu

W tej sekcji zapoznasz się z szablonem i parametrami używanymi do wdrażania globalnego modułu równoważenia obciążenia. Szablon używany w tym szybkim starcie pochodzi z Azure Quickstart Templates.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.26.54.24096",
      "templateHash": "15686909125702100557"
    }
  },
  "parameters": {
    "projectName": {
      "type": "string",
      "metadata": {
        "description": "Specifies a project name that is used for generating resource names."
      }
    },
    "locationCr": {
      "type": "string",
      "defaultValue": "eastus2",
      "allowedValues": [
        "eastus2",
        "westus",
        "centralus",
        "westeurope",
        "southeastasia",
        "centralus",
        "northeurope",
        "eastasia",
        "UKsouth",
        "USgovvirginia"
      ],
      "metadata": {
        "description": "Specifies the location for the cross-region load balancer.  Available in limited regions."
      }
    },
    "locationR1": {
      "type": "string",
      "defaultValue": "eastus",
      "allowedValues": [
        "eastus",
        "eastus2",
        "southcentralus",
        "westus2",
        "westus3",
        "australiaeast",
        "southeastasia",
        "northeurope",
        "swedencentral",
        "uksouth",
        "westeurope",
        "centralus",
        "southafricanorth",
        "centralindia",
        "eastasia",
        "japaneast",
        "koreacentral",
        "canadacentral",
        "francecentral",
        "germanywestcentral",
        "norwayeast",
        "switzerlandnorth",
        "uaenorth",
        "brazilsouth",
        "eastus2euap",
        "qatarcentral",
        "centralusstage",
        "eastus2stage",
        "northcentralusstage",
        "southcentralusstage",
        "westusstage",
        "westus2stage",
        "asia",
        "asiapacific",
        "australia",
        "brazil",
        "canada",
        "europe",
        "france",
        "germany",
        "global",
        "india",
        "japan",
        "korea",
        "norway",
        "singapore",
        "southafrica",
        "switzerland",
        "unitedstates",
        "eastasiastage",
        "eastusstg",
        "northcentralus",
        "westus",
        "jioindiawest",
        "centraluseuap",
        "westcentralus",
        "southafricawest",
        "australiacentral",
        "australiacentral2",
        "australiasoutheast",
        "japanwest",
        "jioindiacentral",
        "koreasouth",
        "southindia",
        "westindia",
        "francesouth",
        "germanynorth",
        "norwaywest",
        "switzerlandwest",
        "ukwest",
        "uaecentral",
        "brazilsoutheast"
      ],
      "metadata": {
        "description": "Specifies the location for the regional load balancer."
      }
    },
    "locationR2": {
      "type": "string",
      "defaultValue": "westus2",
      "allowedValues": [
        "eastus",
        "eastus2",
        "southcentralus",
        "westus2",
        "westus3",
        "australiaeast",
        "southeastasia",
        "northeurope",
        "swedencentral",
        "uksouth",
        "westeurope",
        "centralus",
        "southafricanorth",
        "centralindia",
        "eastasia",
        "japaneast",
        "koreacentral",
        "canadacentral",
        "francecentral",
        "germanywestcentral",
        "norwayeast",
        "switzerlandnorth",
        "uaenorth",
        "brazilsouth",
        "eastus2euap",
        "qatarcentral",
        "centralusstage",
        "eastus2stage",
        "northcentralusstage",
        "southcentralusstage",
        "westusstage",
        "westus2stage",
        "asia",
        "asiapacific",
        "australia",
        "brazil",
        "canada",
        "europe",
        "france",
        "germany",
        "global",
        "india",
        "japan",
        "korea",
        "norway",
        "singapore",
        "southafrica",
        "switzerland",
        "unitedstates",
        "eastasiastage",
        "eastusstg",
        "northcentralus",
        "westus",
        "jioindiawest",
        "centraluseuap",
        "westcentralus",
        "southafricawest",
        "australiacentral",
        "australiacentral2",
        "australiasoutheast",
        "japanwest",
        "jioindiacentral",
        "koreasouth",
        "southindia",
        "westindia",
        "francesouth",
        "germanynorth",
        "norwaywest",
        "switzerlandwest",
        "ukwest",
        "uaecentral",
        "brazilsoutheast"
      ],
      "metadata": {
        "description": "Specifies the location for the regional load balancer."
      }
    },
    "adminUsername": {
      "type": "string",
      "metadata": {
        "description": "Specifies the virtual machine administrator username."
      }
    },
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Specifies the virtual machine administrator password."
      }
    },
    "vmSize": {
      "type": "string",
      "defaultValue": "Standard_DS1_v2",
      "metadata": {
        "description": "Size of the virtual machine"
      }
    }
  },
  "variables": {
    "publicIPAddressType": "Static",
    "lbSkuName": "Standard",
    "vmStorageAccountType": "Premium_LRS",
    "lbR1Name": "[format('{0}-lb-r1', parameters('projectName'))]",
    "lbPIPR1Name": "[format('{0}-lbPublicIP-r1', parameters('projectName'))]",
    "lbFrontEndR1Name": "LoadBalancerFrontEnd-r1",
    "lbBackendPoolR1Name": "LoadBalancerBackEndPool-r1",
    "lbProbeR1Name": "loadBalancerHealthProbe-r1",
    "nsgR1Name": "[format('{0}-nsg-r1', parameters('projectName'))]",
    "vnetR1Name": "[format('{0}-vnet-r1', parameters('projectName'))]",
    "vnetAddressPrefixR1": "10.0.0.0/16",
    "vnetSubnetR1Name": "BackendSubnet-r1",
    "vnetSubnetAddressPrefixR1": "10.0.0.0/24",
    "bastionHostR1Name": "[format('{0}-bastion-r1', parameters('projectName'))]",
    "bastionSubnetR1Name": "AzureBastionSubnet",
    "vnetBastionSubnetAddressPrefixR1": "10.0.1.0/26",
    "bastionPIPR1Name": "[format('{0}-bastionPublicIP-r1', parameters('projectName'))]",
    "natGatewayR1Name": "[format('{0}-natgateway-r1', parameters('projectName'))]",
    "natGatewayPIR1Name": "[format('{0}-natPublicIP-r1', parameters('projectName'))]",
    "lbR2Name": "[format('{0}-lb-r2', parameters('projectName'))]",
    "lbPIPR2Name": "[format('{0}-lbPublicIP-r2', parameters('projectName'))]",
    "lbFrontEndR2Name": "LoadBalancerFrontEnd-r2",
    "lbBackendPoolR2Name": "LoadBalancerBackEndPool-r2",
    "lbProbeR2Name": "loadBalancerHealthProbe-r2",
    "nsgR2Name": "[format('{0}-nsg-r2', parameters('projectName'))]",
    "vnetR2Name": "[format('{0}-vnet-r2', parameters('projectName'))]",
    "vnetAddressPrefixR2": "10.1.0.0/16",
    "vnetSubnetR2Name": "BackendSubnet-r2",
    "vnetSubnetAddressPrefixR2": "10.1.0.0/24",
    "bastionHostR2Name": "[format('{0}-bastion-r2', parameters('projectName'))]",
    "bastionSubnetR2Name": "AzureBastionSubnet",
    "vnetBastionSubnetAddressPrefixR2": "10.1.1.0/26",
    "bastionPIPR2Name": "[format('{0}-bastionPublicIP-r2', parameters('projectName'))]",
    "natGatewayR2Name": "[format('{0}-natgateway-r2', parameters('projectName'))]",
    "natGatewayPIR2Name": "[format('{0}-natPublicIP-r2', parameters('projectName'))]",
    "lbCrName": "[format('{0}-lb-cr', parameters('projectName'))]",
    "lbBackendPoolCrName": "LoadBalancerBackEndPool-cr",
    "lbPIPCrName": "[format('{0}-lbPublicIP-cr', parameters('projectName'))]",
    "lbFrontEndCrName": "LoadBalancerFrontEnd-cr"
  },
  "resources": [
    {
      "copy": {
        "name": "nicVmR1",
        "count": "[length(range(0, 3))]"
      },
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2023-02-01",
      "name": "[format('vm-r1-{0}-networkInterface', add(range(0, 3)[copyIndex()], 1))]",
      "location": "[parameters('locationR1')]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR1Name'), variables('vnetSubnetR1Name'))]"
              },
              "loadBalancerBackendAddressPools": [
                {
                  "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbR1Name'), variables('lbBackendPoolR1Name'))]"
                }
              ]
            }
          }
        ],
        "networkSecurityGroup": {
          "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgR1Name'))]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/loadBalancers', variables('lbR1Name'))]",
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgR1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR1Name'), variables('vnetSubnetR1Name'))]"
      ]
    },
    {
      "copy": {
        "name": "installWebServerVmR1",
        "count": "[length(range(0, 3))]"
      },
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2023-03-01",
      "name": "[format('vm-r1-{0}/InstallWebServer', add(range(0, 3)[copyIndex()], 1))]",
      "location": "[parameters('locationR1')]",
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.7",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "commandToExecute": "powershell.exe Install-WindowsFeature -name Web-Server -IncludeManagementTools && powershell.exe remove-item 'C:\\inetpub\\wwwroot\\iisstart.htm' && powershell.exe Add-Content -Path 'C:\\inetpub\\wwwroot\\iisstart.htm' -Value $('Hello World from ' + $env:computername)"
        }
      },
      "dependsOn": [
        "vmR2"
      ]
    },
    {
      "copy": {
        "name": "vmR1",
        "count": "[length(range(0, 3))]"
      },
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2023-03-01",
      "name": "[format('vm-r1-{0}', add(range(0, 3)[copyIndex()], 1))]",
      "location": "[parameters('locationR1')]",
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "MicrosoftWindowsServer",
            "offer": "WindowsServer",
            "sku": "2019-Datacenter",
            "version": "latest"
          },
          "osDisk": {
            "createOption": "fromImage",
            "managedDisk": {
              "storageAccountType": "[variables('vmStorageAccountType')]"
            }
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', format('vm-r1-{0}-networkInterface', add(range(0, 3)[copyIndex()], 1)))]"
            }
          ]
        },
        "osProfile": {
          "computerName": "[format('vm-r1-{0}', add(range(0, 3)[copyIndex()], 1))]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]",
          "windowsConfiguration": {
            "enableAutomaticUpdates": true,
            "provisionVMAgent": true
          }
        }
      },
      "dependsOn": [
        "nicVmR2"
      ]
    },
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2023-02-01",
      "name": "[format('{0}/{1}', variables('vnetR1Name'), variables('bastionSubnetR1Name'))]",
      "properties": {
        "addressPrefix": "[variables('vnetBastionSubnetAddressPrefixR1')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR1Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2023-02-01",
      "name": "[format('{0}/{1}', variables('vnetR1Name'), variables('vnetSubnetR1Name'))]",
      "properties": {
        "addressPrefix": "[variables('vnetSubnetAddressPrefixR1')]",
        "natGateway": {
          "id": "[resourceId('Microsoft.Network/natGateways', variables('natGatewayR1Name'))]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/natGateways', variables('natGatewayR1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR1Name'), variables('bastionSubnetR1Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/bastionHosts",
      "apiVersion": "2023-02-01",
      "name": "[variables('bastionHostR1Name')]",
      "location": "[parameters('locationR1')]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "IpConf",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('bastionPIPR1Name'))]"
              },
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR1Name'), variables('bastionSubnetR1Name'))]"
              }
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('bastionPIPR1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR1Name'), variables('bastionSubnetR1Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2023-02-01",
      "name": "[variables('bastionPIPR1Name')]",
      "location": "[parameters('locationR1')]",
      "sku": {
        "name": "[variables('lbSkuName')]"
      },
      "properties": {
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Static"
      }
    },
    {
      "type": "Microsoft.Network/natGateways",
      "apiVersion": "2021-05-01",
      "name": "[variables('natGatewayR1Name')]",
      "location": "[parameters('locationR1')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {
        "idleTimeoutInMinutes": 4,
        "publicIpAddresses": [
          {
            "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('natGatewayPIR1Name'))]"
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('natGatewayPIR1Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2021-05-01",
      "name": "[variables('natGatewayPIR1Name')]",
      "location": "[parameters('locationR1')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Static",
        "idleTimeoutInMinutes": 4
      }
    },
    {
      "type": "Microsoft.Network/loadBalancers",
      "apiVersion": "2023-02-01",
      "name": "[variables('lbR1Name')]",
      "location": "[parameters('locationR1')]",
      "sku": {
        "name": "[variables('lbSkuName')]"
      },
      "properties": {
        "frontendIPConfigurations": [
          {
            "name": "[variables('lbFrontEndR1Name')]",
            "properties": {
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPIPR1Name'))]"
              }
            }
          }
        ],
        "backendAddressPools": [
          {
            "name": "[variables('lbBackendPoolR1Name')]"
          }
        ],
        "loadBalancingRules": [
          {
            "name": "myHTTPRule",
            "properties": {
              "frontendIPConfiguration": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('lbR1Name'), variables('lbFrontEndR1Name'))]"
              },
              "backendAddressPool": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbR1Name'), variables('lbBackendPoolR1Name'))]"
              },
              "frontendPort": 80,
              "backendPort": 80,
              "enableFloatingIP": false,
              "idleTimeoutInMinutes": 15,
              "protocol": "Tcp",
              "enableTcpReset": true,
              "loadDistribution": "Default",
              "disableOutboundSnat": true,
              "probe": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('lbR1Name'), variables('lbProbeR1Name'))]"
              }
            }
          }
        ],
        "probes": [
          {
            "name": "[variables('lbProbeR1Name')]",
            "properties": {
              "protocol": "Http",
              "port": 80,
              "requestPath": "/",
              "intervalInSeconds": 5,
              "numberOfProbes": 2
            }
          }
        ],
        "outboundRules": []
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPIPR1Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2023-02-01",
      "name": "[variables('lbPIPR1Name')]",
      "location": "[parameters('locationR1')]",
      "sku": {
        "name": "[variables('lbSkuName')]"
      },
      "properties": {
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Static"
      }
    },
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2023-02-01",
      "name": "[variables('nsgR1Name')]",
      "location": "[parameters('locationR1')]",
      "properties": {
        "securityRules": [
          {
            "name": "AllowHTTPInbound",
            "properties": {
              "protocol": "*",
              "sourcePortRange": "*",
              "destinationPortRange": "80",
              "sourceAddressPrefix": "Internet",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 100,
              "direction": "Inbound"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2023-02-01",
      "name": "[variables('vnetR1Name')]",
      "location": "[parameters('locationR1')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[variables('vnetAddressPrefixR1')]"
          ]
        }
      }
    },
    {
      "copy": {
        "name": "nicVmR2",
        "count": "[length(range(0, 3))]"
      },
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2023-02-01",
      "name": "[format('vm-r2-{0}-networkInterface', add(range(0, 3)[copyIndex()], 1))]",
      "location": "[parameters('locationR2')]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR2Name'), variables('vnetSubnetR2Name'))]"
              },
              "loadBalancerBackendAddressPools": [
                {
                  "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbR2Name'), variables('lbBackendPoolR2Name'))]"
                }
              ]
            }
          }
        ],
        "networkSecurityGroup": {
          "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgR2Name'))]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/loadBalancers', variables('lbR2Name'))]",
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgR2Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR2Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR2Name'), variables('vnetSubnetR2Name'))]"
      ]
    },
    {
      "copy": {
        "name": "installWebServerVmR2",
        "count": "[length(range(0, 3))]"
      },
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2023-03-01",
      "name": "[format('vm-r2-{0}/InstallWebServer', add(range(0, 3)[copyIndex()], 1))]",
      "location": "[parameters('locationR2')]",
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.7",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "commandToExecute": "powershell.exe Install-WindowsFeature -name Web-Server -IncludeManagementTools && powershell.exe remove-item 'C:\\inetpub\\wwwroot\\iisstart.htm' && powershell.exe Add-Content -Path 'C:\\inetpub\\wwwroot\\iisstart.htm' -Value $('Hello World from ' + $env:computername)"
        }
      },
      "dependsOn": [
        "vmR2"
      ]
    },
    {
      "copy": {
        "name": "vmR2",
        "count": "[length(range(0, 3))]"
      },
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2023-03-01",
      "name": "[format('vm-r2-{0}', add(range(0, 3)[copyIndex()], 1))]",
      "location": "[parameters('locationR2')]",
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "MicrosoftWindowsServer",
            "offer": "WindowsServer",
            "sku": "2019-Datacenter",
            "version": "latest"
          },
          "osDisk": {
            "createOption": "fromImage",
            "managedDisk": {
              "storageAccountType": "[variables('vmStorageAccountType')]"
            }
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', format('vm-r2-{0}-networkInterface', add(range(0, 3)[copyIndex()], 1)))]"
            }
          ]
        },
        "osProfile": {
          "computerName": "[format('vm-r2-{0}', add(range(0, 3)[copyIndex()], 1))]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]",
          "windowsConfiguration": {
            "enableAutomaticUpdates": true,
            "provisionVMAgent": true
          }
        }
      },
      "dependsOn": [
        "nicVmR2"
      ]
    },
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2023-02-01",
      "name": "[format('{0}/{1}', variables('vnetR2Name'), variables('bastionSubnetR2Name'))]",
      "properties": {
        "addressPrefix": "[variables('vnetBastionSubnetAddressPrefixR2')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR2Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2023-02-01",
      "name": "[format('{0}/{1}', variables('vnetR2Name'), variables('vnetSubnetR2Name'))]",
      "properties": {
        "addressPrefix": "[variables('vnetSubnetAddressPrefixR2')]",
        "natGateway": {
          "id": "[resourceId('Microsoft.Network/natGateways', variables('natGatewayR2Name'))]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/natGateways', variables('natGatewayR2Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR2Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR2Name'), variables('bastionSubnetR2Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/bastionHosts",
      "apiVersion": "2023-02-01",
      "name": "[variables('bastionHostR2Name')]",
      "location": "[parameters('locationR2')]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "IpConf",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('bastionPIPR2Name'))]"
              },
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR2Name'), variables('bastionSubnetR2Name'))]"
              }
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('bastionPIPR2Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetR2Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetR2Name'), variables('bastionSubnetR2Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2023-02-01",
      "name": "[variables('bastionPIPR2Name')]",
      "location": "[parameters('locationR2')]",
      "sku": {
        "name": "[variables('lbSkuName')]"
      },
      "properties": {
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Static"
      }
    },
    {
      "type": "Microsoft.Network/natGateways",
      "apiVersion": "2021-05-01",
      "name": "[variables('natGatewayR2Name')]",
      "location": "[parameters('locationR2')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {
        "idleTimeoutInMinutes": 4,
        "publicIpAddresses": [
          {
            "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('natGatewayPIR2Name'))]"
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('natGatewayPIR2Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2021-05-01",
      "name": "[variables('natGatewayPIR2Name')]",
      "location": "[parameters('locationR2')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Static",
        "idleTimeoutInMinutes": 4
      }
    },
    {
      "type": "Microsoft.Network/loadBalancers",
      "apiVersion": "2023-02-01",
      "name": "[variables('lbR2Name')]",
      "location": "[parameters('locationR2')]",
      "sku": {
        "name": "[variables('lbSkuName')]"
      },
      "properties": {
        "frontendIPConfigurations": [
          {
            "name": "[variables('lbFrontEndR2Name')]",
            "properties": {
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPIPR2Name'))]"
              }
            }
          }
        ],
        "backendAddressPools": [
          {
            "name": "[variables('lbBackendPoolR2Name')]"
          }
        ],
        "loadBalancingRules": [
          {
            "name": "myHTTPRule",
            "properties": {
              "frontendIPConfiguration": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('lbR2Name'), variables('lbFrontEndR2Name'))]"
              },
              "backendAddressPool": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbR2Name'), variables('lbBackendPoolR2Name'))]"
              },
              "frontendPort": 80,
              "backendPort": 80,
              "enableFloatingIP": false,
              "idleTimeoutInMinutes": 15,
              "protocol": "Tcp",
              "enableTcpReset": true,
              "loadDistribution": "Default",
              "disableOutboundSnat": true,
              "probe": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('lbR2Name'), variables('lbProbeR2Name'))]"
              }
            }
          }
        ],
        "probes": [
          {
            "name": "[variables('lbProbeR2Name')]",
            "properties": {
              "protocol": "Http",
              "port": 80,
              "requestPath": "/",
              "intervalInSeconds": 5,
              "numberOfProbes": 2
            }
          }
        ],
        "outboundRules": []
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPIPR2Name'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2023-02-01",
      "name": "[variables('lbPIPR2Name')]",
      "location": "[parameters('locationR2')]",
      "sku": {
        "name": "[variables('lbSkuName')]"
      },
      "properties": {
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Static"
      }
    },
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2023-02-01",
      "name": "[variables('nsgR2Name')]",
      "location": "[parameters('locationR2')]",
      "properties": {
        "securityRules": [
          {
            "name": "AllowHTTPInbound",
            "properties": {
              "protocol": "*",
              "sourcePortRange": "*",
              "destinationPortRange": "80",
              "sourceAddressPrefix": "Internet",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 100,
              "direction": "Inbound"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2023-02-01",
      "name": "[variables('vnetR2Name')]",
      "location": "[parameters('locationR2')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[variables('vnetAddressPrefixR2')]"
          ]
        }
      }
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2023-02-01",
      "name": "[variables('lbPIPCrName')]",
      "location": "[parameters('locationCr')]",
      "sku": {
        "name": "Standard",
        "tier": "Global"
      },
      "properties": {
        "publicIPAllocationMethod": "[variables('publicIPAddressType')]"
      }
    },
    {
      "type": "Microsoft.Network/loadBalancers",
      "apiVersion": "2023-02-01",
      "name": "[variables('lbCrName')]",
      "location": "[parameters('locationCr')]",
      "sku": {
        "name": "Standard",
        "tier": "Global"
      },
      "properties": {
        "frontendIPConfigurations": [
          {
            "name": "[variables('lbFrontEndCrName')]",
            "properties": {
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPIPCrName'))]"
              }
            }
          }
        ],
        "backendAddressPools": [
          {
            "name": "[variables('lbBackendPoolCrName')]"
          }
        ],
        "loadBalancingRules": [
          {
            "name": "LBRule",
            "properties": {
              "frontendIPConfiguration": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('lbCrName'), variables('lbFrontEndCrName'))]"
              },
              "backendAddressPool": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbCrName'), variables('lbBackendPoolCrName'))]"
              },
              "protocol": "Tcp",
              "frontendPort": 80,
              "backendPort": 80,
              "enableFloatingIP": false
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPIPCrName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/loadBalancers/backendAddressPools",
      "apiVersion": "2023-02-01",
      "name": "[format('{0}/{1}', variables('lbCrName'), variables('lbBackendPoolCrName'))]",
      "properties": {
        "loadBalancerBackendAddresses": [
          {
            "name": "address1",
            "properties": {
              "loadBalancerFrontendIPConfiguration": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('lbR1Name'), variables('lbFrontEndR1Name'))]"
              }
            }
          },
          {
            "name": "address2",
            "properties": {
              "loadBalancerFrontendIPConfiguration": {
                "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('lbR2Name'), variables('lbFrontEndR2Name'))]"
              }
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/loadBalancers', variables('lbCrName'))]",
        "[resourceId('Microsoft.Network/loadBalancers', variables('lbR1Name'))]",
        "[resourceId('Microsoft.Network/loadBalancers', variables('lbR2Name'))]"
      ]
    }
  ]
}

Uwaga / Notatka

Podczas tworzenia standardowego modułu równoważenia obciążenia należy również utworzyć nowy standardowy publiczny adres IP skonfigurowany jako interfejs zewnętrzny dla tego modułu. Ponadto moduły równoważenia obciążenia i jednostki SKU publicznych adresów IP muszą być zgodne. W naszym przypadku utworzymy dwa standardowe publiczne adresy IP, jeden dla modułu równoważenia obciążenia na poziomie regionalnym, a drugi dla globalnego modułu równoważenia obciążenia.

W szablonie zdefiniowano wiele zasobów platformy Azure:

Ważne

Ceny godzinowe zaczynają się od momentu wdrożenia usługi Bastion, niezależnie od użycia danych wychodzących. Aby uzyskać więcej informacji, zobacz Ceny i SKU. Jeśli wdrażasz Bastion w ramach samouczka lub testu, zalecamy usunięcie tego zasobu po zakończeniu jego używania.

Aby znaleźć więcej szablonów związanych z usługą Azure Load Balancer, zobacz Szablony szybkiego startu platformy Azure.

Wdrażanie szablonu

  1. Zaloguj się do witryny Azure Portal.

  2. Wprowadź i wybierz pozycję Wdróż szablon niestandardowy na pasku wyszukiwania

  3. Na stronie Wdrożenie niestandardowe wprowadź ciąg load-balancer-cross-region w polu tekstowym Szablon szybkiego startu i wybierz pozycję Quickstarts/microsoft.network/load-balancer-cross-region.

    Zrzut ekranu strony niestandardowego wdrażania umożliwiającej wybór szablonu ARM szybkiego startu.

  4. Wybierz Wybierz szablon i wprowadź następujące informacje:

    Nazwa Wartość
    Subskrypcja Wybierz swoją subskrypcję
    Grupa zasobów Wybierz grupę zasobów lub utwórz nową grupę zasobów
    Rejon Wybierz region wdrażania dla zasobów
    Nazwa projektu Wprowadź nazwę projektu używaną do tworzenia unikatowych nazw zasobów
    LocationCR Wybieranie regionu wdrażania dla modułu równoważenia obciążenia między regionami
    Lokalizacja-r1 Wybierz region wdrażania dla regionalnego modułu równoważenia obciążenia i maszyn wirtualnych
    Lokalizacja-r2 Wybierz region wdrożeniowy, w którym znajdują się regionalny moduł równoważenia obciążenia i maszyny wirtualne.
    Nazwa użytkownika administratora Wprowadź nazwę użytkownika maszyn wirtualnych
    Hasło administratora Wprowadź hasło dla maszyn wirtualnych
  5. Wybierz pozycję Przejrzyj i utwórz , aby uruchomić walidację szablonu.

  6. Jeśli nie ma żadnych błędów, przejrzyj warunki szablonu i wybierz pozycję Utwórz.

Weryfikowanie wdrożenia

  1. W razie potrzeby zaloguj się do witryny Azure Portal.

  2. Wybierz pozycję Grupy zasobów w okienku po lewej stronie.

  3. Wybierz grupę zasobów używaną we wdrożeniu. Domyślna nazwa grupy zasobów to nazwa projektu z dołączonym parametrem -rg . Na przykład crlb-learn-arm-rg.

  4. Wybierz globalny moduł równoważenia obciążenia. Jego domyślną nazwą jest nazwa projektu z dołączonym parametrem -cr . Na przykład crlb-learn-arm-cr.

  5. Skopiuj tylko część adresu IP z publicznego adresu IP, a następnie wklej ją w pasku adresu przeglądarki. Strona domyślnie wyświetla się jako strona internetowa serwera Windows z usługami IIS.

    Zrzut ekranu przedstawiający domyślną stronę internetową usług IIS Windows Server w przeglądarce internetowej.

Uprzątnij zasoby

Jeśli nie są już potrzebne, usuń następujące elementy:

  • Grupa zasobów
  • Moduł równoważenia obciążenia
  • Powiązane zasoby
  1. Przejdź do witryny Azure Portal, wybierz grupę zasobów zawierającą moduł równoważenia obciążenia, a następnie wybierz pozycję Usuń grupę zasobów.
  2. Wybierz pozycję Zastosuj wymuszanie usuwania dla wybranych maszyn wirtualnych i zestawów skalowania maszyn wirtualnych, wprowadź nazwę grupy zasobów, a następnie wybierz pozycję **Usuń > usuń **.

Dalsze kroki

W tym samouczku nauczysz się następujących rzeczy:

  • Utworzono moduł równoważenia obciążenia między regionami\
  • Tworzenie regionalnego modułu równoważenia obciążenia
  • Utworzono trzy maszyny wirtualne i połączono je z regionalnym modułem równoważenia obciążenia
  • Skonfigurowano globalny moduł równoważenia obciążenia do pracy z regionalnym modułem równoważenia obciążenia
  • Przetestowano globalny moduł równoważenia obciążenia.

Dowiedz się więcej na temat modułu równoważenia obciążenia między regionami.
Przejdź do następnego artykułu, aby dowiedzieć się, jak utworzyć...