functions/FrontDoor.ps1
function Get-SpqFrontDoor { Param( [parameter(Mandatory = $true)] [string] $ApplicationCode, [parameter(Mandatory = $true)] [string] $EnvironmentName, [parameter(Mandatory = $true)] [string] $Location, [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [string] $ExceptionGuid ) $frontDoorName = Get-SpqResourceName ` -ApplicationCode $ApplicationCode ` -EnvironmentName $EnvironmentName ` -UniqueNamePhrase $UniqueNamePhrase ` -ServiceTypeName "Microsoft.Network/frontDoors" $json = ' { "apiVersion": "2019-04-01", "type": "Microsoft.Network/frontDoors", "name": "' + $frontDoorName + '", "tags": {}, "location": "' + $Location + '", "properties": { "frontendEndpoints": [], "loadBalancingSettings": [], "healthProbeSettings": [], "backendPools": [], "routingRules": [] } } ' return ConvertFrom-Json $json } function Get-SpqFrontDoorFrontEndpoint { Param( [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [parameter(Mandatory = $true)] [object] $FrontDoor ) $frontDoorEndPointName = $FrontDoor.name + "-frontend" + $UniqueNamePhrase $json = ' { "name": "' + $frontDoorEndPointName + '", "properties": { "hostName": "' + $FrontDoor.name + '.azurefd.net", "sessionAffinityEnabledState": "Disabled" } } ' return ConvertFrom-Json $json } function Get-SpqFrontDoorLoadBalancingSetting { Param( [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [parameter(Mandatory = $true)] [object] $FrontDoor ) $frontDoorLoadBalancingSettingName = $FrontDoor.name + "-loadbalsett" + $UniqueNamePhrase $json = ' { "name": "' + $frontDoorLoadBalancingSettingName + '", "properties": { "sampleSize": 4, "successfulSamplesRequired": 2 } } ' return ConvertFrom-Json $json } function Get-SpqFrontDoorHealthProbeSetting { Param( [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [parameter(Mandatory = $true)] [object] $FrontDoor ) $frontDoorHealthProbeSettingName = $FrontDoor.name + "-healthprobesett" + $UniqueNamePhrase $json = ' { "name": "' + $frontDoorHealthProbeSettingName + '", "properties": { "path": "/", "protocol": "Http", "intervalInSeconds": 120 } } ' return ConvertFrom-Json $json } function Get-SpqFrontDoorBackend { Param( [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [parameter(Mandatory = $true)] [string] $BackendAddress ) $json = ' { "address": "' + $BackendAddress + '", "backendHostHeader": "' + $BackendAddress + '", "httpPort": 80, "httpsPort": 443, "weight": 50, "priority": 1, "enabledState": "Enabled" } ' return ConvertFrom-Json $json } function Get-SpqFrontDoorBackendPool { Param( [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [parameter(Mandatory = $true)] [object] $FrontDoor, [parameter(Mandatory = $true)] [object] $LoadBalancingSetting, [parameter(Mandatory = $true)] [object] $HealthProbeSetting ) $frontDoorBackendPoolName = $FrontDoor.name + "-backendpool" + $UniqueNamePhrase $json = ' { "name": "' + $frontDoorBackendPoolName + '", "properties": { "backends": [ ], "loadBalancingSettings": { "id": "[resourceId(''Microsoft.Network/frontDoors/loadBalancingSettings'', ''' + $FrontDoor.name + ''', ''' + $LoadBalancingSetting.name + ''')]" }, "healthProbeSettings": { "id": "[resourceId(''Microsoft.Network/frontDoors/healthProbeSettings'', ''' + $FrontDoor.name + ''', ''' + $HealthProbeSetting.name + ''')]" } } } ' return ConvertFrom-Json $json } function Get-SpqFrontDoorRoutingRule { Param( [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null, [parameter(Mandatory = $true)] [object] $FrontDoor, [parameter(Mandatory = $true)] [object] $BackendPool, [parameter(Mandatory = $true)] [object] $FrontendEndpoint ) $frontDoorRoutingRuleName = $FrontDoor.name + "-routingRule" + $UniqueNamePhrase $json = ' { "name": "' + $frontDoorRoutingRuleName + '", "properties": { "frontendEndpoints": [ { "id": "[resourceId(''Microsoft.Network/frontDoors/frontendEndpoints'', ''' + $FrontDoor.name + ''', ''' + $FrontendEndpoint.name + ''')]" } ], "acceptedProtocols": [ "Http", "Https" ], "patternsToMatch": [ "/*" ], "routeConfiguration": { "@odata.type": "#Microsoft.Azure.FrontDoor.Models.FrontdoorForwardingConfiguration", "forwardingProtocol": "MatchRequest", "backendPool": { "id": "[resourceId(''Microsoft.Network/frontDoors/backendPools'', ''' + $FrontDoor.name + ''', ''' + $BackendPool.name + ''')]" } }, "enabledState": "Enabled" } } ' return ConvertFrom-Json $json } |