I want to deploy an Azure Load Balancer with only IP addresses - which are not referring to Azure VM/VMSS NICs but to generic connected on-prem servers - with Bicep like:
resource ilb 'Microsoft.Network/loadBalancers@2022-05-01' = {
name: ilbName
...
backendAddressPools: [
{
name: 'direct'
properties: {
loadBalancerBackendAddresses: [
{
name: 'server65'
properties: {
ipAddress: '192.168.42.65'
virtualNetwork: {
id: vnetHubId
}
}
}
{
name: 'server66'
properties: {
ipAddress: '192.168.42.66'
virtualNetwork: {
id: vnetHubId
}
}
}
]
}
}
]
...
However after deployment - with no errors showing even in debug mode - no IP addresses are display in Portal and when checking with CLI:
> az network lb address-pool show --lb-name ilb-123456789012 -g portfwd-rg -n direct
{
"etag": "W/\"037f2314-c311-4378-9486-a076cacc7491\"",
"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/loadBalancers/ilb-123456789012/backendAddressPools/direct",
"loadBalancerBackendAddresses": [],
"loadBalancingRules": [
{
"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/loadBalancers/ilb-123456789012/loadBalancingRules/direct",
"resourceGroup": "portfwd-rg"
}
],
"name": "direct",
"provisioningState": "Succeeded",
"resourceGroup": "portfwd-rg",
"type": "Microsoft.Network/loadBalancers/backendAddressPools"
When creating the backend address pool with CLI it works:
> az network lb address-pool create --lb-name ilb-123456789012 -g portfwd-rg -n direct2 \
--backend-address name=server65 ip-address=192.168.42.65 \
--backend-address name=server66 ip-address=192.168.42.66 \
--vnet /subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/virtualNetworks/vnet-hub-123456789012
> az network lb address-pool show --lb-name ilb-123456789012 -g portfwd-rg -n direct2
{
"etag": "W/\"efeef00f-3dd4-4b7c-bfa3-f58030757dea\"",
"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/loadBalancers/ilb-123456789012/backendAddressPools/direct2",
"loadBalancerBackendAddresses": [
{
"ipAddress": "192.168.42.65",
"name": "server65",
"virtualNetwork": {
"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/virtualNetworks/vnet-hub-123456789012",
"resourceGroup": "portfwd-rg"
}
},
{
"ipAddress": "192.168.42.66",
"name": "server66",
"virtualNetwork": {
"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/virtualNetworks/vnet-hub-123456789012",
"resourceGroup": "portfwd-rg"
}
}
],
"name": "direct2",
"provisioningState": "Succeeded",
"resourceGroup": "portfwd-rg",
"type": "Microsoft.Network/loadBalancers/backendAddressPools"
}
EDIT: So I basically mapped the --debug
/ PUT
request body of az network lb address-pool create
to Bicep. This is the PUT
request body:
{"name": "direct", "properties": {"loadBalancerBackendAddresses": [{"name": "server65", "properties": {"ipAddress": "192.168.42.65", "virtualNetwork": {"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/virtualNetworks/vnet-hub-123456789012"}}}, {"name": "server66", "properties": {"ipAddress": "192.168.42.66", "virtualNetwork": {"id": "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/portfwd-rg/providers/Microsoft.Network/virtualNetworks/vnet-hub-123456789012"}}}]}}
What am I missing or doing wrong?
I had a similar problem. Without seeing all of your code I will sure with you what I did to fix my problem. I hope it can help you.
main.bicep
param location string = resourceGroup().location
var loadBalancerName = 'dev-web01-LB'
var virtualNetworkName = 'dev-dev-VNET'
var subnetName = 'dev-web-Net'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName)
resource loadBalancers_name 'Microsoft.Network/loadBalancers@2022-07-01' = {
name: loadBalancerName
location: location
sku: {
name: 'Standard'
tier: 'Regional'
}
properties: {
frontendIPConfigurations: [
{
name: 'FrontendIP'
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'FrontendIP')
properties: {
privateIPAddress: '192.168.42.196'
privateIPAllocationMethod: 'Static'
subnet: {
id: subnetRef
}
privateIPAddressVersion: 'IPv4'
}
}
]
backendAddressPools: [
{
name: 'BackendPool'
}
]
loadBalancingRules: [
// Start of Rule
{
name: 'server65'
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'server65')
properties: {
frontendIPConfiguration: {
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'FrontendIP')
}
frontendPort: 605
backendPort: 605
enableFloatingIP: false
idleTimeoutInMinutes: 4
protocol: 'Tcp'
enableTcpReset: false
loadDistribution: 'Default'
disableOutboundSnat: false
backendAddressPool: {
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool')
}
backendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool')
}
]
probe: {
id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'HealthProbe')
}
}
}
// End of Rule
{
name: 'server66'
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'server66')
properties: {
frontendIPConfiguration: {
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'FrontendIP')
}
frontendPort: 606
backendPort: 606
enableFloatingIP: false
idleTimeoutInMinutes: 4
protocol: 'Tcp'
enableTcpReset: false
loadDistribution: 'Default'
disableOutboundSnat: false
backendAddressPool: {
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool')
}
backendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool')
}
]
probe: {
id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'HealthProbe')
}
}
}
]
probes: [
{
name: 'HealthProbe'
id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'HealthProbe')
properties: {
protocol: 'Tcp'
port: 8483
intervalInSeconds: 5
numberOfProbes: 1
probeThreshold: 1
}
}
]
}
}
module devweb01vm './dev-web01-vm.bicep' = {
name: 'dev-web01-VM'
scope: resourceGroup('dev-dev-RG')
params: {
location: location
}
dependsOn: [
loadBalancers_name
]
}
module devweb02vm './dev-web02-vm.bicep' = {
name: 'dev-web02-VM'
scope: resourceGroup('dev-dev-RG')
params: {
location: location
}
dependsOn: [
loadBalancers_name
]
}
dev-web01-vm.bicep
param location string = resourceGroup().location
var virtualNetworkName = 'dev-dev-VNET'
var loadBalancerName = 'dev-web01-LB'
var subnetName = 'dev-web-Net'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName)
resource dev_web01_VM_nic 'Microsoft.Network/networkInterfaces@2022-07-01' = {
name: 'dev-web01-vm-Nic'
location: location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
type: 'Microsoft.Network/networkInterfaces/ipConfigurations'
properties: {
privateIPAddress: '192.168.42.250'
privateIPAllocationMethod: 'Static'
subnet: {
id: subnetRef
}
primary: true
privateIPAddressVersion: 'IPv4'
loadBalancerBackendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool')
}
]
}
}
]
}
}
dev-web02-vm.bicep
param location string = resourceGroup().location
var virtualNetworkName = 'dev-dev-VNET'
var loadBalancerName = 'dev-web01-LB'
var subnetName = 'dev-web-Net'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName)
resource dev_web02_vm_nic 'Microsoft.Network/networkInterfaces@2022-07-01' = {
name: 'dev-web02-vm-Nic'
location: location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
type: 'Microsoft.Network/networkInterfaces/ipConfigurations'
properties: {
privateIPAddress: '192.168.42.251'
privateIPAllocationMethod: 'Static'
subnet: {
id: subnetRef
}
primary: true
privateIPAddressVersion: 'IPv4'
loadBalancerBackendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool')
}
]
}
}
]
}
}