使用 Bicep 建立虛擬網路資源
許多 Azure 部署都需要部署和設定網路資源。 您可以使用 Bicep 來定義 Azure 網路資源。
虛擬網路和子網路
藉由建立具有類型 Microsoft.Network/virtualNetworks
的資源來定義您的虛擬網路。
使用子網路屬性來設定子網路
虛擬網路包含子網路,這是虛擬網路內 IP 位址的邏輯群組。 在 Bicep 中有兩種方式可定義子網路:在虛擬網路資源上使用 subnets
屬性,以及建立具有類型 Microsoft.Network/virtualNetworks/subnets
的子資源。
警告
避免將子網路定義為子資源。 此方法可能會在後續部署期間導致您的資源停機,或部署失敗。
最好在虛擬網路定義中定義您的子網路,如下列範例所示:
下列範例是較大範例的一部分。 如需您可以部署的 Bicep 檔案,請參閱完整檔案。
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
雖然這兩個方法都可讓您定義和建立子網路,但有一個重要的差異。 使用子資源定義子網路時,第一次部署 Bicep 檔案時會部署虛擬網路。 然後,在虛擬網路部署完成之後,就會部署每個子網路。 發生此順序的原因是 Azure Resource Manager 會分別部署個別的資源。
重新部署相同的 Bicep 檔案時,會發生相同的部署順序。 不過,虛擬網路會在未設定任何子網路的情況下進行部署,因為 subnets
屬性實際上是空的。 然後,重新設定虛擬網路之後,會重新部署子網路資源,這會重新建立每個子網路。 在某些情況下,此行為會導致您的虛擬網路內的資源在您的部署期間失去連線能力。 在其他情況下,Azure 會防止您修改虛擬網路,而您的部署會失敗。
存取子網路資源識別碼
您經常需要參考子網路的資源識別碼。 使用 subnets
屬性來定義子網路時,您也可以使用 existing
關鍵字來取得子網路的強型別參考,然後存取子網路的 id
屬性:
下列範例是較大範例的一部分。 如需您可以部署的 Bicep 檔案,請參閱完整檔案。
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
因為此範例使用 existing
關鍵字來存取子網路資源,而非定義完整的子網路資源,所以不會有上一節所述的風險。
您也可以結合 existing
和 scope
關鍵字來參考另一個資源群組中的虛擬網路或子網路資源。
網路安全性群組
網路安全性群組經常用來套用規則,以控制來自子網路或網路介面流量的輸入和輸出流量。 在 Bicep 檔案內定義大量規則,並在多個 Bicep 檔案之間共用規則,可能會變得很麻煩。 當您使用複雜或大型的網路安全性群組時,請考慮使用共用變數檔案模式。
私人端點
私人端點必須經過核准。 在某些情況下會自動進行核准。 但在其他情況下,您必須先核准端點,端點才會可供使用。
私人端點核准是一項作業,因此您無法直接在 Bicep 程式碼內執行。 不過,您可以使用部署指令碼來叫用該作業。 或者,您也可以在 Bicep 檔案外部叫用該作業,例如在管線指令碼中。