ちょっと話題の記事

Amazon Redshiftを始めてみよう(入門ガイド翻訳&実践:前編)

2013.08.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

introducing-redshift

今年6月のAWS Summit Tokyo 2013で東京リージョンでも使えるようになったRedshift。その流れを受けて、国内でもより一層注目度が高まっている今日この頃皆様如何お過ごしでしょうか。

そんなRedshiftについて、この機会に自分も触れてみようと思います。私自身、これまで超大規模データやデータウェアハウスに関しては触れて来ておらず、この分野に関しては専門的な知識は有してはいませんが、そんな感じのスタートでRedshiftの巨大な山を登り始め、自分自身徐々に理解を深めていければ、またエントリを御覧の皆様にも同様に読み進めて行く事で理解を深めていって頂ければ幸いです。よろしくお願いします。

※文字も画像も多目な分、ひとまとめにするとボリューム的にスクロールバーの長さがエラい事になりそうなので前後編に分けてお届けします。:-)

目次

 

RedShiftとは

まずはざっくりどんなもんかを把握して行きましょう。サービス公式にも貼られている以下のYouTube動画をこちらにも掲載しておきます。

[SWF]http://www.youtube.com/watch?v=AUvn49gey8Y,900,720[/SWF]

 

はじめに / Getting Started

Amazon Redshiftのデータウェアハウスサービス利用にあたってのまず最初のステップは、計算ノードのセットで構成されるAmazon Redshiftクラスタを起動する事です。初期状態では、Amazon Redshiftはクラスタと共に、1つのデータベースを作成します。そして必要に応じてデータベースを追加する事が出来ます。

クラスタがプロビジョニングされた後は、SQLベースのツールや、既に使いこなしているビジネス・インテリジェンス(BI) アプリケーションを使う事によってデータセットをアップロードし、データ分析クエリを実行する事が出来ます。

 

Step 1: 始める前に / Before You Begin

1.1: サインアップ

もしAWSアカウントを持っていなければ、サインアップを済ませておきましょう。その後、Amazon Redshiftに接続するためにクライアントツールとドライバを入手します。アカウント作成に関しては以下のAWS公式手順を参考に進めてください。

1.2: クライアントツールとドライバーのダウンロード

Amazon Redshiftクラスタを作成すると、クラスタに対して接続するSQLクライアントツール(※PostgreSQLのJDBC又はODBCドライバを使用するものが対象)が使えるようになります。このエントリでは、SQL Workbench/J(無料且つDBMSに依存しない、クロスプラットフォームSQLクエリツール)を使用して接続する方法を紹介します。

必要なのは以下の3点。(※ちなみにクライアント接続確認にはMac OS Xを用いています。)

  • Java実行環境の導入
    • Mac OS X 10.7の場合はパッケージ入手→導入。また、10.8(Mountain Lion)で未導入の場合、コンソール上で『java -version』等Javaコマンドを実行しようとすると導入を促すダイアログが起動し、そのまま従うとスムーズに導入されました。
  • クライアントツールの入手、インストール
  • 対応するJDBCドライバの入手
    • 入門ガイドに記載のあった指定のJDBCライブラリをダウンロード。(入手ファイル:postgresql-8.4-703.jdbc4.jar)

 

Step 2: クラスターを立ち上げる / Launch a Cluster

これで、AWS管理コンソールを使ってクラスタを立ち上げる準備は整いました。

あなたが起動しようとしているクラスタは、Sandbox内でお試し的に動かせるものではなく、
実際に稼働し、終了させるまでAmazon Redshiftのクラスタ利用料金が発生し続けます。
ここに記載されている実践作業が終了したら、費用を最小限に抑える為に速やかに
クラスタを終了・削除するようにしてください。

Amazon Redshift の料金表 | アマゾン ウェブ サービス(AWS 日本語)

1.AWSアカウント若しくはIAMロールを用いてAWS管理コンソールにサインインし、Amazon Redshiftのメニューを開きます。(※もしIAMユーザ認証を用いている場合、ユーザーが必要な権限を有しているか確認してください。詳細な情報はAmazon Redshift管理者ガイドのControlling Access to Amazon Redshift Resources - Amazon Redshiftを参照。

2.任意のリージョンを選択。今回の実践では、Asia Pacific(Tokyo)を選んでみます。

3.『Launch Cluster』をクリック。以下イメージは最初にクラスタを作成する場合の状態です。ちなみに既にクラスタが作成されている場合は、クラスタのリストが表示されます。

(クラスタが存在しない場合)redshift_gettingstarted_01

(クラスタが既にある場合)redshift_clustersList

4.『Cluster Details(クラスタ詳細)』ページでは、以下の値が表示されています。

パラメータ名 入力例:
Cluster Identifier
(クラスタ識別子)
exampleclusterと入力。
Database Name
(DB名)
空白のままでOK。
デフォルトDB名としてdevと命名されます。
Database Port
(DB接続ポート)
デフォルト値は5439
※ここでは5439を使って進めます。もし試そうとしている環境でこのポートが使えない場合、
別のポート番号を指定し、以降そのポート番号を利用するようにしてください。
クラスタ起動後はポート番号は変更出来ません。
Master Username
(マスターユーザー名)
masteruserと入力。全てのDB権限を使用してクラスタにログインする為に使います。
Master Password
(マスターパスワード)
任意のパスワードを入力。パスワードは以下条件を満たす必要があります。

  • 8〜64文字
  • 少なくとも1文字は大文字を含む
  • 少なくとも1文字は小文字を含む
  • 少なくとも1文字は数字を含む
  • 印刷可能なASCII文字(シングルクォート、ダブルクォート、
    バックスラッシュ、スラッシュ、@、スペース以外)を含める事も可能。
Confirm Password
(パスワード:確認用に再入力)

redshift_gettingstarted_03

5.値を入力後、『Continue』を押下し次へ。

6.『Node Configuration』(ノード設定)のページでは、クラスタ内のノードに関する情報を提供します。

  • a.Node Type(ノードタイプ):デフォルト値dw.hs1.xlargeのまま。もし大きなデータセットでテストを行う予定であれば、代わりにdw.hs1.8xlargeを使うことを検討してみましょう。
  • b.Cluster Type(クラスタタイプ):Single Nodeを選択。この実践内容であれば、シングルノードで十分です。本番環境の場合だと、クラスタ内にノードを追加する事になるでしょう。
  • c.[continue]を選択し次へ。

redshift_gettingstarted_04

7.『Additional Configuration』(追加設定)ページでは、VPCの選択が行えます。

  • 次のステップでは、クラスタへのクライアントアクセスを許可します。
  • クラスタがVPC内部にプロピジョニングされるか、外部にプロビジョニングされるかというところで設定の対応が変わって来るところです。 が、この例では、この区別については気にしない事にします:詳細はAmazon Redshift管理ガイドにて。
  • 今はクラスタを起動し、幾つかのデータを使って色々試して見ることに焦点を当てる事にします。VPCの詳細については、Amazon Redshift管理ガイド内の、クラスタを起動しているプラットフォーム解説ページを参照。
  • VPCの外側でクラスタを作成する場合
    • リージョン内のアカウントで過去にクラスタが起動されていない場合、[Additional Configuration]のページは以下のように見えるでしょう。ここではデフォルト値のまま、[Continue]を押下し次へ進みます。
      • redshift_gettingstarted_05
  • VPCの内側でクラスタを作成する場合(事前準備)
    • VPCの外側で作る場合とは若干手順が異なります。以下その手順を順に解説して行きます。
    • まずは任意の値で、クラスタを配置するVPC及びサブネットを作成します。VPC識別子、サブネット、及びサブネットのアベイラビリティゾーンをメモしておいてください。クラスタを起動する時にこの情報が必要になります。
    • create-cluster-in-vpc-04_
    • VPCに紐付ける形でVPCに対してRedshiftのサブネットグループを作成します。Redshift管理コンソールの[Subnet Groups]→[Create Cluster Subnet Group]を選択。
    • create-cluster-in-vpc-01
    • Name/Descriptionに任意の文字列を、VPC IDに上記で作成した、適用させたいVPCのIDを設定。次いで、今作成するサブネットグループへ追加するサブネットを指定します(復数指定可能)。今回は[add all the subnets]のリンクをクリックし、その後AZ選択→SubnetID選択で先程作成したサブネットを指定する事が出来ました。[Create]で作成実行。
    • create-cluster-in-vpc-02_
    • 作成が完了し、一覧に追加されました。
    • create-cluster-in-vpc-03_
    • また、クラスタをPublicアクセス可能な形で構成する(Publicly Accessible Cluster)場合、VPCにインターネットゲートウェイがアタッチされていないといけないようです。実際アタッチされていない状態だと、クラスタ作成→起動というタイミングで以下のエラーメッセージが出てしまいます。
    • create-cluster-in-vpc-06
    • 管理コンソールからVPCメニューに遷移、[Internet Gateways]→[Create Internet Gateway]を選択/[Yes, Create]で作成/作成した対象を右クリック→[Attach to VPC]を選択/アタッチしたいVPCを選択、で対処完了。
    • attach-igw2
  • VPCの内側でクラスタを作成する場合
    • (上記準備を踏まえた上で)VPC内部にクラスタを起動させる場合、[Additional Configuration]のページは以下のような構成となります。
    • クラスタグループ(Cluster Parameter Group):デフォルト値のdefault.redshift-1.0を選択
    • データベース暗号化(Encrypt Database):デフォルト値Noを選択
    • VPC(Choose a VPC):ここは上記手順で作成したVPCを指定。すると表示メニューが変わります。
    • クラスタサブネットグループ(Cluster Subnet Group):上記手順で作成したものを指定。
    • Publicアクセス可能(Publicly Accessible):AWS範囲外、クライアントからの接続等も試してみたいのでここはYesを選択
    • AZ(Availability Zone):ここも上記手順で作成した際の値を選択。
    • VPCセキュリティグループ(VPC Security Groups):オプションで、外部接続またはクラスタに対してテストを行いたいEC2インスタンスを承認するためのセキュリティグループを選択。次ステップでアクセス設定を有効にする事が出来ます。ここはひとまずdefault(全て許可)を選択しておきます。
    • Continue押下で次へ。
    • create-cluster-in-vpc-05

8.Review(レビュー)ページでは、設定した内容を改めて確認します。設定内容を変更したい場合は、[Back]で設定し直したいページに戻ってください。表示内容はVPCの内側/外側どちらの内容で作成されたかによって変わってきます。

  • クラスタの外側で作成されていた場合の表示内容
    • redshift_gettingstarted_06
  • クラスタの外側で作成されていた場合の表示内容
    • preview-redshift-vpc2

9.起動時に表示される警告文を読み、問題無しであれば[Launch Cluster]を押下します。

10.クラスタが起動した旨のメッセージが表示されたら、[Close]を押下、ステータスが[available]になるまで待ちます。

redshift_gettingstarted_07

(以下は起動中の画面。"Cluster Status"がcreatingになっています)

redshift_gettingstarted_08

 

Step 3: アクセス認可 / Authorize Access

クラスタを起動した後は、クラスタへのクライアントからのアクセスについて明示的に許可設定する必要があります。クライアントはAmazon EC2インスタンス上、又は任意のインターネットに接続されたデバイス上で実行する事が出来ます。

クライアントへのアクセス許可の手順は、VPC内のクラスタをプロビジョニングしたか否かに依存します。

VPC内にプロビジョニングされたクラスタに対するアクセス認可

もしクラスタをデフォルトVPC内で起動していた場合、クラスタにデフォルトVPCグループが紐付けられています。クラスタに対するインバウンドアクセスを許可するためにスVPCセキュリティグループにルールを追加しましょう。

  • 1.管理コンソールにログインし、Redshiftメニューを開きます。注意)Step2で作業を行った際のリージョンと同じリージョンである事を確認しておいてください。
  • 2.[Cluster]をクリック。
  • 3.コンテンツページでアクセス設定を行いたいクラスタのチェックボックスを選択。詳細ペインでは、VPC IDVPC Security Groupの内容を控えておきましょう。
  • chapter3-authorize-sg-01w
  • 4.[View VPC Security Groups in the VPC Console]リンクをクリックしてAmazon VPCコンソールを開きます。
  • 5.VPCコンソールペインのナビゲーションで、任意のSecurity Groupを選択。
  • 6.コンテンツペインを選択し、IDは、前の手順でメモVPCのセキュリティグループのチェックボックスを選択します。
  • 7.詳細ペインにて、[Inbound]タブをクリック。
  • 8.以下の様に、ルールを追加。
    • a.ドロップダウンから[All Traffic]を選択、クライアントのIPアドレスを設定し、[Add Rule]をクリック。(All Trafficという項目は無かったのでALL TCPを選択。画面では****/32としていますが0.0.0.0/0で設定したらアクセス出来ました。ご参考までに)
    • chapter3-authorize-sg-02
    • b.[Apply Rule Changes]を押下し、設定内容を保存反映。
  • 9.これで、デフォルトVPC内にデプロイされたクラスタに接続する準備が出来ました。

VPCの外側にプロビジョニングされたクラスタに対するアクセス認可

一方、もしVPCの外側でクラスタを起動した場合、クラスタにAmazon Redshiftのセキュリティグループを紐付けます。

クラスタへのインバウンドアクセスを許可するには、クラスタのセキュリティグループにルールを追加する必要があります。各ルールにはクラスタに対してインバウンドアクセスを許可したいソースをそれぞれ識別します。

  • クラスレスドメイン間ルーティングIP(CIDR/IP)アドレス範囲 - クライアントアプリケーションがインターネット上で実行されている場合は、CIDR/IPアドレス範囲を利用します。
  • Amazon EC2セキュリティグループ - クライアントアプリケーションが、1つまたは複数のEC2インスタンス上で実行されている場合はAmazon EC2のセキュリティグループを使用します。

デフォルトクラスタセキュリティグループにルールを追加する方法

  • 1.管理コンソールにログインし、Redshiftメニューを開きます。
  • 2.Navigationペインの[Security Groups]タブを選択。
  • 3.内容ページ、一覧内のデフォルトセキュリティグループを選択。
  • chapter3-authorize-sg-11
  • 4.詳細ペインのセキュリティグループに対し、インバウンドアクセスのルールを追加。
    • a.インターネットから接続する場合、CIDR/IPルールの設定を行います。(※こちらで最低限接続確認を行いたい場合、『CIDR/IP of your current machine』の値と同じ内容を設定する事で接続出来るようになりました。ご参考までに)
      • i.Connection Type: CIDR/IPを選択。
      • ii.CIDR/IP Authorize:接続許可を与えたいCIDR/IPアドレス範囲情報を設定。
      • chapter3-authorize-sg-12
    • b.EC2インスタンスからのアクセスを行う場合、EC2セキュリティグループルールの設定を行います。
      • i.Connection Type: EC2 Security Groupを選択。
      • ii.AWSアカウントで、もしあなたのAWSアカウント配下でEC2セキュリティグループを定義したい場合は[This Account]を選択。そうではなく、異なるアカウント配下のEC2セキュリティグループの場合は[Another Account]を選択し、[AWS Account ID]テキストボックス内に所定の内容を入力。
        • chapter3-authorize-sg-13
        • [EC2 Security Gruop Name]では、EC2インスタンスに紐付くセキュリティグループを選択。設定内容を確認後、[Authorize(承認)]をクリック。これで、指定されたAWSアカウントとEC2のセキュリティグループに関連付けられているクライアントのEC2インスタンスは、クラスタへの接続を許可されます。
        • あなたのインスタンスに関連付けられているAmazon EC2のセキュリティグループの名前がわからない場合は、https://console.aws.amazon.com/ec2でAmazon EC2のコンソールに移動。ナビゲーションペインで、インスタンスの下に、インスタンスをクリックします。詳細ペインで、必要なAmazon EC2インスタンスのチェックボックスを選択すると[説明]タブで、インスタンスに関連付けられたセキュリティグループの名前は、セキュリティグループの下に表示を確認出来ます。

以上、これでクラスタに接続する準備が出来ました。実際にクラスタに接続を行う、クラスタに対して操作を行う...といった続きの内容については後編エントリにて。

 

参考情報