この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
概要
AutoScalingを使っている人なら心当たりあるかと思います、AutoScalingでスケールインが発生する時にEC2インスタンスが自動的にTerminateされます。Terminate対象のインスタンスで何か処理が行われていたとしても、テスト段階で不本意としてもスケールインのタイミングで強制的にシャットダウンがかかってしまいます。実際にAutoScaling Groupに対してスケールイン保護機能が付いています。
設定方法
Scaling-Groupを作成するときに、Step4でScaling Policiesを設定するときに、下記の図の通りに、「Instance scale-in protection」にチェックを付けると、スケーリンググループに作成したすべてのインスタンスは自動的にスケールイン保護されます。
作成が完了すると、Auto Scaling Groupの「Advanced configuration」から確認できます。この設定はあとから変更できます。
また、「Instance management」タブの[Actions]ボタンを押すと、選択したインスタンスに対して、スケールイン保護の有効/無効化することができます。
スケールイン保護と解除を試してみる
検証のために、手動で「Desired Capacity」を1から0に減らしてみた。これまでのAutoScalingの挙動通りであれば、この操作によりEC2インスタンスがTerminateされますが、スケールイン保護のインスタンスであれば、Terminateの動作がキャンセルれさ、スケールイン保護を手動で解除すると、自動的にスケールインが発生し、Terminateできたことを検証済みです。具体的には以下の図の通りにご確認ください。
結論
1、スケールイン保護の場合、スケールインイベントのStatusがCancelledになり、即時にTerminateが防止できます。理由欄には以下のメッセージが表示されることです。
Could not scale to desired capacity because all remaining instances are protected from scale-in.
2、スケールイン保護でTerminate対象のインスタンスで何か処理が行われている場合、ちゃんと手で確認してから終了すればいけることになります。ですので、もしバッチ用のEC2をAuto Scalingで起動する場合など、このオプションを有効活用できるかと思っております。