AutoScalingでEC2のDetach/StandByができない場合の対処法【cloudpack 大阪 BLOG】

はじめに

AutoScalingを設定していて手動で設定を変更していると、たまに台数がずれるなどして最低台数の制限に引っかかりAutoScalingGroupからEC2をDetachやStandByにできない場合があります。スケーリングポリシーに基づいてインスタンスの増減が実施されていればほぼ発生しないと思いますが、メンテナンスやインスタンスの入れ替えなどを手動で実施すると発生する場合があります。今回はこうしたケースの対処法を紹介しようと思います。

Detachできない状態

AutoScalingGroupには3台紐付いていますが、DesiredとMinがそれぞれ2台となっています。
f:id:cloudfish:20170303154435p:plain

1台をDetachしてAutoScalingGroupを2台にしたいのですが、この状態でDetachを実施すると、
Desiredが2から1に変わりMinを下回ることからエラーとなります。
f:id:cloudfish:20170307100751p:plain

対応方法

Desiredを2から3に変更した後にDetachできればいいのですが、普通に変更するとインスタンスが新規に追加されてしまいます。
対応としては以下のように「Suspended Processes」でLaunchを設定します。こうすることでAutoScalignGroupの設定を変更しても新規にインスタンスの追加が実行されません。この状態にしてからDesiredを3に変更します。
f:id:cloudfish:20170307101316p:plain

正しく設定が完了すれば以下のようにAutoScalignGroupのインスタンス数が変わらずDesiredが3になります。
この状態で再度、対象インスタンスをDetachすると問題なく実行できるはずです。
f:id:cloudfish:20170307101420p:plain

Detach完了後です。正常にDetachが完了しました。
f:id:cloudfish:20170303154600p:plain

AutoScalingは便利な機能ですが、手動でインスタンスを制御しようとすると思わぬ動作をしてインスタンスの削除や追加が実行されます。追加はともかく削除は困ることが多いと思いますので手動で何かをする際は事前にしっかりと検証したほうがいいと思います。