Criar recursos de rede virtual com o Bicep

Muitas implementações do Azure exigem que os recursos de rede sejam implementados e configurados. Pode utilizar o Bicep para definir os seus recursos de rede do Azure.

Redes virtuais e sub-redes

Defina as redes virtuais ao criar um recurso com o tipo Microsoft.Network/virtualNetworks.

Configurar sub-redes com a propriedade sub-redes

As redes virtuais contêm sub-redes, que são grupos lógicos de endereços IP na rede virtual. Existem duas formas de definir sub-redes no Bicep: ao utilizar a propriedade no recurso de rede virtual e ao criar um recurso subordinado com o subnets tipo Microsoft.Network/virtualNetworks/subnets.

Aviso

Evite definir sub-redes como recursos subordinados. Esta abordagem pode resultar em períodos de indisponibilidade para os seus recursos durante implementações subsequentes ou implementações falhadas.

É melhor definir as sub-redes na definição de rede virtual, como neste exemplo:

O exemplo seguinte faz parte de um exemplo maior. Para obter um ficheiro Bicep que possa implementar, veja o ficheiro completo.

param location string = resourceGroup().location

var virtualNetworkName = 'my-vnet'
var subnet1Name = 'Subnet-1'
var subnet2Name = 'Subnet-2'

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-11-01' = {
  name: virtualNetworkName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: subnet1Name
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: subnet2Name
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }

  resource subnet1 'subnets' existing = {
    name: subnet1Name
  }

  resource subnet2 'subnets' existing = {
    name: subnet2Name
  }
}

output subnet1ResourceId string = virtualNetwork::subnet1.id
output subnet2ResourceId string = virtualNetwork::subnet2.id

Embora ambas as abordagens lhe permitam definir e criar as suas sub-redes, existe uma diferença importante. Quando define sub-redes com recursos subordinados, quando o ficheiro Bicep é implementado pela primeira vez, a rede virtual é implementada. Depois de concluída a implementação da rede virtual, cada sub-rede é implementada. Esta sequenciação ocorre porque o Azure Resource Manager implementa cada recurso individual separadamente.

Quando reimplementa o mesmo ficheiro Bicep, ocorre a mesma sequência de implementação. No entanto, a rede virtual é implementada sem sub-redes configuradas porque a subnets propriedade está efetivamente vazia. Em seguida, após a reconfiguração da rede virtual, os recursos da sub-rede são reimplementados, o que restaure cada sub-rede. Em algumas situações, este comportamento faz com que os recursos na sua rede virtual percam a conectividade durante a implementação. Noutras situações, o Azure impede-o de modificar a rede virtual e a implementação falha.

IDs de recursos da sub-rede do Access

Muitas vezes, tem de fazer referência ao ID de recurso de uma sub-rede. Quando utiliza a subnets propriedade para definir a sua sub-rede, pode utilizar a existing palavra-chave para obter também uma referência fortemente escrita à sub-rede e, em seguida, aceder à propriedade da id sub-rede:

O exemplo seguinte faz parte de um exemplo maior. Para obter um ficheiro Bicep que possa implementar, veja o ficheiro completo.

param location string = resourceGroup().location

var virtualNetworkName = 'my-vnet'
var subnet1Name = 'Subnet-1'
var subnet2Name = 'Subnet-2'

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-11-01' = {
  name: virtualNetworkName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: subnet1Name
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: subnet2Name
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }

  resource subnet1 'subnets' existing = {
    name: subnet1Name
  }

  resource subnet2 'subnets' existing = {
    name: subnet2Name
  }
}

output subnet1ResourceId string = virtualNetwork::subnet1.id
output subnet2ResourceId string = virtualNetwork::subnet2.id

Uma vez que este exemplo utiliza a existing palavra-chave para aceder ao recurso de sub-rede, em vez de definir o recurso completo da sub-rede, não tem os riscos descritos na secção anterior.

Também pode combinar as existing palavras-chave e scope para fazer referência a uma rede virtual ou recurso de sub-rede noutro grupo de recursos.

Grupos de segurança de rede

Os grupos de segurança de rede são frequentemente utilizados para aplicar regras que controlam o fluxo de entrada e saída do tráfego a partir de uma sub-rede ou interface de rede. Pode tornar-se complicado definir um grande número de regras num ficheiro Bicep e partilhar regras em vários ficheiros Bicep. Considere utilizar o padrão de ficheiro de variável Partilhada quando trabalha com grupos de segurança de rede complexos ou grandes.

Pontos finais privados

Os pontos finais privados têm de ser aprovados. Em algumas situações, a aprovação ocorre automaticamente. No entanto, noutros cenários, tem de aprovar o ponto final antes que seja utilizável.

A aprovação de pontos finais privados é uma operação, pelo que não pode executá-la diretamente no código bicep. No entanto, pode utilizar um script de implementação para invocar a operação. Em alternativa, pode invocar a operação fora do ficheiro Bicep, como num script de pipeline.