使用 Bicep 建立虛擬網路資源

許多 Azure 部署都需要部署和設定網路資源。 您可以使用 Bicep 來定義 Azure 網路資源。

虛擬網路和子網路

藉由建立具有類型 Microsoft.Network/virtualNetworks 的資源來定義您的虛擬網路。

使用子網路屬性來設定子網路

虛擬網路包含子網路,這是虛擬網路內 IP 位址的邏輯群組。 在 Bicep 中有兩種方式可定義子網路:在虛擬網路資源上使用 subnets 屬性,以及建立具有類型 Microsoft.Network/virtualNetworks/subnets子資源

警告

避免將子網路定義為子資源。 此方法可能會在後續部署期間導致您的資源停機,或部署失敗。

最好在虛擬網路定義中定義您的子網路,如下列範例所示:

下列範例是較大範例的一部分。 如需您可以部署的 Bicep 檔案,請參閱完整檔案

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-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'
        }
      }
    ]
  }
}

雖然這兩個方法都可讓您定義和建立子網路,但有一個重要的差異。 使用子資源定義子網路時,第一次部署 Bicep 檔案時會部署虛擬網路。 然後,在虛擬網路部署完成之後,就會部署每個子網路。 發生此順序的原因是 Azure Resource Manager 會分別部署個別的資源。

重新部署相同的 Bicep 檔案時,會發生相同的部署順序。 不過,虛擬網路會在未設定任何子網路的情況下進行部署,因為 subnets 屬性實際上是空的。 然後,重新設定虛擬網路之後,會重新部署子網路資源,這會重新建立每個子網路。 在某些情況下,此行為會導致您的虛擬網路內的資源在您的部署期間失去連線能力。 在其他情況下,Azure 會防止您修改虛擬網路,而您的部署會失敗。

存取子網路資源識別碼

您經常需要參考子網路的資源識別碼。 使用 subnets 屬性來定義子網路時,您也可以使用 existing 關鍵字來取得子網路的強型別參考,然後存取子網路的 id 屬性:

下列範例是較大範例的一部分。 如需您可以部署的 Bicep 檔案,請參閱完整檔案

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-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

因為此範例使用 existing 關鍵字來存取子網路資源,而非定義完整的子網路資源,所以不會有上一節所述的風險。

您也可以結合 existingscope 關鍵字來參考另一個資源群組中的虛擬網路或子網路資源。

網路安全性群組

網路安全性群組經常用來套用規則,以控制來自子網路或網路介面流量的輸入和輸出流量。 在 Bicep 檔案內定義大量規則,並在多個 Bicep 檔案之間共用規則,可能會變得很麻煩。 當您使用複雜或大型的網路安全性群組時,請考慮使用共用變數檔案模式

私人端點

私人端點必須經過核准。 在某些情況下會自動進行核准。 但在其他情況下,您必須先核准端點,端點才會可供使用。

私人端點核准是一項作業,因此您無法直接在 Bicep 程式碼內執行。 不過,您可以使用部署指令碼來叫用該作業。 或者,您也可以在 Bicep 檔案外部叫用該作業,例如在管線指令碼中。