Node.js + AWS SDKを使って、S3に差分ファイルをアップデートし続けるnode-s3maをS3互換ストレージでも使えないか、node.jsの動作検証をさくらのBase Storageで行ってみました。
node-s3maのスライドはslideshareに公開されているので、こちらを参照ください。
※node-watchをファイルの差分チェックに使用されていますので、上記サンプルはnode-s3maが動かした後のファイルの同期に有効です。node-s3ma実行前のファイルはアップロードされません。
はじめに、node.js 、npmの環境構築から。node.js環境は、CentOS6の場合以下で一発でインストールできます。
yum install nodejs npm --enablerepo=epel
node.js用aws-sdkなどをインストール.
npm install aws-sdk node-watch mime
var AWS = require("aws-sdk");
var config = require('./conf/config.json');
AWS.config.loadFromPath("./conf/config.json");
var s3 = new AWS.S3({endpoint: config.endpointSync});
s3.listBuckets(function(err,data){
for ( var index in data.Buckets){
var bucket = data.Buckets[index];
console.log("Bucklets:", bucket.Name, ' : ', bucket.CreationDate);
}
});
アクセスキーなどの設定ファイルをjson形式で外だしすることも可能です。下記設定ファイルには、上記で使用していないプロパティもあります。
{
"accessKeyId":"xxxxxx",
"secretAccessKey":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"region":"ap-northeast1",
"topPrefix" : "backups/",
"endpointSync": "b.storage.sakura.ad.jp",
"watchDir": "/var/www/html/cms/"
}
実行すると、ネームスペースが返ってくることがわかります。ネームスペース作成日時も問題なく返ってきます。
# node node-s3-sample.js Bucklets: xxxxlog : Mon Feb 03 2014 20:18:15 GMT+0900 (JST)
Node.js用のAWS SDKは以下にサンプルが公開されています。
http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-examples.html