ECSサービスにおけるシャットダウン〜コンテナの入れ替えのライフサイクル
https://gyazo.com/cb475d581247147d54e3a22d1a89fe28
ウン十万接続のECSサービスを平和にアップデートしたい - Nature Engineering Blog
AWS ECS で、リクエストを受け付けている・クライアントとの接続のあるコンテナが、シャットダウンし次世代のタスクに入れ替わる間に何が起きているか
まとめると
1. ECSがタスクをALBのターゲットグループから外す
2. ALBのターゲットはdraining状態になり、新規のリクエストはこのターゲットには転送されなくなる
3. deregistration delayが経過する
4. ECSがタスクのコンテナにSIGTERMを送る
4.1 ↑の後8秒程度でALBは既存の接続を切る
5. その後stop timeoutが経過するとSIGKILLを送る
自身でDescribeTargetHealthWithContextを定期的に呼び、状態がdrainingになったら、 (長めに設定した)deregistration delay以下でマージンをとり設定した期間の間に少しずつwebsocket接続を切断
コンテナ内のアプリケーションから AWS SDK API を使ってdraining状態を判定というのはポータブルではないがそうせざるを得ない泥臭さがあっていい
ECSデプロイを速くするには