AWS RedShiftのチュートリアル

技術

こんにちは。ざわかける!のざわ(@zw_kakeru)です。
先日AWS RedShiftを初めて触ったので、その感触を書いていこうかなと思います。
ちなみに後日、続きとしてAWS Glueとも連携してみたのでそちらも参考にしていただければいいんじゃないかなと思います。

AWS RedShiftとは

AWS RedShiftは、Amazon社が提供している「データウェアハウスサービス(DWH)」です。
データウェアハウス(DWH)というのは、大規模で無秩序なデータをとにかくどんどん蓄積していくためのシステムです。
データベース(DB)とよく似ているので混同されがちですが、DBはDWHの構成要素の一つと捉えると良いでしょう。
DWHを実現するために使われるのがDB、という関係性ですね。
DWHは大量のデータを保存していくその性質上、ほとんどの場合は内部でDBを用いて実装されています。
そして、全く形式の異なるデータも保存しなければならないため、複数のDBを持っているのが一般的です。

「ウェアハウス」は英語で「倉庫」の意味

そして、AWSが提供しているこのDWHサービスの名称がRedShiftです。
RedShiftは低コストで高いセキュリティ性があり、予測分析やデータ共有に優れています。
またS3やGlueに代表される他のAWSサービスとの連携も(当然ですが)スムーズに行うことが可能です。
世界的なシェアも高く、公式、非公式ともにドキュメントも充実しています。

今回はそんなRedShiftがどんなものなのか、試しに動かしていこうと思います。

実際に動かしてみた

AWSマネジメントコンソールからログイン

AWSアカウントは既に持っている前提で話を進めていきます。
AWSマネジメントコンソールを開き、「コンソールにサインイン」しましょう。
アカウントID、ユーザー名、パスワードを入力してログイン完了です。

検索窓から「RedShift」を選択して開きます。

クラスターを作成

ダッシュボードから「クラスターを作成」します。
おっとその前に、リージョンが何故かオハイオ(us-east-2)になっていますね。
自分の住んでいる場所に適したリージョンに設定しておいて下さい。

(ちなみに)クラスターとは

EC2(Slestic Computing Cloud)インスタンスの集合体です。
別の言い方をすると、世界中の人が使うAWSサーバー内のどこ(どのメモリ)に自分の領地を敷くか、のようなイメージで捉えることができます。
実際に固定で領地(メモリ)を割り当てられるのではなくサービスを起動する度に適切な場所に展開されるのですが、その領地の中でDBを立てたり他のサービスへデータを送信したり、自分の用途にあうシステムを構築していきます。
(ちなみに)リージョンとは

AWSは、サービス提供領域(ほぼ全世界)を20ほどの領域に分割し、それぞれ独立してクラウドサービスの運用を行っています。
この一つ一つの領域をリージョン(region)と呼びます。
この仕組みは、仮に一つのリージョンで障害が発生した場合にも他のリージョンには影響が出ないようになっています。
システムのバックアップを取るときに別のリージョンを使っておけば、障害が発生しても即座にリージョンを切り替えることで可用性を担保することができます。
一方で、それぞれのリージョンごとのシステム構築や、リージョン間のデータ複製及び受け渡しは多少手間がかかってしまいます。

日本ならアジアパシフィック(東京)(ap-northeast-1)に設定しておくのが良い気がしますね。

リージョンを決めたら、クラスター設定を行っていきます。
用途に応じてクラスター設定をしていきましょう。

  • クラスター識別子:クラスターの名前。分かりやすいものが望ましいと言えます。
  • ノードの種類:用途に合ったものを選択します。ここでは一番軽いdc2.largeを選択しました。
  • ノード数:これも用途に合ったものを選択します。ここでは1を選択しました。
(ちなみに)ノードとは。  
要するにメモリのことです。
AWSでは可変メモリ、固定メモリの選択もできます(可変メモリの方がお高くなっています)。

続いて、データベース設定も行いましょう。
RedShiftではクラスター作成時についでにデータベースも一つ作成する設定になっているようです。

  • データベース名:データベースの名前。分かりやすいものが望ましいと言えます。
  • データベースポート:外部からの接続要求を受け付けるポートです。デフォルトで5439でした。
  • マスターユーザー名、パスワード:好きなものを設定しましょう。

最後に、クラスターのアクセス許可の設定およびその他追加設定を行います。
追加設定は基本的にデフォルトで良いと思います(今度きちんと調べたら追記します)。
一通り設定が確認できたら「クラクターを作成」して完了です。

(ちなみに)「クラスターのアクセス許可」とは。
クラスター自身が他のAWSサービスにアクセスするための設定です。
アクセス許可を詳細に設定したIAMロール(役割)を事前に作成し、それをこのクラスターに割り当てます。
特に必要なければ何もしなくて構いません。

状態がModifyingからAvailableになれば初期設定完成!

ちなみに、すぐに使わないなら「一時停止」しておきましょう(稼働時間に応じて課金されてしまうため)。

ちなみに私の環境だけかもしれませんが、この状態の変更に毎回結構時間がかかります。
Paused⇔Avairableの変更におよそ5分から10分ほどが必要です。
何とかならないかな。。。

テーブルを作成

「クエリクラスター」を作成します。
(クエリクラスターとは何ぞ…よく分かりませんがクラスターとデータベースが接続できるようです。)

必要項目を入力し、「データベースに接続」します。

  • 接続:新しい接続の設定(既存の接続を使用する場合はプルダウンから選択)
  • クラスター:接続が未設定のクラスターが表示されるので、目的のクラスターを選択。
  • データベース名、ユーザー、パスワード:好きなものを設定しましょう。

エディタ画面に移動し、schemaをpublicに変更します。
SQLクエリを記述し、「実行」しましょう。
今回はサンプルクエリを作成して実行します。
(クエリは一つずつ記述してそれぞれ実行してください。)

create table shoes(
   shoetype varchar (10),
   color varchar(10)
 );
 insert into shoes values 
 ('loafers', 'brown'),
 ('sandals', 'black');

結果が表示され、loaferssandalsshoesに挿入されていることが確認できました。

終わりに

AWS RedShiftをクラスター作成からデータベース接続まで一通り動かしてみました。
今回のサンプルプロジェクトではクラスターを一つとその中にデータベース、テーブルを一つずつ作成しただけなので、DWHとしての恩恵はあまり感じられなかったかもしれませんね。
DBの追加は同じ手順で行えるので、必要な方はどんどん増やしていってください。

この続きの記事として、他のAWSサービスAWS Glueに接続して、ガチャガチャやってみた内容もまとめておきました。

以上です。

タイトルとURLをコピーしました