[新機能]Auto Scalingにスケールインを防止するオプション付与できるようになりました!

2015.12.08

AutoScalingの新機能発表

AWS AutoScalingでは、負荷状況や時間に応じてEC2インスタンスを自動的に起動・停止することができます。AutoScalingに本日新しい機能が追加されました。「Protect Instances from Termination by Auto Scaling」というタイトルで発表されています。

AutoScalingを利用したことがある方なら心当たりあるかと思いますが、AWSのAuto Scalingでは、スケールイン時にEC2インスタンスが自動的に、そして強制的にTerminateされます。Terminate対象のインスタンスで何か処理が行われていたとしても、スケールインのタイミングでぶった切られて強制的にシャットダウンがかかってしまいます。 *1

今回のアップデートでは、AutoScaling Groupに対してスケールインを防ぐことができる機能が追加されました。どういった挙動をするのか、早速見ていきましょう

設定方法

今回追加された設定変更は、Auto Scaling Groupの作成時と更新時に変更が可能です。

新しく「Instance Protection」という項目が追加されていうるのがわかると思います。こちらにカーソルを合わせると「Protect From Scale In」という項目が選択できるようになりますので、選択してそのまま作成します。

EC2_Management_Console

作成が完了すると、Auto Scaling Groupの設定画面から確認できます。この設定はあとから変更可能です。

EC2_Management_Console

また、Auto Scaling Groupの[Instances]タブには、そのEC2インスタンスがプロテクトされているかどうかが表示されています。

EC2_Management_Console

このタブの[Actions]ボタンを押すと、インスタンスごとにこの設定を有効/無効化することもできます。

EC2_Management_Console

試してみる

今回は手動でDesired Capacity(AutoScalingで起動するインスタンス数)を1から0に減らしましてみました。これまでのAutoScalingの挙動通りであれば、この操作によりEC2インスタンスがTerminateされます。今回はどうでしょうか。

EC2_Management_Console

スケールインイベントのStatusがCancelledになりました。理由欄には以下のメッセージが表示されていました。

Could not scale to desired capacity because all remaining instances are protected from scale-in.

つまり、1台から0台にしようとした際に全てのEC2 InstanceがProtectedだったため、スケールインが実施できなかったということです。例えばあるAuto Scaling Group配下に2台のEC2があり、1台がProtected、もう1台はNot ProtectedなEC2 Instanceだった場合は、Not ProtectedなEC2 Instanceのほうが停止されることになります。

ちなみに、一度ProtectedになったEC2 Instanceは、Protectionが有効になった状態のままではAuto Scaling側からは停止させることができません。不要になった際には、Protectionを外すか、EC2の[Stop]を選択して停止しましょう。なお、[Stop]が完了すると、通常のAuto Scalingと同様にインスタンスはTerminatedになります。

EC2_Management_Console

注意事項

Instance Protectionの設定はAuto Scaling Groupごとに行いますが、実際に設定されているかどうかはEC2 Instance単位で判別されています。この設定を[Protect from Scale In]をEnabledにした後に起動したEC2インスタンスのみが、Scale Inから除外されることになりますので注意して下さい。ですので、以前から存在しているAuto Scaling Groupに対してこの設定を実施する際には、既存のEC2インスタンスにはこの設定が反映されません。

逆に、この設定をDisabledにした後に起動したEC2 InstanceにはProtectかかりませんので、そちらも注意が必要です。

まとめ

Auto Scalingの新機能により、スケールインイベントが発生すると強制的にTerminateされるのを割けることができるようになりました。例えばバッチ用のEC2としてAuto Scalingを起動している場合など、このオプションを有効活用できるかもしれませんのでご検討下さい。

筆者的には、「Protected From」にScale In以外の動作も設定できるようになりそうなので、更なるアップデートを期待しています。

脚注

  1. LifeCycle Eventを利用すればその制御は可能です。こちらのブログを参照下さい。