Private/New-CustomAzLoadBalancer.ps1
function Global:New-CustomAzLoadBalancer { [CmdletBinding()] <# .SYNOPSIS ... .DESCRIPTION ... #> param( [Parameter(Mandatory = $true)] [string] $ResourceGroupName, [Parameter(Mandatory = $true)] [string] $ResourceLocation, [Parameter(Mandatory = $true)] [string] $LoadBalancerName, [Parameter(Mandatory = $true)] $VMScaleSet, [Parameter(Mandatory = $false)] [string] $FrontEndIpConfigName = "$($VMScaleSet.Name)FrontEnd", [Parameter(Mandatory = $false)] [string] $BackendPoolName = "LB-Backend", [Parameter(Mandatory = $true)] [string] $VirtualNetworkName, [Parameter(Mandatory = $true)] [string] $SubnetName, [Parameter(Mandatory = $false)] [string] $PrivateIpAddress, [Parameter(Mandatory = $false)] [string] $PrivateIpAddressVersion, [Parameter(Mandatory = $false)] [string] $PublicIpAddressName, [Parameter(Mandatory = $false)] [string] $DomainNameLabel, [HashTable] $Tags ) process { $loadBalancer = Get-AzLoadBalancer -ResourceGroupName $ResourceGroupName -Name $LoadBalancerName -ErrorAction SilentlyContinue if ($loadBalancer){ Write-CustomHost -Message "Load Balancer $LoadBalancerName already exists." return } Write-CustomHost -Message "Creating LoadBalancer $LoadBalancerName..." $loadBalancer = New-AzLoadBalancer -Name $LoadBalancerName -ResourceGroupName $ResourceGroupName -Location $ResourceLocation Write-CustomHost -Message "Getting VirtualNetwork $VirtualNetworkName..." $vnet = Get-AzVirtualNetwork -Name $VirtualNetworkName -ResourceGroupName $ResourceGroupName Write-CustomHost -Message "Getting SubnetConfiguration $SubnetName..." $subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet $frontEndArgs = @{ LoadBalancer = $loadBalancer Name = $FrontEndIpConfigName Subnet = $subnet } Write-CustomHost -Message "Adding FrontEndConfiguration to LoadBalancer $LoadBalancerName..." if (-not([string]::IsNullOrEmpty($PrivateIpAddress))) { $frontEndArgs.Add("PrivateIpAddress", $PrivateIpAddress) } if (-not([string]::IsNullOrEmpty($PrivateIpAddressVersion))) { $frontEndArgs.Add("PrivateIpAddressVersion", $PrivateIpAddressVersion) } $loadBalancer = Add-AzLoadBalancerFrontendIpConfig @frontEndArgs if (-not([string]::IsNullOrEmpty($PublicIpAddressName))) { # Get or create PublicIP $publicIP = Get-AzPublicIpAddress -ResourceGroupName $ResourceGroupName -Name $PublicIpAddressName -ErrorAction SilentlyContinue if (-not($publicIP)) { $publicIP = New-AzPublicIpAddress -ResourceGroupName $ResourceGroupName -Name $PublicIpAddressName -Location $ResourceLocation -DomainNameLabel $DomainNameLabel -AllocationMethod Dynamic } $frontEndArgs = @{ LoadBalancer = $loadBalancer Name = "$FrontEndIpConfigName-public" PublicIpAddress = $publicIP } Write-CustomHost -Message "Adding PublicIP-FrontEndConfiguration to LoadBalancer $LoadBalancerName..." $loadBalancer = Add-AzLoadBalancerFrontendIpConfig @frontEndArgs } $backendpool = Add-AzLoadBalancerBackendAddressPoolConfig -LoadBalancer $loadBalancer -Name $BackendPoolName #Set-AzLoadBalancer -LoadBalancer $loadBalancer | Out-Null Write-CustomHost -Message "Updating Load Balancer $LoadBalancerName..." $loadBalancer = Set-AzLoadBalancer -LoadBalancer $loadBalancer Write-CustomHost -Message "Scale Set needs to be stopped to be able to update the IP Configuration." Write-CustomHost -Message "Stopping Scale Set..." Stop-AzVmss -ResourceGroupName $ResourceGroupName -VMScaleSetName $VMScaleSet.Name -Force | Out-Null Write-CustomHost -Message "Creating IPConfiguration..." # IPConfig for Scale Set $ipConfig = New-AzVmssIpConfig ` -Name "myIPConfig" ` -LoadBalancerBackendAddressPoolsId $loadBalancer.BackendAddressPools[0].Id ` -SubnetId $vnet.Subnets[0].Id Write-CustomHost -Message "Adding IPConfiguration to Scale Set $($VMScaleSet.Name)..." $VMScaleSet = Add-AzVmssNetworkInterfaceConfiguration -VirtualMachineScaleSet $VMScaleSet -IpConfiguration $ipConfig -Name "Test" Write-CustomHost -Message "Updating Scale Set $($VMScaleSet.Name)..." Update-AzVmss -ResourceGroupName $ResourceGroupName -VirtualMachineScaleSet $VMScaleSet -VMScaleSetName $VMScaleSet.Name | Out-Null # Add Health Probes # For Each Port in Environments; Protocol TCP, INterval 15 seconds, UNhealthy Threshold = 2 Write-CustomHost -Message "Starting Scale Set $($VMScaleSet.Name)..." Start-AzVmss -ResourceGroupName $ResourceGroupName -VMScaleSetName $VMScaleSet.Name | Out-Null } } |