EC2 Auto Scaling の「ヘルスチェックの猶予期間」と「インスタンスのウォームアップ期間」の違いを教えてください

EC2 Auto Scaling で起動したインスタンスの内部準備が整う前にエラーが発生する状況を回避するための設定をご紹介します。
2022.12.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

この記事は アノテーション株式会社 AWS Technical Support Advent Calendar 2022 | Advent Calendar 2022 - Qiita 15日目の記事です。

困っていた内容

EC2 Auto Scaling で新規起動されるインスタンスの内部的な準備が整う前にヘルスチェックが実施され、エラーとなってしまいます。これを回避できそうな設定項目に「ヘルスチェックの猶予期間」と「インスタンスのウォームアップ期間」がありますが、違いが分かりません。それぞれの使い分け方を教えてください。

「ヘルスチェックの猶予期間」とは

Auto Scaling グループにインスタンスが起動(もしくはアタッチ)されてから Auto Scaling グループのヘルスチェックが行われ、状態が判定されるまでの猶予期間です。

AWS ドキュメントより抜粋:

猶予期間は、新しく起動されたインスタンスが InService 状態になった後で直ちにこれらのヘルスチェックに合格しなかった場合に、Amazon EC2 Auto Scaling がそれらを異常としてマークして、不必要に終了することがないようにします。

ユースケース

Auto Scaling でインスタンスの起動時にユーザーデータスクリプトを実行してアプリケーションのインストールを行っている場合などに有効です。
インスタンスの内部的な準備が整う前に Auto Scaling のヘルスチェックが実施されてエラーとなり、起動後すぐにインスタンスの入れ替えが行われてしまうようなケースでは、この「ヘルスチェックの猶予期間」を大きくすることで改善が期待できます。

「インスタンスのウォームアップ期間」とは

新規インスタンスの Auto Scaling のヘルスチェックが成功して InService になってから、Auto Scaling グループのメトリクス収集の対象になるまでの期間です。

AWS ドキュメントより抜粋:

インスタンスのデフォルトウォームアップが有効化されていない場合、各インスタンスは、その状態が InService になると同時に、集計されたメトリクスへの使用状況データの提供を開始しますが、インスタンスのデフォルトウォームアップを有効にすると、インスタンスは、使用状況データを提供する前にウォームアップを完了できるようになります。

ユースケース

Auto Scaling グループのメトリクスを監視して動的スケーリングポリシーを設定している時などに有効です。
例えば起動されたばかりのインスタンスの内部準備が整う前に平均CPU使用率の集計対象となってしまい、意図しないスケーリングが行われてしまうようなケースでは、この「ウォームアップ期間」を大きく設定することで新規インスタンスがメトリクスの集計対象に入るタイミングを遅らせ、回避することができます。

補足

Auto Scaling グループでインスタンスが起動される時の流れは、ざっくりと以下のような順番になります。

1. Auto Scaling グループで新しいインスタンスが起動され、インスタンスのステータスチェック OK となる。
2. Auto Scaling グループのヘルスチェックが行われ、合格すれば InService となる。
(このタイミングを「ヘルスチェックの猶予期間」で延ばせる)
3. InService となった新規インスタンスが、Auto Scaling グループのメトリクス集計対象になる。
(このタイミングを「インスタンスのウォームアップ期間」で延ばせる)

なお Auto Scaling と ELB を組み合わせているケースでは、上記 1. のあとに「ELB のターゲットグループに登録され、ELB のヘルスチェック対象になる」という行程が入ります。これは Auto Scaling グループ側ではなく ELB 側で行われるため、2. や 3. の期間を調整しても ELB 側の動作を遅らせることはできません。

弊社によくいただくお問い合わせで「インスタンス側の内部準備が整う前に ELB からトラフィックが送信されるのを回避したい」というご要望がありますが、これを実現するには Auto Scaling のライフサイクルフックを設定する必要があります。
こちらについては下記の記事で詳しく解説しておりますので、ぜひ参考にしてみてください。

ELB + EC2 Auto Scaling の構成で、スケール時に毎回ヘルスチェックエラーが発生します。原因と対処法を教えてください | DevelopersIO

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。