Tutorial: Como implantar um balanceador de carga entre regiões com modelos de Resource Manager do Azure

Um balanceador de carga entre regiões garante que um serviço esteja disponível globalmente em várias regiões do Azure. Se uma região falhar, o tráfego será roteado para o balanceador de carga regional íntegro mais próximo.

O uso de um modelo do Resource Manager apresenta menos etapas comparado a outros métodos de implantação.

Um Modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo usa a sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Se seu ambiente atender aos pré-requisitos e você estiver familiarizado com o uso de modelos ARM, selecione o botão Implantar no Azure. O modelo é aberto no portal do Azure.

Botão para implantar o modelo do Resource Manager no Azure.

Neste tutorial, você aprenderá a:

  • Todos os tutoriais incluem uma lista que resume as etapas para conclusão
  • Cada um desses tópicos está alinhado a uma chave H2
  • Use essas caixas de seleção verdes em um tutorial

Pré-requisitos

Examinar o modelo

Nesta seção, você examinará o modelo e os parâmetros usados para implantar o balanceador de carga entre regiões. O modelo usado neste início rápido é dos Modelos de Início Rápido do Azure.

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

Observação

Ao criar um Standard Load Balancer, você também precisa criar um endereço IP público padrão configurado como o front-end do Standard Load Balancer. Além disso, os balanceadores de carga e os SKUs de IP públicos devem corresponder. Em nosso caso, criaremos dois endereços IP públicos padrão, um para o balanceador de carga de nível regional e outro para o balanceador de carga entre regiões.

Vários recursos do Azure foram definidos no modelo:

Importante

Os preços por hora começam a partir do momento em que o Bastion é implantado, independentemente do uso de dados de saída. Para saber mais, confira Preços e SKUs. Se estiver implantando o Bastion como parte de um tutorial ou teste, recomendamos que você exclua esse recurso após terminar de usá-lo.

Para encontrar mais modelos relacionados ao Azure Load Balancer, confira Modelos de Início Rápido do Azure.

Implantar o modelo

  1. Entre no portal do Azure.

  2. Insira e selecione Implantar um modelo personalizado na barra de pesquisa

  3. Na página Implantação personalizada, insira load-balancer-cross-region na caixa de texto Modelo de início rápido e selecione quickstarts/microsoft.network/load-balancer-cross-region.

    Captura de tela da página Implantação personalizada para selecionar modelo do ARM de início rápido.

  4. Escolha Selecionar modelo e insira as seguintes informações:

    Nome Valor
    Subscrição Selecionar sua assinatura
    Grupo de recursos Selecione seu grupo de recursos ou crie um novo grupo de recursos
    Região Selecione a região de implantação para recursos
    Nome do projeto Insira um nome de projeto usado para criar nomes de recursos exclusivos
    LocationCR Selecione a região de implantação para o balanceador de carga entre regiões
    Location-r1 Selecione a região de implantação para o balanceador de carga regional e as VMs
    Location-r2 Selecione a região de implantação em que o balanceador de carga regional e as VMs
    Nome de Usuário do Administrador Insira um nome de usuário para as máquina virtuais
    Senha do Administrador Insira uma senha para as máquinas virtuais
  5. Selecione Examinar + criar para executar a validação do modelo.

  6. Se nenhum erro estiver presente, examine os termos do modelo e selecione Criar.

Verificar a implantação

  1. Se necessário, entre no Portal do Azure.

  2. Escolha Grupos de recursos no painel esquerdo.

  3. Selecione o grupo de recursos usado na implantação. O nome do grupo de recursos padrão é o nome do projeto com o acréscimo de -rg. Por exemplo, crlb-learn-arm-rg.

  4. Selecione o balanceador de carga global. O nome padrão é o nome do projeto com o acréscimo de -cr. Por exemplo, crlb-learn-arm-cr.

  5. Copie apenas a parte do endereço IP do endereço IP público e cole-a na barra de endereço do seu navegador. A página é resolvida para uma página da Web padrão do Windows Server do IIS.

    Captura de tela da página padrão do IIS Windows Server no navegador da web.

Limpar os recursos

Quando você não precisar mais deles, exclua os seguintes:

  • Grupo de recursos
  • Balanceador de carga
  • Recursos relacionados
  1. Acesse o portal do Azure, selecione o grupo de recursos que contém o balanceador de carga e, em seguida, selecione Excluir o grupo de recursos.
  2. Selecione aplicar exclusão forçada para máquinas virtuais selecionadas e Conjuntos de dimensionamento de máquinas virtuais, insira o nome do grupo de recursos e selecione **Excluir > Excluir **.

Próximas etapas

Neste tutorial, você:

  • Criou um balanceador de carga entre regiões\
  • Criou um balanceador de carga regional
  • Criou três máquinas virtuais e as vinculou ao balanceador de carga regional
  • Configurou o balanceador de carga global para trabalhar com o balanceador de carga regional
  • Testou o balanceador de carga global.

Saiba mais sobre o balanceador de carga entre regiões.
Prossiga para o próximo artigo para aprender a criar...