0Pricing
Cloud & IT Cert Prep · レッスン

スロットリング、キャッシュ、使用量プラン

バースト時と定常時のスロットリング制限でバックエンドを保護し、レスポンスキャッシュを有効にして、パートナー向けに API キー付きの使用量プランを作成します。

「スロットリング、キャッシュ、使用量プラン」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

スロットリングが不可欠な理由

スロットリングがなければ、動作不良のクライアント 1 つやトラフィックの急増によって、バックエンドサービス(Lambda の同時実行数、RDS の接続、下流 API など)が過負荷になる可能性があります。API Gateway のスロットリングは、1 秒あたりのリクエスト数を制限し、定常レートを超える短時間のバーストを許容します。スロットリングされたリクエストは、バックエンドに到達することなく、直ちに 429 Too Many Requests のレスポンスを受け取ります。これにより、下流リソースを過負荷から保護できます。

アカウントレベルとステージレベルのスロットリング

スロットリングは複数のレベルで機能します。アカウントレベルの制限は、バースト 5,000 リクエストを伴う 1 秒あたり 10,000 リクエスト(RPS)です(ソフトリミットであり、引き上げ可能です)。ステージレベルでは、そのステージのすべてのメソッドに適用されるデフォルトのスロットリングレート(RPS)とバースト制限を設定できます。メソッドレベルでは、特定のエンドポイントに対してステージのデフォルト値を上書きできます。たとえば、読み取りの多い GET エンドポイントに、書き込みの多い POST エンドポイントより高いレート制限を設定できます。

aws apigateway update-stage \
  --rest-api-id 'abc123' \
  --stage-name 'prod' \
  --patch-operations \
    'op=replace,path=/*/*/throttling/rateLimit,value=1000' \
    'op=replace,path=/*/*/throttling/burstLimit,value=2000'

トークンバケットアルゴリズム

API Gateway のスロットリングでは、トークンバケットアルゴリズムを使用します。トークンは、バースト制限(瞬間的に処理できる最大容量)までバケットに蓄積されます。各リクエストはトークンを 1 つ消費します。トークンはレート制限(定常状態での RPS)に従って補充されます。バケットが空の場合、リクエストはスロットリングされます。例として burst=5000、rate=1000 RPS の場合、開始時には 5,000 件の同時リクエストを処理でき、バケットは毎秒 1,000 トークンずつ補充されます。これにより、短時間のトラフィック急増を吸収しながら、長期的なレート制限を適用できます。

API Gateway のレスポンスキャッシュ

レスポンスキャッシュ(REST API のステージで利用可能)は、バックエンドのレスポンスを API Gateway が管理するキャッシュに保存します。これにより、同一のリクエストはバックエンドにアクセスせず、キャッシュから返されます。バックエンドの負荷とレイテンシーを削減でき、読み取りの多い API では Lambda の呼び出しコストを大幅に削減できる場合があります。キャッシュのキーは、設定に応じたリクエスト(メソッド、パス、クエリ文字列、ヘッダー)です。キャッシュの TTL は 0~3600 秒の範囲で設定でき、デフォルトは 300 秒です。

aws apigateway update-stage \
  --rest-api-id 'abc123' \
  --stage-name 'prod' \
  --patch-operations \
    'op=replace,path=/cacheClusterEnabled,value=true' \
    'op=replace,path=/cacheClusterSize,value=0.5' \
    'op=replace,path=/*/*/caching/ttlInSeconds,value=300'

キャッシュキーのカスタマイズ

デフォルトでは、キャッシュキーはリクエストURL全体です。キャッシュキーの生成に使用する要素はカスタマイズできます。具体的には、pageSizeやfilterなどの特定のクエリ文字列パラメータを含め、timestampなど無関係なパラメータを除外できます。また、特定のヘッダーをキャッシュキーに含めることもできます。共有キャッシュエントリにプライベートデータが混入するのを防ぐため、機密性の高いヘッダーはキャッシュキーから除外してください。キャッシュヒット率を最大化しつつ、論理的に異なるリクエストには異なるキャッシュレスポンスが返るように、キャッシュキーを調整してください。

キャッシュの無効化

クライアントは、Cache-Control: max-age=0ヘッダーを含めることで、特定のリクエストのキャッシュを無効化できます。また、コンソールまたはAPIからステージキャッシュ全体をフラッシュすることもできます。クライアントによるキャッシュ無効化を許可するかどうかを設定できますが、本番環境では、クライアントが意図的にキャッシュを回避できないよう制限してください。フラッシュ権限を選択的に付与するには、リソースポリシーをアタッチするか、呼び出し元にフラッシュ権限があるかを確認するLambda authoriserを使用します。

# Flush entire stage cache
aws apigateway flush-stage-cache \
  --rest-api-id 'abc123' \
  --stage-name 'prod'

使用量プラン: クライアントごとのレート制限

Usage Planは、APIクライアントのグループに対するスロットリング制限とクォータ制限を定義します。APIステージを使用量プランに関連付け、その後、API keysをプランに関連付けます。各APIキーは、プランの制限を個別に適用します。使用量プランを使うと、段階的なアクセスを提供できます。たとえば、Freeプランでは100 RPM/1日あたり10,000リクエスト、Proプランでは1,000 RPM/1日あたり100,000リクエストと設定できます。これは、クライアントごとに異なるレート制限が必要となる、収益化されたAPIやパートナー統合で使われるモデルです。

# Create a usage plan
aws apigateway create-usage-plan \
  --name 'ProTier' \
  --throttle 'rateLimit=1000,burstLimit=2000' \
  --quota 'limit=100000,period=DAY' \
  --api-stages 'apiId=abc123,stage=prod'

APIキーとクライアント識別

API keysは、クライアントがx-api-keyリクエストヘッダーに含める不透明な文字列トークンです。API Gatewayはキーを検証し、そのリクエストを対応する使用量プランに関連付けます。APIキーはセキュリティメカニズムではありません。スロットリングとクォータの目的でクライアントを識別するためだけに使用されます。セキュリティを確保するには、必ず適切な認可(IAM、Lambda authoriser、またはCognito)とAPIキーを組み合わせてください。使用量プランに関連付けられていないAPIキーには、スロットリング制限は適用されません。

# Create an API key and associate with usage plan
aws apigateway create-api-key \
  --name 'PartnerABC-Key' \
  --enabled

aws apigateway create-usage-plan-key \
  --usage-plan-id 'uvw321' \
  --key-id 'xyz789' \
  --key-type API_KEY

使用量プランのクォータ制限

使用量プランでは、秒単位のスロットリングレートに加えて、クォータ制限もサポートされます。これは、一定期間(DAY、WEEK、またはMONTH)内に許可されるリクエスト数の上限です。クライアントがクォータを使い切ると、クォータがリセットされるまで、後続のリクエストは429を返します。クォータ制限は、無料利用枠の管理、APIの悪用防止、API利用量と課金の整合に役立ちます。クォータカウンターは結果整合性であるため、ブロックされる前にクライアントがクォータをわずかに超える場合があります。

スロットリングとキャッシュのCloudWatchメトリクス

次のCloudWatchメトリクスを使用して、API Gatewayの状態を監視します。

  • Count: API呼び出しの総数
  • 4XXError: 429スロットリングを含むクライアントエラー
  • 5XXError: バックエンドエラー
  • Latency: エンドツーエンドのリクエスト時間
  • IntegrationLatency: バックエンドの応答を待機した時間
  • CacheHitCount / CacheMissCount: キャッシュの有効性

4XXErrorの急増に対してアラームを設定すると、ユーザーに影響が及ぶ前にスロットリングの問題を検出できます。また、CacheMissCountに対してアラームを設定すると、キャッシュ設定の問題を特定できます。

キャッシュとスロットリングを有効にするタイミング

レスポンスの変更頻度が低い読み取り中心のAPIでは、キャッシュを使用してください。たとえば、商品カタログの検索、参照データ、静的な設定などです。ユーザー固有のデータや、頻繁に変化するデータでは、キャッシュが逆効果になる場合があります。バックエンドサービスを過負荷から保護するため、内部APIであってもスロットリングは常に使用してください。両方を組み合わせ、よく使われるデータをキャッシュしてバックエンドの負荷を減らし、単一のクライアントがAPIを独占しないよう積極的にスロットリングします。SAA-C03試験では、キャッシュはコストとレイテンシーを削減し、スロットリングは可用性を確保するものと理解してください。

理解度チェック

このレッスンで扱ったAWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、Throttlingがアカウント、ステージ、メソッドの各レベルで、設定可能なレート制限とバースト制限を持つトークンバケットアルゴリズムを使用してバックエンドを保護すること、Response Cachingが設定可能なTTLでバックエンドのレスポンスを保存し、読み取り中心のエンドポイントにおけるバックエンド負荷とレイテンシーを削減すること、そしてUsage Plans with API Keysがクライアントごとのスロットリングレートとクォータを適用し、パートナーAPIやパブリックAPIで段階的なアクセス制御を可能にすることを学びました。次は、コンテナ化されたワークロード向けのECSクラスター、タスク定義、サービスについて学びます。

よくある質問

「スロットリング、キャッシュ、使用量プラン」レッスンは無料ですか?

はい。「スロットリング、キャッシュ、使用量プラン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

「スロットリング、キャッシュ、使用量プラン」で何を学びますか?

バースト時と定常時のスロットリング制限でバックエンドを保護し、レスポンスキャッシュを有効にして、パートナー向けに API キー付きの使用量プランを作成します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cloud & IT Cert Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「スロットリング、キャッシュ、使用量プラン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?

はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. REST API、HTTP API、WebSocket API
  2. 統合:Lambda、HTTP、Mock
  3. 認可:IAM、Lambda Authorizers、Cognito
  4. スロットリング、キャッシュ、使用量プラン
← Cloud & IT Cert Prepに戻る