awsで504エラーが発生する原因と効果的な対応方法解説

目次

はじめに

目的

本ドキュメントは、AWS環境で発生する504 Gateway Timeoutエラーについて、原因と対応方法を分かりやすく解説します。運用担当者や開発者が原因を特定し、速やかに対処できるように構成しています。

想定読者

主に次の方を想定しています。
– AWSでアプリを運用しているエンジニア
– 障害対応を担当する運用チーム
– 504エラーの原因を把握したい開発者
専門用語は最小限にし、具体例を交えて説明します。

504 Gateway Timeoutとは

504エラーは、ゲートウェイ(例:ロードバランサーやAPIゲートウェイ)が上流のサーバーから指定時間内に応答を受け取れなかったときに発生します。たとえば、ブラウザがページを要求し、ロードバランサーがバックエンドサーバーから応答を得られないケースです。画面には「504 Gateway Timeout」と表示されますが、実際の原因はネットワークやアプリケーション処理の遅延など多岐にわたります。

本ドキュメントで扱う内容

第2章で504エラーの動作と挙動を詳しく説明します。第3章で主な原因を整理し、第4章で具体的な対応方法と再発防止策を提示します。段階を追って確認すれば、原因の切り分けと復旧を効率よく行えます。

この章では全体像を示しました。次章から具体的な挙動と診断のポイントを見ていきます。

AWS 504エラーについて

概要

AWS環境での504 Gateway Timeoutは、ゲートウェイやロードバランサーが上流のサーバーから指定時間内に応答を受け取れないときに発生します。外部からのリクエストは受け取れても、内部処理が遅れるとタイムアウトでエラーを返します。

発生する仕組み(わかりやすく)

  • クライアントがロードバランサーやAPI Gatewayにリクエストを送信します。
  • その装置が、リクエストを背後のサーバー(EC2、ECS、Lambda、オンプレ等)に転送します。
  • 背後のサーバーが決められた時間内に応答しないと、ゲートウェイ側が504を返します。

よく使われるAWSサービスと504の関係例

  • Application Load Balancer(ALB): ターゲットの応答が遅いと504を返します。
  • API Gateway: 統合先(LambdaやHTTPエンドポイント)が応答しない場合に発生します。
  • CloudFront: オリジンが応答しないときに504を返すことがあります。

普段見られる具体例

  • 長時間処理するバッチリクエストが同期で呼ばれた。
  • データベースが高負荷でクエリが遅延した。
  • ネットワーク断やセッション切れで接続が確立できなかった。

最初に確認すべきこと(手早く確認)

  • 対象サービスのログ(ALBログ、API Gatewayログ、Lambdaログ)を確認する。
  • タイムアウト設定と背後サービスの処理時間を比較する。
  • サービス間のネットワーク疎通を簡単に確認する(ヘルスチェック等)。

以上が、AWS環境で発生する504エラーの概要と発生の流れ、よくある例です。

主な原因

アプリケーション層の応答遅延

Webアプリの処理が長時間かかると504が返ります。大量データ処理や外部API呼び出しの待ちが典型例です。症状としては特定のリクエストだけ遅くなる、バックエンドログに処理時間の増加が残ります。まずはアプリケーションログと外部APIの応答時間を確認してください。

ALB(Application Load Balancer)の設定ミス

ターゲットグループのヘルスチェック失敗やポート不一致で通信が届かず504になります。ALBのアクセスログやターゲットのヘルス状態を見れば分かります。ターゲットのポート、ヘルスチェックパス、プロトコルを確認してください。

セキュリティグループの設定エラー

ロードバランサーとターゲット間の必要なポートが遮断されるとリクエストが届きません。特に送信元/宛先のルールを確認します。症状は接続拒否やタイムアウトで、セキュリティグループのルールを開けると解消する場合が多いです。

タイムアウト設定の不備

ALB、アプリ、外部サービスでタイムアウト値がばらばらだと途中で切断されます。例えばALBのタイムアウトが短くバックエンドが応答中の場合に504になります。各層のタイムアウトを合わせて検証してください。

リソース枯渇

CPUやメモリ、ネットワーク帯域が足りないと応答が遅れます。CloudWatchでCPU使用率、メモリ、ネットワークを確認し、スケールアウトやリソース増強を検討してください。

対応方法

目的と概略

CloudFrontで発生する504エラーは、まずログでOrigin側のエラーとタイムアウトを確認して切り分けることが有効です。本章では実務で使える順序立てた確認手順と対処例を示します。

1) CloudFrontログとCloudWatchの確認

  • CloudFrontアクセスログ(またはCloudFrontのモニタリング)で”OriginError”やタイムアウト表記を探します。
  • CloudWatchで4xx/5xxの増加やOriginLatencyの急上昇を確認します。これで問題がキャッシュ側かオリジン側か判断できます。

2) オリジン(ターゲット)の健全性確認

  • ALB/NLBのターゲットグループでヘルスチェック状態、5xx率、レイテンシを見ます。
  • バスチオンや内部から直接オリジン(ALBのDNSやEC2のIP)へcurlして応答時間とステータスを確認します。

3) ネットワークとセキュリティ設定の確認

  • セキュリティグループやNACLがCloudFrontまたはALBからのトラフィックを許可しているか確認します。
  • Routeやサブネットの設定が正しく、パブリック/プライベートの配置に齟齬がないかを確認します。

4) タイムアウトとリソース設定の調整

  • CloudFrontとオリジン側(アプリ、ALB、Lambdaなど)のタイムアウト設定を確認し、必要なら適切に延長します。
  • アプリケーションの処理時間やDBクエリを改善するか、インスタンス数を増やして負荷を分散します。

5) 応急処置と恒久対策

  • 応急:CloudFrontでキャッシュを有効化して負荷を軽減する、カスタムエラーページで利用者向け案内を出す。
  • 恒久:オートスケーリング、アプリ性能改善、詳細なログ収集とアラート設定を行います。

実行順のチェックリスト(簡潔)

  1. CloudFrontログ→2. Originに直接アクセス→3. ターゲットヘルスとメトリクス→4. ネットワーク設定→5. タイムアウト/スケール調整

これらを順に行えば原因の切り分けが早まり、適切な対処につながります。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次