forked from robotechredmond/Azure-PowerShell-Snippets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AzureRM - Build MultiVIP Load Balancer.ps1
144 lines (101 loc) · 3.28 KB
/
AzureRM - Build MultiVIP Load Balancer.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Sign-in to Azure via Azure Resource Manager
Login-AzureRmAccount
# Select Azure Subscription
$subscriptionId =
( Get-AzureRmSubscription |
Out-GridView `
-Title "Select an Azure Subscription ..." `
-PassThru
).SubscriptionId
Select-AzureRmSubscription `
-SubscriptionId $subscriptionId
# If needed, register ARM core resource providers
Register-AzureRmResourceProvider `
-ProviderNamespace Microsoft.Compute
Register-AzureRmResourceProvider `
-ProviderNamespace Microsoft.Storage
Register-AzureRmResourceProvider `
-ProviderNamespace Microsoft.Network
Get-AzureRmResourceProvider |
Select-Object `
-Property ProviderNamespace `
-ExpandProperty ResourceTypes
# Select Azure Resource Group in which to provision the Load Balancer
$rgName =
( Get-AzureRmResourceGroup |
Out-GridView `
-Title "Select an Azure Resource Group ..." `
-PassThru
).ResourceGroupName
# Reserve Public IP Addresses
$pipCount = 5
$pips = @()
$pipName = 'lbpip'
for ($i = 1; $i -le $pipCount; $i++)
{
$pips +=
New-AzureRmPublicIpAddress `
-Name "${pipName}${i}" `
-ResourceGroupName $rgName `
-Location $location `
-AllocationMethod Static
}
# Build LB Front-End IP Configurations
$feips = @()
$feipName = 'lbfeip'
for ($i = 1; $i -le $pipCount; $i++)
{
$feips +=
New-AzureRmLoadBalancerFrontendIpConfig `
-Name "${feipName}${i}" `
-PublicIpAddress $pips[$i-1]
}
# Build LB Back-End Pool
$beipName = 'lbbeip'
$beip =
New-AzureRmLoadBalancerBackendAddressPoolConfig `
-Name $beipName
# Build LB Probes and Rules
$probeName = "lbprobe"
$probes = @()
$ruleName = "lbrule"
$rules = @()
$fePort = 80
$bePortStart = 80
for ($i = 1; $i -le $pipCount; $i++)
{
$bePort = $bePortStart + $i - 1
$probes +=
New-AzureRmLoadBalancerProbeConfig `
-Name "${probeName}${i}" `
-RequestPath "/" `
-Protocol Http `
-Port $bePort `
-IntervalInSeconds 15 `
-ProbeCount 2
}
for ($i = 1; $i -le $pipCount; $i++)
{
$bePort = $bePortStart + $i - 1
$rules +=
New-AzureRmLoadBalancerRuleConfig `
-Name "${ruleName}${i}" `
-FrontendIpConfigurationId $feips[$i-1].Id `
-BackendAddressPoolId $beip.Id `
-ProbeId $probes[$i-1].Id `
-Protocol Tcp `
-FrontendPort 80 `
-BackendPort $bePort `
-LoadDistribution Default
}
# Provision Load Balancer
$lbName = 'lb1'
$lb =
New-AzureRmLoadBalancer `
-Name $lbName `
-ResourceGroupName $rgName `
-Location $location `
-FrontendIpConfiguration $feips `
-BackendAddressPool $beip `
-Probe $probes `
-LoadBalancingRule $rules