Zelfstudie: Een globale load balancer implementeren met Azure Resource Manager-sjablonen

Een globale load balancer zorgt ervoor dat een service wereldwijd beschikbaar is in meerdere Azure-regio's. Als de ene regio uitvalt, wordt het verkeer doorgestuurd naar de dichtstbijzijnde regionale load balancer.

Als u een ARM-sjabloon gebruikt, hoeft u minder stappen te voltooien in vergelijking met andere implementatiemethoden.

Een Azure Resource Manager-sjabloon is een JSON-bestand (JavaScript Object Notation) dat de infrastructuur en configuratie voor uw project definieert. Voor de sjabloon is declaratieve syntaxis vereist. U beschrijft de beoogde implementatie zonder de reeks programmeeropdrachten te schrijven om de implementatie te maken.

Als uw omgeving voldoet aan de vereisten en u benkend bent met het gebruik van ARM-sjablonen, selecteert u de knop Implementeren naar Azure. De sjabloon wordt in Azure Portal geopend.

Knop voor het implementeren van de Resource Manager-sjabloon in Azure.

In deze zelfstudie leert u het volgende:

  • Alle zelfstudies bevatten een lijst waarin de stappen voor voltooiing worden samengevat
  • Elk van deze opsommingstekens wordt uitgelijnd op een sleutel H2
  • Gebruik deze groene selectievakjes in een zelfstudie

Vereisten

  • Een Azure-account met een actief abonnement. Maak gratis een account en toegang tot Azure Portal.

De sjabloon controleren

In deze sectie bekijkt u de sjabloon en de parameters die worden gebruikt voor het implementeren van de globale load balancer. De sjabloon die in deze quickstart wordt gebruikt, is afkomstig uit de Azure-quickstartsjablonen.

{
  "$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'))]"
      ]
    }
  ]
}

Notitie

Wanneer u een standaard load balancer maakt, moet u ook een nieuw, standaard, openbaar IP-adres maken dat als de front-end wordt geconfigureerd voor de standaard load balancer. Bovendien moeten de load balancers en openbare IP-SKU's overeenkomen. In ons geval maken we twee standaard openbare IP-adressen, een voor de load balancer op regionaal niveau en een andere voor de globale load balancer.

Er zijn meerdere Azure-resources gedefinieerd in de sjabloon:

Belangrijk

De prijzen per uur beginnen vanaf het moment dat Bastion wordt geïmplementeerd, ongeacht het uitgaande gegevensgebruik. Zie Prijzen en SKU's voor meer informatie. Als u Bastion implementeert als onderdeel van een zelfstudie of test, raden we u aan deze resource te verwijderen nadat u deze hebt gebruikt.

Zie Azure-quickstartsjablonen als u meer sjablonen wilt vinden die gerelateerd zijn aan Azure Load Balancer.

De sjabloon implementeren

  1. Meld u aan bij het Azure-portaal.

  2. Voer een aangepaste sjabloon in en selecteer deze in de zoekbalk implementeren

  3. Voer op de pagina Aangepaste implementatie load balancer-cross-region in het tekstvak quickstart-sjabloon in en selecteer quickstarts/microsoft.network/load-balancer-cross-region.

    Schermopname van de pagina Aangepaste implementatie voor het selecteren van een ARM-sjabloon voor quickstart.

  4. Kies Sjabloon selecteren en voer de volgende gegevens in:

    Naam Weergegeven als
    Abonnement Selecteer uw abonnement
    Resourcegroep Selecteer uw resourcegroep of maak een nieuwe resourcegroep
    Regio Selecteer de implementatieregio voor resources
    Projectnaam Voer een projectnaam in die wordt gebruikt om unieke resourcenamen te maken
    LocatieCR Selecteer de implementatieregio voor de load balancer voor meerdere regio's
    Locatie-r1 Selecteer de implementatieregio voor de regionale load balancer en VM's
    Location-r2 Selecteer de implementatieregio waar de regionale load balancer en VM's zich bevinden
    Gebruikersnaam van beheerder Voer een gebruikersnaam in voor de virtuele machines
    Wachtwoord beheerder Voer een wachtwoord in voor de virtuele machines
  5. Selecteer Beoordelen en maken om sjabloonvalidatie uit te voeren.

  6. Als er geen fouten aanwezig zijn, controleert u de voorwaarden van de sjabloon en selecteert u Maken.

De implementatie controleren

  1. Meld u zo nodig aan bij Azure Portal.

  2. Selecteer Resourcegroepen in het linkerdeelvenster.

  3. Selecteer de resourcegroep die in de implementatie wordt gebruikt. De standaardnaam van de resourcegroep is de projectnaam waaraan -rg is toegevoegd. Bijvoorbeeld crlb-learn-arm-rg.

  4. Selecteer de globale load balancer. De standaardnaam is de projectnaam waaraan -cr is toegevoegd. Bijvoorbeeld crlb-learn-arm-cr.

  5. Kopieer alleen het IP-adresgedeelte van het openbare IP-adres en plak het in de adresbalk van de browser. De pagina wordt omgezet in een standaard IIS Windows Server-webpagina.

    Schermopname van de standaardwebpagina van IIS Windows Server in een webbrowser.

Resources opschonen

Wanneer u ze niet meer nodig hebt, verwijdert u de:

  • Resourcegroep
  • Verdelingsmechanisme
  • Verwante resources
  1. Ga naar Azure Portal, selecteer de resourcegroep die de load balancer bevat en selecteer vervolgens Resourcegroep verwijderen.
  2. Selecteer Force delete toepassen voor geselecteerde virtuele machines en virtuele-machineschaalsets, voer de naam van de resourcegroep in en selecteer vervolgens **Delete **.>

Volgende stappen

In deze zelfstudie hebt u:

  • Een load balancer voor meerdere regio's gemaakt\
  • Een regionale load balancer gemaakt
  • Drie virtuele machines gemaakt en gekoppeld aan de regionale load balancer
  • De globale load balancer geconfigureerd voor gebruik met de regionale load balancer
  • De globale load balancer getest.

Meer informatie over load balancer tussen regio's.
Ga naar het volgende artikel voor meer informatie over het maken...