我有一个非常简单的 BICEP 模板,它创建一个虚拟网络和几个子网。子网是使用数组创建的。
我正在尝试单独输出子网 ID,以便稍后使用它们。然而,我正在努力实现这一目标,而且我不确定我哪里出错了。请有人帮我了解如何输出子网 ID?
以下是模板和参数文件。
模板
//PARAMETERS
@description('Enter the virtual network name.')
param vnetName string
@description('Enter the deployment region.')
param location string
@description('Enter the virtual network address space.')
param addressPrefixes array
@description('Enter the subnet names and address spaces.')
param subnets array
//RESOURCE
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: addressPrefixes
}
subnets: subnets
}
}
//OUTPUTS
output subnetId array = [for (name, i) in subnets: {
resourceId: virtualNetwork.properties.subnets[i].id
}]
参数文件
using './virtualNetwork.bicep'
param vnetName = 'vnet-hub-uks-01'
param location = 'uksouth'
param addressPrefixes = [
'10.0.0.0/16'
]
param subnets = [
{
name: 'subnet-1'
properties: {
addressPrefix: '10.0.0.0/24'
}
}
{
name: 'subnet-2'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
{
name: 'subnet-3'
properties: {
addressPrefix: '10.0.2.0/24'
}
}
]
输出 下面的输出在单个输出中显示了所有三个资源 ID,但我希望它们单独显示。
[{"resourceId":"/subscriptions/d5f2dcf8-ab3f-47aa-9ec3-9c5aba4b909f/resourceGroups/rg-vnet/providers/Microsoft.Network/virtualNetworks/vnet-hub-uks-01/subnets/subnet-1"},{"resourceId":"/subscriptions/d5f2dcf8-ab3f-47aa-9ec3-9c5aba4b909f/resourceGroups/rg-vnet/providers/Microsoft.Network/virtualNetworks/vnet-hub-uks-01/subnets/subnet-2"},{"resourceId":"/subscriptions/d5f2dcf8-ab3f-47aa-9ec3-9c5aba4b909f/resourceGroups/rg-vnet/providers/Microsoft.Network/virtualNetworks/vnet-hub-uks-01/subnets/subnet-3"}]
使用 BICEP 从数组中输出资源 ID
Bicep 模板中的问题在于您如何尝试访问输出部分中的子网 ID。参数文件中的
subnets
数组是一个对象数组,因此当您尝试访问 virtualNetwork.properties.subnets[i].id
时,它期望 i
是整数索引,但您传递的是一个对象。
要解决此问题,您需要修改访问子网 ID 的方式。您可以使用
outputs
部分来提取子网 ID,如下所示:
testvnet.bicep:
param vnetName string = 'vkVnet'
param addressPrefixes array = ['10.0.0.0/16']
param location string = 'east us'
param subnets array = [
{
name: 'subnet-1'
properties: {
addressPrefix: '10.0.0.0/24'
}
}
{
name: 'subnet-2'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: addressPrefixes
}
subnets: subnets
}
}
output subnet1Id string = concat(
'/subscriptions/',
subscription().subscriptionId,
'/resourceGroups/',
resourceGroup().name,
'/providers/Microsoft.Network/virtualNetworks/',
vnetName,
'/subnets/subnet-1'
)
output subnet2Id string = concat(
'/subscriptions/',
subscription().subscriptionId,
'/resourceGroups/',
resourceGroup().name,
'/providers/Microsoft.Network/virtualNetworks/',
vnetName,
'/subnets/subnet-2'
)
现在运行命令
az deployment group create --resource-group VINAY-RG --template-file testvnet.bicep
部署成功: