Auto Scaling を使用すると、事前に定義された条件に基づいて複数のEC2インスタンスを起動・停止することができます。インスタンスをスケールアウトさせることによって、必要な処理能力が増加した場合でも、要求されるレベルのパフォーマンスを維持することができます。スケールインさせることで、負荷が低い期間にかかるコストを抑えることができます。
本日より、Auto Scalingグループがスケールインを実行する際に、削除するインスタンスを制御できる機能を追加しました。これまでは、特別なアクションを行わなければ、Auto Scalingグループのどのインスタンスでも削除されました。本日から利用可能になった新しい機能により、特定のインスタンスが削除されないよう保護することができます。
いくつかの理由でこのような制御を行いたい場合があるでしょう。1つ目は、インスタンスが長時間の処理を実行しているような場合です(SQSキューからPullされたメッセージの処理かもしれません)。インスタンスが削除されないようにすることで、無駄な処理を避けることができます。2つ目は、インスタンスがAuto Scalingグループの中で特別な処理を行っているような場合です。Hadoopクラスタのマスタノードであったり、インスタンスのグループの実行状態を示す”カナリア”の役割をする場合などです。
スケールイン時のインスタンスの削除保護
Auto Scalingのコンソールでインスタンスを選択し、操作メニューからインスタンスの保護を選択することで、簡単にインスタンスを削除から保護することができます。
そして、内容を確認します。
コンソールで、Auto Scalingグループ中のインスタンスごとに削除保護のステータスを確認できます。
インスタンスの保護ステータス変更は、SetInstanceProtection 関数を呼び出すことでも行えます。長時間実行されているプロセスやキュードリブンなワーカープロセスをスケールイン時の削除から保護するために、次のようにアプリケーションをセットアップします(コードは擬似的なものです)。
PHP
while (true)
{
SetInstanceProtection(False);
Work = GetNextWorkUnit();
SetInstanceProtection(True);
ProcessWorkUnit(Work);
SetInstanceProtection(False);
}
Auto Scalingグループの中で、最低1つのインスタンスは保護しないままにしておくケースが多いでしょう。全てのインスタンスが保護される設定の場合、スケールインアクションは実行されません。さらに詳細を知りたい場合は、Auto Scaling Lifecycle を参照してください。
この新機能は既に利用可能で、本日から使用いただけます!
— Jeff;
PS - AWS SDKs は12月8日にアップデートされます。このアップデート後から SetInstanceProtection 関数をお使いいただけます。
翻訳:国政 丈力 (原文:https://aws.amazon.com/jp/blogs/aws/new-instance-protection-for-auto-scaling/)