風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

Amazon認証プロキシの毎秒1コール制限をどうするか?

プロキシも1アプリケーション扱い

Product Advertising API

4. 利用条件

(p) お客様自身も、また、お客様が Product Advertising API にリクエスト送信を行うアプリケーションを作成し公表した場合は、エンドユーザーによりインストールされたかかるアプリケーションの各コピーは、毎秒1 コールを超えないものとし、また、当方の事前の書面による同意なしに、Product Advertising API 宛にまたはこれより、サイズが40Kを超えるファイルを送信しないものとします。

↓はAmazon API認証のPROXYを書いたよ(AmazonのAPI認証導入はOSSに対する挑戦だよなぁ(4)) - ただのにっき(2009-06-19)id:IwamotoTakashiさんのはてなブックマーク経由。

http://developer.amazonwebservices.com/connect/thread.jspa?threadID=32142&tstart=0&messageID=133116#133116

PROXY実装のケース でも、万一hack行為が判明した場合は、上記対策を迅速に取っていただく必要があります。
また、毎秒1コール制限が通常と同様に適用となりますので、リクエスト制限超過とならないようご注意ください。

まぁ、Amazonからしてみたら当然なんでしょうが……

で、考えていたんだけれど…

AmazonのProduct Advertising API認証プロキシ(REST版・GAE用)ソース - 風柳メモ

にどんな対策をするか……とりあえず考えつくのは、

  1. 素直に、コール制限をつける(一定時間あたりのリクエスト数が閾値を越えたら、503(Service Unavailable)を返す)。
  2. Signature算出後、Amazonへ直接リクエストは送らず、クライアントに対して302(Found)を返してSignature付URLへリダイレクトさせる(結果として、Amazonへ直接リクエストを出すのはクライアントアプリケーション)。

だったので、各設定を追加してみました。

# === リダイレクト設定
USE_REDIRECT=True # True:Signature付きURLへリダイレクト  False:Signature付きURLの内容を取得して返す


# === アクセス制限
ACCESS_PERIOD_SECONDS=60               # 集計期間(秒)
ACCESS_LIMIT=10*ACCESS_PERIOD_SECONDS  # 集計期間中のアクセス数上限 (0:制限なし)