説明
WINDOWS on EC2に紐づけられているELBからEC2を付け外す、もしくは付け戻すスクリプトをpowershellで書きました。
スクリプトのパラメータ指定で付け外し か 付け戻しを指定出来ます。
実現したい事
自動で定期リブートされるWINサーバで、stop時に全てのELBから自動で付け外したい。
上記に加えて、開始時に元のELBに自動で付け戻したい。
ソースコード
regELB.ps1 param ( [switch]$detach, [switch]$attach ) $savelbfile='C:Userselbnamefile'; $logfile='C:UsersregELB.log' $awsparam=@{ Region = "ap-northeast-1" AccessKey = "AKIXXXXXXXXXXXXXXXXX" SecretKey = "YYYYYYYYYYYYYYYYYYYYYY" } try { $startdate=Get-Date; Write-Output "-----------------" >>$logfile; Write-Output "Start[$startdate]" >>$logfile; #parameter check if(!($detach -xor $attach)) { Write-Output "Parameter error. Parameter should be used with -detach or -attach exclusively" >>$logfile; exit 1; } import-module "C:Program Files (x86)AWS ToolsPowerShellAWSPowerShellAWSPowerShell.psd1" Initialize-AWSDefaults @awsparam >>$logfile; $InstanceId = (Invoke-WebRequest '169.254.169.254/latest/meta-data/instance-id' -UseBasicParsing).Content; $elbInstanceObj = New-Object Amazon.ElasticLoadBalancing.Model.Instance; $elbInstanceObj.InstanceId = $InstanceId; if($detach -eq $true) { Write-Output "detach route" >>$logfile echo $null > $savelbfile; $ELBs=Get-ELBLoadBalancer; foreach($ELB in $ELBs) { foreach($elbinstance in $ELB.Instances) { if($elbinstance.InstanceId -eq $InstanceId) { #save attached ELB name for register route Add-Content $savelbfile $ELB.LoadBalancerName; Remove-ELBInstanceFromLoadBalancer -LoadBalancerName $ELB.LoadBalancerName -Instances $elbInstanceObj -Force; } } } } else {# ($attach -eq $true) Write-Output "attach route" >>$logfile If(Test-Path -path $savelbfile) { $lines = @(Get-Content $savelbfile) } else { Write-Output "$savelbfile is not found" >>$logfile; exit 1; } foreach ($elbname in $lines) { Register-ELBInstanceWithLoadBalancer -LoadBalancerName $elbname -Instances $elbInstanceObj > $null; } } $enddate=Get-Date Write-Output "Normal END[$enddate]" >>$logfile exit 0; } catch { Write-Output $_ >>$logfile; $_=""; $enddate=Get-Date; Write-Output "Abnormal END[$enddate]" >>$logfile; exit 1; }
注意事項
WINDOWSのシャットダウンもしくはリブート時に実行させる為にWINDOWSのグループポリシー機能を利用する場合はIAM Roleが効かないようでした。
グループポリシーにスクリプト登録して使う場合は、上述のソースコードのように、アクセスキー・シークレットキーを直書きする必要があるようです(ハマりました・・・)。
■実行例(対象のWINサーバで手打ち実行)
・付け外し時
PS C:Users> C:UsersregELB.ps1 -detach
・付け戻し時
PS C:Users> C:UsersregELB.ps1 -attach
注:付け戻しは付け外しを行なった後にのみ有効です。