ターゲットグループに所属したままのEC2インスタンスを削除すると、ターゲットグループ配下にゴミとして残りdescribe-target-healthの結果に削除済みのインスタンスが入ってくることがある。
1台起動、1台停止、1台削除した状態で以下のコマンドを実行すると、
aws elbv2 describe-target-health --target-group-arn [ターゲットグループのARN]
このような結果が返ってくることがある。
ID: i-xxxxxxxxxxxxxxxxx / state: healthy / reason: undefined # 起動しているインスタンス
ID: i-yyyyyyyyyyyyyyyyy / state: unused / reason: Target.InvalidState # 停止しているインスタンス
ID: i-zzzzzzzzzzzzzzzzz / state: unused / reason: Target.InvalidState # 削除済みのインスタンス
削除済みのインスタンスはいずれガベコレされるものと思われるが、それがいつかは分からない。
しかも、このゾンビが停止中のインスタンスと区別が付かない。
実際、ここを見ると、Target.InvalidStateになるのは、停止しているインスタンスまたは削除済みのインスタンスである。
http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-target-health.html
性質が悪いのは、このインスタンスがAWSコンソールから見えないこと。
EC2のターゲットグループページからインスタンスタブを開いても、一覧に表示されるのはi-xxxxxxxxxxxxxxxxxとi-yyyyyyyyyyyyyyyyyの2つだけである。
どうやらCLIから削除するしかないらしい。
これを実行することで、このゾンビを駆除できる。
aws elbv2 deregister-targets --target-group-arn [ターゲットグループのARN] --targets Id=i-zzzzzzzzzzzzzzzzz,Port=80
このコマンドの実行直後に取得すると次のような結果が返り、削除済みのインスタンスは区別できる状態となる。
ID: i-xxxxxxxxxxxxxxxxx / state: healthy / reason: undefined
ID: i-yyyyyyyyyyyyyyyyy / state: unused / reason: Target.InvalidState
ID: i-zzzzzzzzzzzzzzzzz / state: draining / reason: Target.DeregistrationInProgress
しばらく時間を置くと次のように完全に削除されるようだ。
ID: i-xxxxxxxxxxxxxxxxx / state: healthy / reason: undefined
ID: i-yyyyyyyyyyyyyyyyy / state: unused / reason: Target.InvalidState