ECS Serviceをデプロイすると、ALBのヘルスチェックに引っかかって無限ループすることがあります。
ヘルスのパスを設定してなかったりするとそうなったりしますが、今回はパスも設定しているし、アプリケーションも起動されていたので初めは原因がわかりませんでした。
異常を検知してもコンテナのログは
LOG [NestApplication] Nest application successfully started
でした。(正しく起動できている)
ECSのサービスのイベントタブのイベントメッセージを確認すると
service <service名> port 3001 is unhealthy in target-group <ターゲットグループ名> due to (reason Health checks failed).
とありました。
ネット検索するとこちらを発見しました
ヘルスチェックがエラーコードなしで失敗した
という項目があります。今回のALBの無限ループはこれが原因でした。
cdkの方では下記のようにコードを作成していたのでそこにhealthCheckGracePeriod
を追加して修正しました。
const fargateService = new ApplicationLoadBalancedFargateService(
scope,
'ecs-fargate'
{
...(引数省略),
...
healthCheckGracePeriod: cdk.Duration.seconds(60), // <-- ここ
},
);
追加してやることでヘルスチェックのエラーは治まるようになりました