ALBからEC2を切り離す時に使う aws elbv2 deregister-targets
のコマンド、大量のアクセスがあってもエラーを返すことなく切り離すことができると思っていました。
① EC2をALBより切り離し
aws elbv2 deregister-targets --target-group-arn target_group_arn --targets Id=i-xxxxxx,Port=80
②ステータス確認
healthy
-> draining
-> unused
と状態が遷移するのを待つ。
③ EC2をALBに登録
aws elbv2 describe-target-health --target-group-arn target_group_arn --targets Id=i-xxxxxx,Port=80
何度もテストしましたが①の部分で 502
ステータスが返ってくることがありました。複数のEC2をALBにぶら下げてあれば、即時リトライすれば別のEC2に振り分けられる可能性が高いので大きな問題にならないかもしれないですが。。
ALBでなくELB(Classic Load Balancer)ではノードの入れ替えがGracefulで行われるとサポートから聞いていたので、この処理もGraceful当然という個人的な先入観がありました。もし同じ先入観持っている人がいたらと思ったので書いておきます。
2017/09/11追記
AWSサポートに問い合わせたら、ログの収集の要求が来ました。ということは仕様ではないのかな。しかし、ログ収集しようと同じテストスクリプト実行しても再現しない。というのも、もともとかなり頻度低い(特定タイミングかつ数万に1件程度とか)ことと、ALBの502エラーは切り離しタイミング以外でも時々発生する(こちらもかなりの低頻度数千万に1件とか)ので、即時リトライで様子見ることにしようと思います。