2012年12月21日金曜日

AWS SDK for Node.js ってなんじゃ?

遅ればせながら、AWS SDK for Node.js が出ました。

簡単に触ってみます。

インストール

npm install aws-sdk


S3にアクセス

test.js
/*
AWSオブジェクトを初期化します。
*/
var AWS = require('aws-sdk');

/*
アカウント情報やリージョンなどを設定します。
*/
AWS.config.update({accessKeyId: 'xxxxxxxxxxxxx',
                   secretAccessKey: 'yyyyyyyyyyyyyyyyyyyyyyy',
                   region: 'ap-northeast-1'});

/*
 このようにしてもOKです。
 AWS.config.loadFromPath('./credentials.json');
*/


/*
S3オブジェクトを作ります。
*/
var s3 = new AWS.S3();

/*
バケットのオブジェクト一覧を取得するには以下のようにします。
*/
s3.client.listObjects({Bucket:"memorycraft-log"}, function(err,data){
  if(err){
    console.log(err);
  }
  else{
    for(var i=0;i<data.Contents.length;i++){
      console.log(data.Contents[i].Key);
    }
  }
});


基本的には、呼び出し→コールバックという一般的なnode.jsの作法ですね。
結果は以下のように正常に取得できます。

# node test.js
logs/
logs/20121221%3F--num-instances_$folder$
logs/20121221/
logs/20121221/ip-10-128-12-239-04_0.gz
logs/20121221/ip-10-128-12-239-04_1.gz
logs/20121221/ip-10-128-12-239-04_10.gz
logs/20121221/ip-10-128-12-239-04_2.gz
logs/20121221/ip-10-128-12-239-04_3.gz
logs/20121221/ip-10-128-12-239-04_4.gz
logs/20121221/ip-10-128-12-239-04_5.gz
logs/20121221/ip-10-128-12-239-04_6.gz
logs/20121221/ip-10-128-12-239-04_7.gz
logs/20121221/ip-10-128-12-239-04_8.gz
logs/20121221/ip-10-128-12-239-04_9.gz
logs/20121221/ip-10-128-12-239-04_98.gz
logs/20121221/ip-10-128-12-239-04_99.gz
logs/20121221/ip-10-157-2-63-04_0.gz
logs/20121221/ip-10-157-2-63-04_1.gz
logs/20121221/ip-10-157-2-63-04_10.gz
logs/20121221/ip-10-157-2-63-04_100.gz
logs/20121221/ip-10-157-2-63-04_2.gz
logs/20121221/ip-10-157-2-63-04_3.gz
logs/20121221/ip-10-157-2-63-04_4.gz
logs/20121221/ip-10-157-2-63-04_5.gz
logs/20121221/ip-10-157-2-63-04_6.gz
logs/20121221/ip-10-157-2-63-04_7.gz
logs/20121221/ip-10-157-2-63-04_8.gz
logs/20121221/ip-10-157-2-63-04_9.gz

Dynamoにアクセス
/*
AWSオブジェクトを初期化します。
*/
var AWS = require('aws-sdk');

/*
DynamoDBオブジェクトをつくります。
*/
var ddb = new AWS.DynamoDB();

/*
投入するデータは以下のようにします。
*/
var data = {
    id:{S:'msg_'+(new Date()).getTime()},
    msg:{S:'hoge'},
    datetime:{S:(new Date())}
};

/*
投入します
*/
ddb.client.putItem({
    TableName:'nodetest',
        Item:data
    },
    function(err, res) {
        if(err){
            console.log("Error [" + err.code + "] id=" + data.id.S);
        }
        else{
            console.log("Done id=" + data.id.S);
        }
});


結果は以下のようになります。
# node test.js 
Done id=msg_1356091073919


AWSコンソールでみると


正常に登録されたことがわかります。

他にもEC2とSWFにアクセスできますが、他のサービスはまだまだこれからのようです。
今後に期待ですね。

以上です。