レート制限

API やサービスへのリクエスト数に上限を設け、過負荷を防ぐ仕組み

APIセキュリティ

レート制限とは

レート制限 (Rate Limiting) は、API やサービスへのリクエスト数に上限を設け、過負荷、DDoS 攻撃、リソースの不公平な消費を防ぐ仕組みである。詳細なアルゴリズムは「レート制限パターン」「レート制限アルゴリズム」を参照。

なぜ必要か

レート制限は、過負荷によるサービスダウンの防止、1 ユーザーによるリソース独占の防止 (公平性)、下流サービス (Bedrock 等) の呼び出しコスト制御、DDoS 攻撃の緩和を目的とする。

AWS での多層レート制限

CloudFront (WAF) → API Gateway → Lambda → DynamoDB
  ↑ IP ベース       ↑ API キーベース    ↑ ユーザーベース
  2000 req/5min     100 req/sec        10 req/min
レイヤー サービス 粒度
エッジ WAF IP アドレス
API API Gateway スロットリング API キー、ステージ
アプリケーション Lambda + DynamoDB ユーザー、テナント

429 Too Many Requests

HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711929600

クライアントは Retry-After ヘッダーに従って待機し、リトライする。

クライアント側の対応

async function fetchWithRetry(url: string, retries = 3): Promise<Response> {
  const res = await fetch(url);
  if (res.status === 429 && retries > 0) {
    const delay = parseInt(res.headers.get('Retry-After') || '1') * 1000;
    await new Promise(r => setTimeout(r, delay));
    return fetchWithRetry(url, retries - 1);
  }
  return res;
}

実務での活用方法は関連書籍にも詳しい。

関連用語