Quickstart: Criar um circuito ExpressRoute com um esprevamento privado usando um modelo ARM

Este quickstart descreve como usar um modelo de Resource Manager Azure (Modelo ARM) para criar um circuito ExpressRoute com um espreitamento privado.

Um modelo do ARM é um ficheiro JavaScript Object Notation (JSON) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza sintaxe declarativa. Em sintaxe declarativa o programador descreve a implementação pretendida sem escrever a sequência de comandos de programação para criar a implementação.

Se o seu ambiente cumpre os pré-requisitos e se está familiarizado com a utilização de modelos ARM, selecione o botão Implementar no Azure. O modelo será aberto no portal do Azure.

Deploy to Azure

Pré-requisitos

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Rever o modelo

O modelo utilizado neste início rápido pertence aos Modelos de Início Rápido do Azure.

Neste arranque rápido, irá criar um circuito ExpressRoute com a Equinix como prestador de serviços. O circuito vai usar um Premium SKU, com uma largura de banda de 50 Mbps, e a localização de observação de Washington DC. O espreitamento privado será ativado com uma sub-rede primária e secundária de 192.168.10.16/30 e 192.168.10.20/30 , respectivamente. Uma rede virtual também será criada juntamente com um gateway HighPerformance ExpressRoute.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "7902308351795495256"
    }
  },
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources deployed in the Bicep file"
      }
    },
    "erpeeringLocation": {
      "type": "string",
      "defaultValue": "Washington DC",
      "metadata": {
        "description": "ExpressRoute peering location"
      }
    },
    "erCircuitName": {
      "type": "string",
      "defaultValue": "er-ckt01",
      "metadata": {
        "description": "Name of the ExpressRoute circuit"
      }
    },
    "serviceProviderName": {
      "type": "string",
      "defaultValue": "Equinix",
      "metadata": {
        "description": "Name of the ExpressRoute provider"
      }
    },
    "erSKU_Tier": {
      "type": "string",
      "defaultValue": "Premium",
      "allowedValues": [
        "Premium",
        "Standard"
      ],
      "metadata": {
        "description": "Tier ExpressRoute circuit"
      }
    },
    "erSKU_Family": {
      "type": "string",
      "defaultValue": "MeteredData",
      "allowedValues": [
        "MeteredData",
        "UnlimitedData"
      ],
      "metadata": {
        "description": "Billing model ExpressRoute circuit"
      }
    },
    "bandwidthInMbps": {
      "type": "int",
      "defaultValue": 50,
      "allowedValues": [
        50,
        100,
        200,
        500,
        1000,
        2000,
        5000,
        10000
      ],
      "metadata": {
        "description": "Bandwidth ExpressRoute circuit"
      }
    },
    "peerASN": {
      "type": "int",
      "defaultValue": 65001,
      "metadata": {
        "description": "autonomous system number used to create private peering between the customer edge router and MSEE routers"
      }
    },
    "primaryPeerAddressPrefix": {
      "type": "string",
      "defaultValue": "192.168.10.16/30",
      "metadata": {
        "description": "point-to-point network prefix of primary link between the customer edge router and MSEE router"
      }
    },
    "secondaryPeerAddressPrefix": {
      "type": "string",
      "defaultValue": "192.168.10.20/30",
      "metadata": {
        "description": "point-to-point network prefix of secondary link between the customer edge router and MSEE router"
      }
    },
    "vlanId": {
      "type": "int",
      "defaultValue": 100,
      "metadata": {
        "description": "VLAN Id used between the customer edge routers and MSEE routers. primary and secondary link have the same VLAN Id"
      }
    },
    "vnetName": {
      "type": "string",
      "defaultValue": "vnet1",
      "metadata": {
        "description": "name of the Virtual Network"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "subnet1",
      "metadata": {
        "description": "name of the subnet"
      }
    },
    "vnetAddressSpace": {
      "type": "string",
      "defaultValue": "10.10.10.0/24",
      "metadata": {
        "description": "address space assigned to the Virtual Network"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.10.10.0/25",
      "metadata": {
        "description": "network prefix assigned to the subnet"
      }
    },
    "gatewaySubnetPrefix": {
      "type": "string",
      "defaultValue": "10.10.10.224/27",
      "metadata": {
        "description": "network prefixes assigned to the gateway subnet. It has to be a network prefix with mask /27 or larger"
      }
    },
    "gatewayName": {
      "type": "string",
      "defaultValue": "er-gw",
      "metadata": {
        "description": "name of the ExpressRoute Gateway"
      }
    },
    "gatewaySku": {
      "type": "string",
      "defaultValue": "HighPerformance",
      "allowedValues": [
        "Standard",
        "HighPerformance",
        "UltraPerformance",
        "ErGw1AZ",
        "ErGw2AZ",
        "ErGw3AZ"
      ],
      "metadata": {
        "description": "ExpressRoute Gateway SKU"
      }
    }
  },
  "variables": {
    "erSKU_Name": "[format('{0}_{1}', parameters('erSKU_Tier'), parameters('erSKU_Family'))]",
    "gatewayPublicIPName": "[format('{0}-pubIP', parameters('gatewayName'))]",
    "nsgName": "nsg"
  },
  "resources": [
    {
      "type": "Microsoft.Network/expressRouteCircuits",
      "apiVersion": "2021-05-01",
      "name": "[parameters('erCircuitName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('erSKU_Name')]",
        "tier": "[parameters('erSKU_Tier')]",
        "family": "[parameters('erSKU_Family')]"
      },
      "properties": {
        "serviceProviderProperties": {
          "serviceProviderName": "[parameters('serviceProviderName')]",
          "peeringLocation": "[parameters('erpeeringLocation')]",
          "bandwidthInMbps": "[parameters('bandwidthInMbps')]"
        },
        "allowClassicOperations": false
      }
    },
    {
      "type": "Microsoft.Network/expressRouteCircuits/peerings",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', parameters('erCircuitName'), 'AzurePrivatePeering')]",
      "properties": {
        "peeringType": "AzurePrivatePeering",
        "peerASN": "[parameters('peerASN')]",
        "primaryPeerAddressPrefix": "[parameters('primaryPeerAddressPrefix')]",
        "secondaryPeerAddressPrefix": "[parameters('secondaryPeerAddressPrefix')]",
        "vlanId": "[parameters('vlanId')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/expressRouteCircuits', parameters('erCircuitName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2021-05-01",
      "name": "[variables('nsgName')]",
      "location": "[parameters('location')]",
      "properties": {
        "securityRules": [
          {
            "name": "SSH-rule",
            "properties": {
              "description": "allow SSH",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "22",
              "sourceAddressPrefix": "*",
              "destinationAddressPrefix": "VirtualNetwork",
              "access": "Allow",
              "priority": 500,
              "direction": "Inbound"
            }
          },
          {
            "name": "RDP-rule",
            "properties": {
              "description": "allow RDP",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "3389",
              "sourceAddressPrefix": "*",
              "destinationAddressPrefix": "VirtualNetwork",
              "access": "Allow",
              "priority": 600,
              "direction": "Inbound"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-05-01",
      "name": "[parameters('vnetName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('vnetAddressSpace')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]",
              "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
              }
            }
          },
          {
            "name": "GatewaySubnet",
            "properties": {
              "addressPrefix": "[parameters('gatewaySubnetPrefix')]"
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2021-05-01",
      "name": "[variables('gatewayPublicIPName')]",
      "location": "[parameters('location')]",
      "properties": {
        "publicIPAllocationMethod": "Dynamic"
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworkGateways",
      "apiVersion": "2021-05-01",
      "name": "[parameters('gatewayName')]",
      "location": "[parameters('location')]",
      "properties": {
        "ipConfigurations": [
          {
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), 'GatewaySubnet')]"
              },
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('gatewayPublicIPName'))]"
              }
            },
            "name": "gwIPconf"
          }
        ],
        "gatewayType": "ExpressRoute",
        "sku": {
          "name": "[parameters('gatewaySku')]",
          "tier": "[parameters('gatewaySku')]"
        },
        "vpnType": "RouteBased"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('gatewayPublicIPName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
      ]
    }
  ],
  "outputs": {
    "erCircuitName": {
      "type": "string",
      "value": "[parameters('erCircuitName')]"
    },
    "gatewayName": {
      "type": "string",
      "value": "[parameters('gatewayName')]"
    },
    "gatewaySku": {
      "type": "string",
      "value": "[parameters('gatewaySku')]"
    }
  }
}

Vários recursos Azure foram definidos no modelo:

Para encontrar mais modelos relacionados com ExpressRoute, consulte Azure Quickstart Templates.

Implementar o modelo

  1. Selecione Experimentá-lo a partir do bloco de códigos seguinte para abrir a Cloud Shell Azure e, em seguida, siga as instruções para iniciar súm na Azure.

    $projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
    $location = Read-Host -Prompt "Enter the location (i.e. centralus)"
    $templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.network/expressroute-private-peering-vnet/azuredeploy.json"
    
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroup -Name $resourceGroupName -Location "$location"
    New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri
    
    Read-Host -Prompt "Press [ENTER] to continue ..."
    

    Espere até ver o pedido da consola.

  2. Selecione Copiar do bloco de código anterior para copiar o script PowerShell.

  3. Clique com o botão direito da placa de consola da concha e, em seguida, selecione Pasta.

  4. Insira os valores.

    O nome do grupo de recursos é o nome do projeto com rg anexado.

    Leva cerca de 20 minutos para implantar o modelo. Quando concluída, a saída é semelhante a:

    ExpressRoute Resource Manager template PowerShell deployment output

Azure PowerShell é usado para implementar o modelo. Além de Azure PowerShell, você também pode usar o portal do Azure, Azure CLI, e REST API. Para aprender outros métodos de implementação, consulte os modelos de implementação.

Validar a implementação

  1. Inicie sessão no portal do Azure.

  2. Selecione grupos de recursos do painel esquerdo.

  3. Selecione o grupo de recursos que criou na secção anterior. O nome do grupo de recursos predefinidos é o nome do projeto com rg anexado.

  4. O grupo de recursos deve conter os seguintes recursos vistos aqui:

    ExpressRoute deployment resource group

  5. Selecione o circuito ExpressRoute er-ck01 para verificar se o estado do circuito está Ativado, o estado do fornecedor não é aprovisionado e o estoque privado tem o estado de Provisionado.

    ExpressRoute deployment circuit

Nota

Terá de ligar ao fornecedor para concluir o processo de provisionamento antes de poder ligar a rede virtual ao circuito.

Limpar os recursos

Quando já não precisar dos recursos que criou com o circuito ExpressRoute, elimine o grupo de recursos. Isto remove o circuito ExpressRoute e todos os recursos relacionados.

Para eliminar o grupo de recursos, ligue para o Remove-AzResourceGroup cmdlet:

Remove-AzResourceGroup -Name <your resource group name>

Passos seguintes

Neste arranque rápido, criaste um:

  • Circuito do ExpressRoute
  • Rede Virtual
  • Gateway de VPN
  • IP público
  • grupos de segurança de rede

Para aprender a ligar uma rede virtual a um circuito, continue com os tutoriais ExpressRoute.