2009年8月18日火曜日

Amazon Web サービス 仕様変更

8/15からアマゾンウェブサービスの仕様変更がありました。
Amazon Web サービスにリクエストを送信しても
今までは正常なリザルトが返ってきていても
The request must contain the parameter Signature.
とうリザルトが返ってきます。

フォーラムにも問い合わせがたくさんあります。

アマゾンは仕様変更を前々からアナウンスし、メールももらっていましたが、忘れていました。
Product Advertising API Planned Outages

Amazon Web サービスに REST リクエストを送信する際に
従来のリクエストに加え Timestamp と Signature というパラメータを加えなければなりません。

簡単な手順は
Basic Authentication Process
(リンク先左側メニューで Request Authentication > HMAC-SHA Signatures for REST Requests > Basic Authentication Process)
にあります。

従来のURLとの違いは
Signed Requests Helper
で簡単に理解できます。

HMAC-SHA signature の動的作成が厄介でが、
Amazon は Java のサンプルコードも公開しています。
(リンク先左側メニューで Request Authentication > Authenticating REST Requests > Java Sample Code for Calculating Signature Version 2 Signatures)
これを使えばリクエストURLの生成が簡単です。

私の場合、SignedRequestsHelper クラスの修正点として
ecs.amazonaws.jp へ変更
private String endpoint = "ecs.amazonaws.jp";
そして
Signature がなぜか改行文字を含んでしまうようなので下記のように修正すればうまくいきました。
canonicalQS + "&Signature=" + sig.replaceAll("%0D%0A", "");
また、
StringBuffer が使われているところは StringBuilder に変更してもよいかと思われます。

Apache Commons codec を使用しました。


関連記事


0 件のコメント: