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形式で外だしすることも可能です。下記設定ファイルには、上記で使用していないプロパティもあります。
"secretAccessKey":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", |
"region":"ap-northeast1", |
"topPrefix" : "backups/", |
"endpointSync": "b.storage.sakura.ad.jp", |
"watchDir": "/var/www/html/cms/" |
実行すると、ネームスペースが返ってくることがわかります。ネームスペース作成日時も問題なく返ってきます。
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