BeanstalkでAutoScalingとLoadBalancerを使用しているときに、EC2インスタンスがOutOfServiceになったら自動terminate/launchする方法
BeanstalkでAutoScalingとLoadBalancerを使用してEC2インスタンスを稼働する場合の話です。
例えばEC2でApache/Tomcatが動作させ、Tomcatが死んでELBのヘルスチェックで500番台のエラーが返るようになった時、LoadBalancerから異常インスタンスが外れ(OutOfService判定され、通信が届かなくなる)、そのインスタンスがterminateされ、新しいインスタンスが起動し、LoadBalancerに登録されるという動作になって欲しいです。しかし、通常の設定ではLoadBalancerから異常インスタンスが外れるのみで、いつまでたっても異常インスタンスは起動したままになります。
※当然ですがインスタンスを手動でterminateさせれば新しいインスタンスは自動起動します。
AWSのDiscussion Folumでも以前話題になっており、
https://forums.aws.amazon.com/thread.jspa?messageID=413103
これによるとAutoScalingの設定でヘルスチェックタイプがEC2かELBかによって動作が違うとのこと。
タイプがEC2ならばEC2インスタンスがrunningかそれ以外かを監視し、ELBならELBの生死確認に準拠するようです。
Beanstalkを使うとヘルスチェックタイプがEC2になってしまうため、前述のような動作になります。
Beanstalkの管理画面ではその設定を変更できないため、コマンドラインツールを使用して設定を変更する必要があります。
AWSの中の人の回答を参考に、この設定変更の手順をまとめました。
AWS Command Line InterfaceがプリインストールされているAmazonLinuxのインスタンス内での作業を想定しています。
credential.txt を用意する(ファイル名はなんでもいい)
AWSAccessKeyId=AKIAXXXXXXXXXX
AWSSecretKey=xxxxxxxxx
環境変数AWS_CREDENTIAL_FILEにそのファイルパスをセット
$ export AWS_CREDENTIAL_FILE=./credential.txt
Beanstalk管理画面のConfiguration>InstancesからSecurityGroup名を確認する
EC2 security groups: awseb-e-abcdefghi-stack-AWSEBSecurityGroup-ABCDEFGHIJKLM
これの前半部分の-AWSEBまでを使ってAutoScalingGroupを探す。
$ as-describe-auto-scaling-groups --region ap-northeast-1|grep awseb-e-abcdefghi-stack-AWSEB|head -1
AUTO-SCALING-GROUP awseb-e-abcdefghi-stack-AWSEBAutoScalingGroup-XXXXXXXXXXX awseb-e-abcdefghi-stack-AWSEBAutoScalingLaunchConfiguration-YYYYYYYYYY ap-northeast-1c,ap-northeast-1a awseb-e-g-AWSEBLoa-ZZZZZZZZZZ 2 4 2 Default
⇒AutoScalingGroupはawseb-e-abcdefghi-stack-AWSEBAutoScalingGroup-XXXXXXXXXXXであることがわかります。
追記: EC2管理画面で該当LoadBalancerに登録されているインスタンスのTagにAutoScalingGroupの名前が載っているので、それを利用した方がたぶん早いです。お好みで。
ヘルスチェックタイプの変更
$ as-update-auto-scaling-group awseb-e-abcdefghi-stack-AWSEBAutoScalingGroup-XXXXXXXXXXX --region ap-northeast-1 --health-check-type ELB --grace-period 600
OK-Updated AutoScalingGroup
--grace-period 600はAutoScalingのヘルスチェック開始までの秒数。
これでAutoScaling側のヘルスチェックがELBと連動するようになりました。
---- 修正 ----
ロードバランサーに追加中(OutOfService)にAutoScalingのヘルスチェックが行われてしまうとまずいので、AutoScalingのヘルスチェック周期ヘルスチェック開始までの秒数である --grace-period 60 を --grace-period 600 に変更。ELBのヘルスチェック方法に応じて調整してください。
----
なんか見づらかったのでコマンドと実行結果の枠を分ける。
Author And Source
この問題について(BeanstalkでAutoScalingとLoadBalancerを使用しているときに、EC2インスタンスがOutOfServiceになったら自動terminate/launchする方法), 我々は、より多くの情報をここで見つけました https://qiita.com/ApplePedlar/items/93f419b1370d46c890c0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .