AWSには自動スケーリンググループがあり、現時点では手動でスケールアップとスケールダウンを行っています。現在、ASGは、すべての製品サーバーが含まれている1つのターゲットグループに接続されています。
ASGを使用する前に、ターゲットグループコンソールから手動でサーバーをターゲットグループに追加および削除し、適切にドレインした後、ノードを登録解除します。私たちは非常にステートフルなアプリケーションを持っているので、登録解除の遅延は私たちにとって本当に重要です。
昨日、ASGインターフェイスを介して(特に、必要なインスタンスの数を減らすことで)スケールダウンすると、すべての接続が即座にドロップされ、ターゲットグループの5分のドレインポリシーを順守する代わりに、数百の接続が即座にドロップされました。
ASGに排水ポリシーを尊重するにはどうすればよいですか?
私はこれを試しました: アプリケーションLBと接続ドレインを使用したAWS ASG しかし、接続を「ドレイン」に設定せず、「終了:待機中」に設定するだけであり、私のヘルスチェックは正常なので、私はしません新しい接続やドレインを実際に停止していると考えます。
リンクされた回答 で説明されているように、まずASG Lifecycleフックが必要です。
Terminatingイベントが発生するたびに、Lambda関数を起動し、そのLambda インスタンスの登録を解除からderegister-targetsを使用したターゲットグループ。 Drainingフェーズに移動し、待機する必要がある限り待機します。インスタンスがドレインされたら、終了を続行します。
それが役に立てば幸い:)
ターゲットグループに設定された登録解除の遅延を待つ以外の追加のタスクを実行する必要がある場合、または登録解除の遅延が終了した後、インスタンスがしばらくの間稼働している必要がある場合を除き、上記は必要ありません。ターゲットグループの登録解除の遅延を確認してください
ASGがスケールインするとき(たとえば、必要に応じて必要な容量を下げることから)。関連付けられているクラシックロードバランサーまたはターゲットグループに対して登録解除呼び出しを行い、それらの登録解除呼び出しが完了するのを待ってからインスタンスを終了する必要があります。
TargetGroupでは、ステータスは「ドレイン」としてリストされ、ASGのアクティビティ履歴では一時的にそのイベントの状態が「ELB接続のドレインを待機しています」としてリストされます。
終了するライフサイクルフックがある場合、インスタンスはライフサイクルフックが開始する前にターゲットグループから登録解除されます。インスタンスが 'terminating:wait'状態にあるため、インスタンスが終了ライフサイクルフックの途中にあり、登録解除の遅延をすでに待機しているはずです。
補足として、Classic Load Balancerは、Application Load Balancerの「登録解除遅延」とは異なる「接続ドレイン」を使用します。接続のドレインは、そのインスタンスへの処理中の接続がなくなるか、設定されたタイムアウトのいずれか短い方で終了します。