[AWS SDK for Node.js]API実行にかかった時間の測定をするtips

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

リクエスト時間を測定

この記事ではイベントリスナを使用して、任意のタイミングでコールバックを登録してみました。
この仕組みを利用すれば、aws-sdkを使用してAWSから結果を受け取るまでどのくらいかかったのか、
いちいち時間をチェックするためのコードを記述しなくても、AWS.eventsにイベントリスナを登録するだけで時間を測定できます。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • Node.js : v0.8.15
  • npm : 1.1.66
  • aws-sdk : 0.9.5-pre.6

まだaws-sdkをインストールしていなければ、npmでaws-sdkをインストールします。
また、他の記事にあるように、aws.jsonというファイルにAWSアカウント情報を記述しておきましょう。

% mkdir sample
% cd sample
% npm install aws-sdk

リクエスト時間を測るサンプルコード

時間を測定するためのコードは単純です。AWS.eventsのsendイベント(AWSへリクエスト開始)に測定を開始し、
completeイベント(AWSからレスポンスを受け取った)のタイミングで測定を終了し、かかった時間を表示します。
これをAPI実行前に記述しておけばOKです。

・
・
AWS.events.on('send', function startSend(resp) {
    resp.startTime = new Date().getTime();
}).on('complete', function calculateTime(resp) {
        var time = (new Date().getTime() - resp.startTime) / 1000;
        console.log(resp.request.operation + ':' + time + ' seconds');
 });
・
・

上記コードを記述後、EC2用とSNS用のAPIをよびだしてみましょう。

var ec2 = new AWS.EC2();
var sns = new AWS.SNS();

ec2.client.describeInstances(function(err,data){
   //何かの処理
});

sns.client.listTopics(function(err,data){
   //何かの処理
});

作成したファイルを実行してみます。
completeイベントのタイミングで、操作名とかかった時間か表示されてますね。

% node app.js
describeInstances:0.787 seconds
listTopics:0.812 seconds

まとめ

非常に簡単に時間測定を組み込むことができました。
NODE_ENVなどの環境変数を確認して、開発時だけAWS.eventsへの登録が有効化するようにしておけば便利に使えそうです。
また、これを利用すれば、AWSへのアクセス前後にいろいろと独自処理を挟むことができますね。