はじめに
AWS環境で Application Load Balancer (ALB) 経由でアプリケーションにアクセスしているとき、
一定時間後にタイムアウトしてしまう 現象に遭遇しました。
本記事では、
Windows Server上のアプリケーションでCSVを加工する処理中に発生したタイムアウトを
ALBの設定変更で解消した手順を紹介します。
発生した現象
構成は以下のようなシンプルなものです。
Client → ALB → EC2 (Windows Server, IIS上でアプリ稼働)
アプリの動作は以下の通り:
- クライアントがWebアプリにアクセス
- CSVファイルをアップロード
- サーバー側でCSVを加工
- 加工結果を返す
しかし、以下の現象が発生しました。
- クライアントからアクセス すると、処理中にタイムアウト(504 Gateway Timeout)
- サーバーから直接実行 すると、正常に完了
つまり、ALBを経由した時だけタイムアウトしていました。
原因の切り分け
まずはアプリケーションやサーバー側の設定を疑い、段階的に確認しました。
検証項目 | 内容 | 結果 |
---|---|---|
アプリ側の処理遅延 | CSV加工ロジックに問題がないか確認 | サーバー内実行では正常完了 |
IISの接続タイムアウト |
web.config 内で executionTimeout を延長 |
変更しても同じ時間で 504エラー発生 |
Windows ServerのHTTP応答制限 | IISマネージャーで「接続タイムアウト」も延長 | 効果なし |
ALBのアイドルタイムアウト | デフォルト値が 60秒 に設定されていた | 改善 |
つまり、アプリやIIS側のタイムアウト設定を延長しても、ALB側で先に切断されていたことが分かりました。
AWS公式ドキュメントによると、
ALBのアイドルタイムアウト はデフォルトで 60 秒です。
クライアントからのリクエスト後、
バックエンドでCSV加工中に60秒以上応答が途切れるとALBが接続を閉じ、
結果的に 504 Gateway Timeout が返っていた、という仕組みです。
対応方法:ALBのアイドルタイムアウトを延長
手順
-
AWSマネジメントコンソールで
EC2 → ロードバランサー → 対象のALBを選択 - アクション → 「ロードバランサー属性を編集」をクリック
- 「接続アイドルタイムアウト」の値を変更(例:
60
→300
秒)
設定後の挙動
設定変更後、再度クライアントから同じCSV加工処理を実行したところ:
✅ 処理が完了するまで接続が維持され、
✅ レスポンスが正常に返るようになりました。
まとめ
項目 | 内容 |
---|---|
現象 | ALB経由のアクセス時に504エラーでタイムアウト発生 |
原因 | ALBのアイドルタイムアウト(デフォルト60秒)に到達 |
対応 |
接続アイドルタイムアウト を300秒に延長 |
効果 | 長時間のCSV加工処理でも安定動作 |