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