[AWS]RedshiftをAWS Command Line toolから使ってみる

2013.06.13

Amazon Redshiftを使ってみる

Amazon Redshiftとは、2012年末に発表されたデータウェアハウスサービスです。
詳細な説明はここらへんで見てもらうとして、ここでは簡単に解説をします。

データウェアハウスとは

データウェアハウスとは,主に追加の形で大量データを格納するためのデータストアです。
蓄積されたデータに対して分析を行うことで業務状況を把握し経営に生かしたり業務改善に利用したりします。
いままでは専用のハードウェアやソフトウェアとして提供されることが多かったので、とても高価でした。

Amazon RedShiftとは

さて、↑にあるようなデータウェアハウスの機能をクラウド上で安価に提供するのが、Amazon Redshiftです。
詳細は公式サイトにありますが、Redshiftの主な特徴は次のようなっています。

  • スケール可能で、データ分析時に大規模データセットでも高速クエリ性能を実現
  • いままでのデータウェアハウスと比較すると,年額の費用が10倍〜1000倍くらいに抑えることが可能
  • クラウド上にあるという以外、機能的には大きな違いはない
  • 他のAWSサービスとの連携が可能。S3/Dynamoからデータのロードを行ったりできる
  • 内部ではPostgreSQLを使用しており、 ODBC/JDBC接続が可能

では、RedShiftを試してみましょう。
ここではAWSコンソールからクラスタを作成しているので、今回はCLI(AWS Command Line Interface)を使ってクラスタを作成してみます。

環境構築方法

今回使用した動作環境は以下のとおりです。Redshiftへプログラムからアクセスするためにnodeを使用しています。

  • OS : MacOS X 10.7.5
  • Node.js : v0.10.8

Redshiftクラスタを作成する

では、CLIを使ってRefshiftクラスタを作成するために、CLIをインストールしましょう。
ここにあるように、easy_installを使用してインストールします。
(easy_installがはいっていない人は、先にsetuptoolsをインストールしておきましょう)

% sudo easy_install pip
% sudo pip install awscli

CLIは補完も可能です。自分の環境はzshなので、次のようにして補完が効くようにしました。

% source /usr/local/bin/aws_zsh_completer.sh

AWSアカウント情報を記述したawscli.confファイルを適当な場所に作成します。

[default]
aws_access_key_id=<アクセスキー>
aws_secret_access_key=<シークレットキー>
region=<リージョン>

設定ファイルを作成したら、そのファイルパスをAWS_CONFIG_FILE環境変数に設定します。

%export AWS_CONFIG_FILE=/path/your/awscli.conf
%export AWS_DEFAULT_REGION=<デフォルトで指定したいリージョン>

CLIツールの設定ができたので、次はRedshiftクラスタを作成しましょう。
※セキュリティグループはAWSコンソールから作成しておき、アクセスが必要なIPを認証しておきましょう
クラスタの識別子やDB名、ユーザー名やパスワード等の必要な情報を決め、create-clusterコマンドで作成します。

% aws redshift create-cluster --cluster-identifier <識別子> --db-name <DB名> --port <ポート番号> --master-username <ユーザー名> --master-user-password <パスワード> --cluster-security-groups <セキュリティグループ> --node-type dw.hs1.xlarge --cluster-type single-node

上記コマンドを実行してしばらくすると、Redshiftクラスタが作成され、使用できる状態になります。
では次に、nodeからアクセスしてみましょう。

Refshiftにアクセスしてみる

Redshiftの中身はpostgreSQLなので、ツールやプログラムからアクセスすることができます。
postgreSQLにアクセスするためのモジュールをインストールし、nodeからRedshiftにアクセスしてみましょう。

% mkdir redshift-sample
% cd redshift-sample
% npm install pg

次のようにテーブルの作成、データ登録、データ取得を実行してみます。

var pg = require('pg');

var conString = "tcp://<ユーザー名>:<パスワード>@<endpoint>:<ポート番号>/<DB名>";
var client = new pg.Client(conString);

//DB接続
client.connect(function(err) {
    if(err) console.error(err);
});
//テーブル作成
client.query("CREATE TABLE users(id integer,name varchar(50), age integer)");
//データ登録
client.query("INSERT INTO users(id,name,age) values($1, $2, $3)", [1,'taro', 30]);
client.query("INSERT INTO users(id,name,age) values($1, $2, $3)", [2,'hanako', 20]);
//データ取得
var query = client.query("SELECT * FROM users");
query.on('row', function(row) {
    console.log(row);
    console.log("User id: %d", row.id);
    console.log("User name: %s", row.name);
    console.log("User age: %d", row.age);
    /*
     { id: 1, name: 'taro', age: 30 }
     User id: 1
     User name: taro
     User age: 30
     { id: 2, name: 'hanako', age: 20 }
     User id: 2
     User name: hanako
     User age: 20
     */
});

query.on('end', function() {
    client.end();
});

上記プログラムを実行すると、テーブルの作成からデータ取得まで実行されることがわかります。
ちなみに、使い終わった不要なクラスタは削除しておきましょう。

% aws redshift delete-cluster --cluster-identifier <識別子> --final-cluster-snapshot-identifier <スナップショット名>

まとめ

今回はCLIを使ってRedshiftクラスタを作成し、nodeプログラムからアクセスしてみました。
AWSコンソールにせよCLIにせよ、非常に簡単にデータウェアハウスの作成と使用をできることがわかったと思います。
Redshiftには他AWSと連携した機能がいろいろとあるので、次回以降ためしてみたいと思います。

参考サイトなど