1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudFrontで5xxエラーが連発する場合の原因と対策まとめ

Posted at

CloudFrontで5xxエラーが連発する場合の原因と対策まとめ

Amazon CloudFront を利用していると、502 Bad Gateway504 Gateway Timeout を中心とした 5xxエラー が連発するケースがあります。
これらのエラーは、オリジンサーバーの問題だけでなく、CloudFrontやその周辺構成にも原因があることがあります。

本記事では、原因の特定ポイントとCloudFront側でできる制御・軽減策をまとめます。


🔍 まず確認すべきポイント

チェック項目 内容
オリジンの種類 S3 / ALB / API Gateway / EC2など
オリジンの応答状況 CloudFrontを経由せずにオリジンへ直接アクセスしてステータス確認
エラー傾向の調査 時間帯、リージョン、User-Agentなどに偏りがないか
CloudFrontログ sc-status, x-edge-result-type, cs-uri-stem などを調査

🛠 CloudFront側での制御策

1. キャッシュポリシーの最適化

オリジンに頻繁にアクセスしないよう、キャッシュを活用して5xxを抑制。

{
  "DefaultTTL": 60,
  "MaxTTL": 300,
  "MinTTL": 10
}
  • APIや動的コンテンツでもTTLを短く設定してキャッシュを使う
  • クエリ文字列やCookieをキャッシュキーに含めるか見直す

2. オリジングループの活用(フェイルオーバー)

CloudFrontのオリジングループを使えば、オリジンが5xxを返した際に代替オリジンに切り替えることが可能。

例:

  • メイン:ALB
  • フェイルオーバー:S3の静的エラーページ

3. カスタムエラーレスポンス

CloudFront上で5xxエラー発生時に、即座にキャッシュ済みのエラーページを返すことでUXを改善。

{
  "HTTP Error Code": 502,
  "Response Page Path": "/custom_502.html",
  "TTL": 30
}

4. タイムアウト/KeepAliveの見直し

504などが出る場合、CloudFront⇔オリジン間のタイムアウトが影響していることが多い。

  • ALB: Idle Timeout を 60秒以上に
  • EC2/Nginx: KeepAlive を有効にし、タイムアウトも適切に調整

5. Lambda@Edge / CloudFront Functions によるリクエスト制御

  • 明らかに攻撃的・異常なパターンのリクエストをブロック
  • User-Agentが CFNetwork, sqlmap, curl などのパターンを検知して遮断
if (request.headers['user-agent'] && request.headers['user-agent'].value.includes('sqlmap')) {
  return {
    statusCode: 403,
    statusDescription: 'Forbidden',
    body: 'Blocked by Lambda@Edge'
  };
}

6. AWS WAFの導入でBotやDDoSの制御

  • Rate-based rule(単位時間あたりのアクセス数制御)
  • CAPTCHA / Challenge
  • Geo Match(地理的制御)
  • Bot Control(マネージドルール)

📊 監視強化ポイント

  • CloudWatch: 5xxErrorRate, TotalErrorRate
  • CloudFront Access Log → Athena or QuickSight で可視化
  • Lambda@Edge + CloudWatch Logs による詳細追跡

✅ まとめ

対策 効果
キャッシュ制御 オリジン負荷低減・エラー回避
フェイルオーバー構成 サービス継続性向上
エラーレスポンス設定 UX改善、再試行負荷抑制
Lambda@Edge / WAF 攻撃・Botからの防御
オリジンの調整 タイムアウト・接続安定化

📎 補足:CloudFrontログ分析例(Athena)

SELECT
  date,
  time,
  sc_status,
  cs_method,
  cs_uri_stem,
  c_ip,
  cs_user_agent
FROM cloudfront_logs
WHERE sc_status LIKE '5%'
ORDER BY date DESC, time DESC
LIMIT 100;

🔗 関連ドキュメント


執筆者: 檜垣慶太
CloudFrontの5xx対策で困っている方の参考になれば幸いです!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?