node.jsからDynamoDB(Tokyo-Region)を使う

記事タイトルとURLをコピーする

こんにちは!4月に入社したばかりのAWSチームの新人こと年寄りザビオです!

Dynamoが東京にきて、マイスターシリーズでも取り上げられましたが皆さん使ってますか?

Dynamo宮崎バージョン

node.jsからDynamoを操作するクライアントを見つけましたのでご紹介します!
先に注意しておきますが、私はワイルドとは全く無縁の関係でございます。改めてご認識ください。

今回利用したAMIは(amzn-ami-pv-2012.03.1.x86_64-ebs (ami-e47acbe5))です。

まずはnode.jsに必要な環境構築を行います。

yum install openssl-devel
yum install gcc-c++
yum install make

その後、最新のnode.jsをインストールし、展開します。
現在の最新バージョンはv0.6.15でした。

wget http://nodejs.org/dist/latest/node-v0.6.15.tar.gz
tar -zxvf node-v0.6.15.tar.gz
./configure
make
make install

インストールが終わったら「node -v」でバージョン表示されることを確認してください。
インストールが終わっていてバージョン確認できない場合はPATHが通っていないのでPATHを通してください。
自分の場合はtmpにてファイルダウンロードをしたので、シンボリックリンクを下記のように貼りました。

ln -s /tmp/node-v0.6.15/out/Release/node /usr/sbin/node

つぎに「npm」をインストールします。
npmはPHPのPEAR的なもので、いろんなモジュール(フレームワークも)簡単にインストールできます。

curl http://npmjs.org/install.sh | sh

インストールが終わったら、いよいよクライアントツール「dynode」をインストールします。

npm install dynode

これだけでインストールできます。 このままでも利用できますが、regionが「East」のままなので、「Tokyo」にしましょう。

編集ファイルは下記ファイルです。

  • /node_modules/dynode/lib/dynode/request.js

編集箇所は13行目です。

【 request.jsの編集】
var http        = require("http"),
    _           = require("underscore"),
    signer      = require('./request-signer'),
    AmazonError = require('./amazon-error'),
    URL         = require('url'),
    STS         = require('./sts').STS;

var Request = exports.Request = function Request(config) {
  this.sts = new STS(config);

  this.config = _.defaults(config, {
    prefix : "DynamoDB_20111205.",
    host : "dynamodb.us-east-1.amazonaws.com"←(編集前)
    host : "dynamodb.ap-northeast-1.amazonaws.com"←(編集後)
  });

実際にDynamoDBにテーブルを作成してみましょう。

  • vi zabbio.js
var dynode = require('dynode');

dynode.auth({accessKeyId: "***", secretAccessKey: "***"});

var opts = {read: 5, write: 5, hash: {wild: String}, range: {percentage: Number}};
dynode.createTable("zabbio", opts, console.log);

詳細につきましては本家のreadmeに記載がございます。
本家のサイト

それでは実行してみます。

  • node zabbio.js

実行後、下記のメッセージがかえってきました。

null { TableDescription:
   { CreationDateTime: ****,
     KeySchema: { HashKeyElement: [Object], RangeKeyElement: [Object] },
     ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 },
     TableName: 'zabbio',
     TableStatus: 'CREATING' } }

Management Consoleを見てみると、

確かにできていますねー。

node.js(SocketStream)を触る機会が多く、本ライブラリを使用していますが
めちゃめちゃ使い勝手良く重宝しています。
次回(要望があればw)は作成したnodejsの利用例など紹介できればいいなと思います。

他にもたくさんのライブラリがあるようです。こちらの方も合わせてご確認ください!
Amazon Web Services ブログ