ECSデプロイを速くするには
例えばコンテナを停止したいと思ったとき、ロードバランサに対してそのコンテナへのトラフィックのルーティングを止めるように指示すると、ロードバランサはそのコンテナに対する新しいコネクションの確立をやめる一方で、既存のコネクションについてはそれらが自発的に閉じられることを待機します. これら既存のコネクションは一定時間の経過後に強制的に切断されますが、このように強制的な接続の破棄まで一定の待機時間を設けることを、AWS のロードバランシングサービスでは『登録解除の遅延 (Deregistration Delay)』と呼びます. コネクションドレインで遅延されてSIGTERM が送られてもアプリケーションが正常終了できない場合は? ECS は SIGTERM シグナルを送信したあと、アプリケーションが行儀良く終了処理を済ませてから終了するのを一定時間待ちますが、その待ち時間を過ぎるとアプリケーションプロセスを強制的に停止するために SIGKILL シグナルを送信します. デフォルトではこの待ち時間は30秒に設定されています.
ECS_CONTAINER_STOP_TIMEOUT: 30 秒 - 正常に自己終了しないコンテナを強制終了するまでの待機時間
コンテナ起動時に環境変数として指定可能
これを2秒に設定するとSIGTERMを送って2秒待って終了していない場合にあとに強制的にSIGKILLを送ってくる ECS タスクを AWS Fargate で実行している場合、ユーザは Amazon ECS コンテナエージェント(実際には Fargate 環境で動いている Fargate コンテナエージェント)の設定値を直接変更できません. Fargate 環境で ECS_CONTAINER_STOP_TIMEOUT に該当する設定値を変更するには、タスク定義のコンテナタイムアウト設定を指定します. 詳細は 「タスク定義 > タスク定義パラメータ > コンテナのタイムアウト - Amazon ECS 開発者ガイド」配下にある stopTimeout 設定をご覧ください. 公式の