public/EC2/Switch-AWSHelperInstanceInLoadBalancers.ps1
<# .EXAMPLE Switch-AWSHelperInstanceInLoadBalancerss -CurrentInstanceID i-0210e383e3d655d40 -ReplacementInstanceID i-0085c230708198b6f -Region $Region -confirm:$false -verbose Switch-AWSHelperInstanceInLoadBalancers -CurrentInstanceID i-0085c230708198b6f -ReplacementInstanceID i-0210e383e3d655d40 -Region $Region -confirm:$false -verbose #> function Switch-AWSHelperInstanceInLoadBalancers{ [CmdletBinding(SupportsShouldProcess=$true)] param( [Parameter(Mandatory=$true)] [string]$CurrentInstanceID, [Parameter(Mandatory=$true)] [string]$ReplacementInstanceID, [Parameter(Mandatory=$true)] [string]$Region ) $ELB2TargetGroups = Get-ELB2TargetGroup -Region $Region | select *, @{L="Targets";E={Get-ELB2TargetHealth -TargetGroupArn $_.TargetGroupArn -region $Region}} $ELB2TargetGroupsWithCurrentInstance = $ELB2TargetGroups | ?{$_.targets.Target.id -contains $CurrentInstanceID} foreach($ELB2TargetGroup in $ELB2TargetGroupsWithCurrentInstance){ $CurrentInstanceTarget = $ELB2TargetGroup.targets.target | ?{$_.id -eq $CurrentInstanceID} Write-Verbose "Deregistering $CurrentInstanceID from $($ELB2TargetGroup.TargetGroupName)" Unregister-ELB2Target -TargetGroupArn $ELB2TargetGroup.TargetGroupArn -Target $CurrentInstanceTarget -region $Region Write-Verbose "Registering $ReplacementInstanceID from $($ELB2TargetGroup.TargetGroupName)" Register-ELB2Target -TargetGroupArn $ELB2TargetGroup.TargetGroupArn -Target @{Id=$ReplacementInstanceID;Port=$CurrentInstanceTarget.port} -region $Region } $ELBsWithCurrentInstance = Get-ELBLoadBalancer -Region $Region | ?{$_.Instances.instanceid -contains $CurrentInstanceID} foreach($ELB in $ELBsWithCurrentInstance){ Write-Verbose "Deregistering $CurrentInstanceID from $($ELB.LoadBalancerName)" Remove-ELBInstanceFromLoadBalancer -Instance $CurrentInstanceID -LoadBalancerName $ELB.LoadBalancerName -region $Region Write-Verbose "Registering $ReplacementInstanceID with $($ELB.LoadBalancerName)" Register-ELBInstanceWithLoadBalancer -Instance $ReplacementInstanceID -LoadBalancerName $ELB.LoadBalancerName -region $Region | Out-Null } } |