Självstudie: Distribuera en global lastbalanserare med Azure Resource Manager-mallar

En global lastbalanserare säkerställer att en tjänst är tillgänglig globalt i flera Azure-regioner. Om en region misslyckas dirigeras trafiken till nästa närmaste felfria regionala lastbalanserare.

Med hjälp av en ARM-mall utförs färre steg jämfört med andra distributionsmetoder.

En Azure Resource Manager-mall är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för projektet. Mallen använder deklarativ syntax. Du beskriver den avsedda distributionen utan att skriva sekvensen med programmeringskommandon för att skapa distributionen.

Om din miljö uppfyller förhandskraven och du är van att använda ARM-mallar väljer du knappen Distribuera till Azure. Mallen öppnas i Azure Portal.

Knapp för att distribuera Resource Manager-mallen till Azure.

I den här tutorialen lär du dig följande:

  • Alla självstudier innehåller en lista som sammanfattar stegen för slutförande
  • Varje av dessa punkter stämmer överens med en nyckel H2
  • Använd de här gröna kryssrutorna i en handledning

Förutsättningar

Granska mallen

I det här avsnittet granskar du mallen och de parametrar som används för att distribuera den globala lastbalanseraren. Mallen som används i den här snabbstarten kommer från Azure-snabbstartsmallarna.

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

Anmärkning

När du skapar en standardlastbalanserare måste du också skapa en ny offentlig IP-standardadress som är konfigurerad som klientdel för standardlastbalanseraren. Lastbalanserare och offentliga IP-SKU:er måste också matcha. I vårt fall skapar vi två offentliga standard-IP-adresser, en för lastbalanseraren på regional nivå och en annan för den globala lastbalanseraren.

Flera Azure-resurser har definierats i mallen:

Viktigt!

Timprissättningen startar när Bastion aktiveras, oavsett utgående dataanvändning. Mer information finns i Priser och SKU:er. Om du implementerar Bastion som en del av en handledning eller test, rekommenderar vi att du raderar denna resurs efter att du har använt den klart.

Mer information om hur du hittar fler mallar som är relaterade till Azure Load Balancer finns i Azure Snabbstartsmallar.

Använd mallen

  1. Logga in på Azure-portalen.

  2. Ange och välj Distribuera en anpassad mall i sökfältet

  3. På sidan Anpassad distribution anger du load-balancer-cross-region i textrutan Snabbstartsmall och väljer snabbstarter/microsoft.network/load-balancer-cross-region.

    Skärmbild av sidan för anpassad distribution för val av ARM-snabbstartsmall.

  4. Välj Välj mall och ange följande information:

    Namn Värde
    Prenumeration Välj din prenumeration
    Resursgrupp Välj din resursgrupp eller skapa en ny resursgrupp
    Region Välj distributionsregion för resurser
    Projektnamn Ange ett projektnamn som används för att skapa unika resursnamn
    LocationCR Välj distributionsregion för lastbalanseraren mellan regioner
    Plats-r1 Välj distributionsregion för den regionala lastbalanseraren och de virtuella datorerna
    Plats-r2 Välj den region för distribution där den regionala lastbalanseraren och de virtuella datorerna finns.
    Användarnamn för administratör Ange ett användarnamn för de virtuella datorerna
    Administratörslösenord Ange ett lösenord för de virtuella datorerna
  5. Välj Granska + skapa för att utföra mallverifiering.

  6. Om det inte finns några fel granskar du villkoren i mallen och väljer Skapa.

Verifiera driftsättningen

  1. Om det behövs loggar du in på Azure-portalen.

  2. Välj Resursgrupper i det vänstra fönstret.

  3. Välj den resursgrupp som används i distributionen. Standardnamnet för resursgruppen är projektnamnet med -rg bifogat. Till exempel crlb-learn-arm-rg.

  4. Välj den globala lastbalanseraren. Dess standardnamn är projektnamnet med -cr bifogad. Till exempel crlb-learn-arm-cr.

  5. Kopiera endast IP-adressdelen av den offentliga IP-adressen och klistra sedan in den i webbläsarens adressfält. Sidan omdirigerar till en standardsida för IIS Windows Server.

    Skärmbild av IIS Windows Server-standardwebbsidan i webbläsaren.

Rensa resurser

Ta bort följande när du inte längre behöver dem:

  • Resursgrupp
  • Lastbalanserare
  • Relaterade resurser
  1. Gå till Azure Portal, välj resursgruppen som innehåller lastbalanseraren och välj sedan Ta bort resursgrupp.
  2. Välj använd framtvingad borttagning för valda virtuella maskiner och skalningsuppsättningar för virtuella maskiner, ange namnet på resursgruppen och välj sedan **Ta bort > **.

Nästa steg

I den här handledningen kommer du att:

  • Skapade en lastbalanserare mellan regioner\
  • Skapade en regional lastbalanserare
  • Skapade tre virtuella datorer och länkade dem till den regionala lastbalanseraren
  • Konfigurerade den globala lastbalanseraren så att den fungerar med den regionala lastbalanseraren
  • Testade den globala lastbalanseraren.

Läs mer om lastbalanserare mellan regioner.
Gå vidare till nästa artikel för att lära dig hur du skapar...