Help us understand the problem. What is going on with this article?

AWS EC2オートスケーリングで新しいインスタンスの準備ができるまでアタッチを待機させるには

More than 1 year has passed since last update.

結論

ライフサイクルフックを設定する。

概要

オートスケーリングによってALBにWebアプリサーバのEC2インスタンスが追加された時、一時的に一部のリクエストが502 Bad Gatewayなどを返す現象が発生する場合があります。

おそらく新しいインスタンスのソフトウェアの起動などの準備ができる前にALBにアタッチされてしまうのが原因だろうな。ということで、インスタンスが起動してからALBにアタッチするまでに待ち時間を入れる方法がないか調べてみました。

Auto Scalingグループの待機時間設定

それっぽい設定として、Auto Scalingグループの「デフォルトのクールダウン」と「ヘルスチェックの猶予期間」というのがありますが、これらは目的のものとは違いました。まずはこの2つの設定の意味について。

デフォルトのクールダウン

インスタンスを起動、追加している最中に、さらにインスタンスが追加されてしまうことがないようにするための待ち時間。デフォルトは5分。

ヘルスチェックの猶予期間

インスタンスを起動、追加している最中に、Unhealthyと判定されて起動したばかりのインスタンスが削除されしまうことがなようにすための待ち時間。デフォルトは5分。

ということで期待したものと違いましたね。正解としては「ライフサイクルフック」を追加することで、インスタンス起動後に一定時間待機させることができました。

ライフサイクルフックでALBへのアタッチを待機

コンソールのAuto Scalingグループの「ライフサイクルフック」タブを開き、「ライフサイクルフックの作成」をクリックします。次のような設定で作成します。

EC2_Management_Console.png

ライフサイクルフックタイプ
インスタンスの作成
ハートビートのタイムアウト
120(待機時間秒数)
デフォルトの結果
CONTINUE

この設定を入れると、スケールアウトで新しいEC2インスタンスが起動した後、2分間待機してからALBにアタッチされるようになります。

miyamae
ロードバイク通勤のRubyプログラマで、伊豆ダイバー。
https://bitarts.jp/
ragru
Webメディア構築CMS「Clipkit(クリップキット)」を開発。コンテンツマーケティングのご相談から、システム構築、運用までサポート。
https://ragru.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away