Amazon Redshift クラスターの作成手順
AWS上でデータ分析基盤を構築するのに欠かせないサービスのひとつ、Amazon Redshift。弊社ブログでもAmazon Redshiftに関する数々のノウハウが公開されていますが、今回は主にこれからAmazon Redshiftを使ってみようという方向けに、Amazon Redshift クラスターのベーシックな作成手順をご紹介します。
Amazon Redshift "クラスター" とは?
冒頭でさらりとAmazon Redshift クラスターという言葉を使いましたが、Amazon Redshiftの環境を構築する前提知識としてこのクラスターについて簡単に触れておきたいと思います。
Amazon Redshiftの大きな特徴の1つとして、「分散並列データベース」であることが挙げられます。Amazon Redshiftでは複数のノード(コンピューティングリソース)に処理を分配しそれらを1つのデータベースとして動作させることが可能となっており、この複数のノードのひとまとまりを クラスターと呼びます。(Amazon Redshiftはこのクラスターという単位でDBインスタンスの作成/管理を行います。)
更に上述のノードには、リーダーノードとコンピュートノードの2種類が存在します。
- リーダーノード
- 1クラスターにつき1台のみ。
- クライアントアプリケーションからの接続の受付、クエリの解析と実行プランの策定、コンピュートノードから得た中間結果を集計などを担当。
- コンピュートノード
- 1クラスターに1台以上。
- データの保持と処理を担当。
リーダーノードが司令塔、調整役で、コンピュートノードが実際に手を動かす人たち、というイメージです。
上で「複数ノードのひとまとまり = クラスター」と書きましたが、リーダー兼コンピュートの1ノードでクラスターを構成することも可能です(= シングルノードクラスター)。
Amazon Redshift クラスター作成の事前準備
Amazon Redshift クラスターとそれを構成するノードについてなんとなく理解できたところで早速クラスターの作成にとりかかりたいところですが、事前に作成が必要なものを整理しておきます。
(1) VPC
Amazon Redshift クラスターはVPC上に作成します。(EC2-ClassicプラットフォームをサポートするAWSアカウント(2013年5月以前に作成されたAWSアカウント)の場合は、VPCの外部でクラスターを起動することも可能です。)
(2) サブネット
クラスターを起動するサブネットも合わせて用意しておきます。
(3) セキュリティグループ
Amazon Redshift クラスターに割り当てるセキュリティグループを用意しておきます。通常は接続元(VPC内の全インスタンス、特定のEC2のみ、インターネットからの不特定のアクセス(パブリックアクセス)、など)からAmazon Redshift クラスターへのインバウンド通信を許可しておけばOKかと思います。(Amazon Redshift クラスターのデフォルトのポート番号は5439です。)
(4) クラスターサブネットグループ
サブネットは、クラスターサブネットグループという形でAmazon Redshift クラスターにマッピングします。クラスターサブネットグループには複数のサブネットを登録可能ですが、1つのクラスターで使用されるサブネットは1つだけです。(クラスターへのマッピング設定はサブネットグループ単位だが、実際にマッピングされるのはサブネット単位、ということです。)
サブネットグループという名称からMulti-AZ構成を連想してしまいますが、残念ながら現時点(2015年7月時点)ではAmazon RedshiftはMulti-AZには対応していません。
(5) クラスターパラメータグループ
Amazon Redshiftのデータベースパラメータはパラメータグループという単位でクラスターにマッピングします。デフォルトでdefault.redshift-1.0という名称のパラメータグループが用意されているのでこれを使用することも出来ますが、複数のクラスターを運用する場合にクラスター毎にパラメータを調整できるよう、パラメータグループもクラスター毎に作成しておくのが良いかと思います。
Amazon Redshift クラスターの設定項目
Amazon Redshift クラスターの作成時に入力/選択が必要な項目は下表の通りとなります。クラスター名などはクラスター作成前に決めておきましょう。(当たり前ですが。)
設定項目 | 説明 | 備考 |
---|---|---|
Cluster Identifier | クラスター名 | |
Database Name | データベース名 | |
Database Port | データベースへの接続ポート番号 | デフォルト値:5439 |
Master User Name | クラスターのマスターユーザー名 | |
Master User Password | マスターユーザーのパスワード | |
Node Type | ノードタイプ | dc1.x / ds1.x / ds2.x / |
Cluster Type | クラスタータイプ | Single Node / Multi Node |
Node of Compute Nodes | コンピュートノード数 | Single Nodeの場合は1Multi Nodeの場合は2以上 |
Cluster Parameter Group | クラスターパラメータグループの選択 | |
Encrypt Database | データベースの暗号化方法 | None(暗号化なし)/ KMS / HSM |
VPC | VPCの選択 | |
Cluster Subnet Group | クラスターサブネットグループの選択 | |
Publicly Accessible | パブリックアクセスの可否 | インターネット経由でクラスターにアクセスさせたい場合は"Yes"に設定する |
EIP | クラスターに割り当てるEIPの選択 | Publicly Accessible = Yesの場合のみ |
Availability Zone | Availability Zoneの選択 | |
VPC Security Group | セキュリティグループの選択 | |
Automated Snapshot Retention Period | 自動スナップショットバックアップの保存期間 | デフォルト値:1日 |
Maintenance Window Start/End | メンテナンスウィンドウの開始/終了時間 | デフォルト値:リージョン毎に決められた8時間枠のうちのランダムな30分間 |
Allow Version Upgrade | Amazon Redshift エンジンの自動バージョンアップの設定 | デフォルト値:自動バージョンアップ有効 |
- Database Nameについて
- クラスター作成時に「dev」という名前のデフォルトデータベースが作成されます。
- データベースはクラスター作成時に任意の名前を指定できるほか、クラスター作成後に
create database
コマンドで作成することも可能です。(作成できるデータベース数は最大60個。)
- 以下の項目はクラスター作成後に変更が可能です。
- Cluster Identifier
- Cluster Parameter Group
- セキュリティグループ
- Master User Password
- HSMの設定(HSM Connection、HSM Client Certificate)
- Automated Snapshot Retention Period
- Maintenance Window Start/End
- Allow Version Upgrade
- マネージメントコンソールからAmazon Redshift クラスターを作成する場合、以下の設定は作成時に指定できません。(デフォルト値が適用されます。)クラスター作成後に必要に応じて設定を変更します。(AWS CLIやCloudFormationを使ってクラスターを作成する場合はこれらの設定値を指定できます。)
- Automated Snapshot Retention Period
- Maintenance Window Start/End
- Allow Version Upgrade
- デフォルトでメンテナンスウィンドウが割り当てられる各リージョン毎の時間枠は以下をご参照下さい。
Amazon Redshift クラスター - メンテナンスウィンドウ
Amazon Redshift クラスターの作成
それではAmazon Redshift クラスター作成の具体的な手順を見ていきましょう。今回はマネージメントコンソールを使用してクラスターを作成する手順をご紹介します。
まずはじめにVPC、サブネットなどを作成します。
VPCとサブネットの作成
今回は、サブネットはパブリックアクセス可能なサブネットを使用します。
セキュリティグループの作成
Inbound Rulesで5439を許可しておきます。
これ以降はAmazon Redshiftのマネージメントコンソールでの作業となります。
クラスターサブネットグループの作成
▼ Amazon Redshiftのマネージメントコンソールから、「Security」を選択
▼「Subnet Group」タブを選択し「Create Cluster Subnet Group」をクリック
▼ クラスターサブネットグループの「Name」、「Description」を入力し「VPC ID」を選択
▼ 「Availability Zone」と「Subnet ID」を選択し「Add」をクリック
▼ クラスターサブネットグループに選択したサブネットが追加されたことを確認し「Create」をクリック
▼ クラスターサブネットグループが作成されたことを確認
クラスターパラメータグループの作成
▼ Amazon Redshiftのマネージメントコンソールから、「Parameter Groups」を選択
▼ 「Create Cluster Parameter Group」をクリック
▼ 「Parameter Group Family」で「redshift-1.0」を選択。「Parameter Group Name」と「Description」を入力し「Create」をクリック
▼ クラスターパラメータグループが作成されたことを確認
Amazon Redshift クラスターの作成
ここまでで依存コンポーネントの作成が完了したので、続いてAmazon Redshift クラスターを作成していきます。
▼ Amazon Redshiftのマネージメントコンソールから、「Clusters」を選択
▼ 「Launch Cluster」をクリック
まずはクラスター全体の設定です。
▼ 以下を入力し「Continue」をクリック
- Cluster Identifier
- Database Name
- Database Port
- Master User Name
- Master User Password
- Confirm Password
次はノードの設定です。
▼ 以下を選択し「Continue」をクリック
- Node Type
- Cluster Type
- Number of Compute Nodes
今回は「dc1.large」の「Multi Node(2 Compute Node)」構成を選択しました。
最後にクラスターパラメータグループやVPCなどの設定です。
▼ 以下を選択し「Continue」をクリック
- Cluster Parameter Group
- Encrypt Database
- Choose a VPC
- Cluster Subnet Group
- Publicly Accessible
- Choose a Public IP Address(Publicly Accessible = Yesを選択した場合)
- Availability Zone
- VPC Security Group
- Create CluodWatch Alarm
▼「Publicly Accessible」を「Yes」にした場合のEIPの割り当て方法は以下の2通りから選択可能です。
- 「Choose a Public IP Address」で「Yes」を選択して、Amazon EC2で作成(Allocate)済みのEIPをクラスターに割り当てる。
- 「Choose a Public IP Address」で「No」を選択して、新規のEIPをクラスターに割り当てる。ここで割り当てたEIPはAmazon Redshiftサービスによって管理されるため(AWSアカウントに関連付けられないため)、Amazon EC2のマネージメントコンソール等からは管理できない。
EIP割り当ての詳細は以下をご参照下さい。
▼ 「Create CluodWatch Alarm」を「Yes」と選択すると、メトリクス「PercentageDiskSpaceUsed」に対してアラームを設定することが可能です。その他のアラームについてはクラスター作成後に設定可能です。
CluodWatchでのAmazon Redshiftの監視ポイントやアラームの設定方法については以下のブログエントリをご参照下さい。
▼ 最後に設定のサマリ画面が表示されるので、設定内容に間違いが無いことを確認し「Launch Cluster」をクリック
▼ 「Cluster Status」が「available」となればクラスターの作成完了です。
ノードの設定確認
マネージメントコンソールからクラスターの詳細情報画面を開き、ノードの情報を確認してみます。
[SSH Ingestion Settings]の下にNode IP Addressses:という項目が表示されます。
これを見るとクラスターがリーダーノード×1台とコンピュートノード×2台の構成になっており、Private IPのアドレスレンジからから3ノードとも指定したサブネット内で起動されていることが確認できます。
3つノードにはそれぞれPublic IPも指定されていますが、これらはクラスターに割り当てたEIPとは別物です。
EIP は、VPC の外にあるクラスターにアクセスするための IP アドレスですが、[SSH Ingestion Settings] の下の Amazon Redshift console に表示されているクラスターノードパブリック IP アドレスおよびプライベート IP アドレスに関連していません。パブリックおよびプライベートクラスターノードの IP アドレスは、クラスターがパブリックにアクセス可能であるかどうかに関係なく表示されます。それらは、Amazon EC2 インスタンスまたは Secure Shell(SSH)の接続を使用するその他のリモートホストからデータをロードする際に、リモートホスト上で Ingress ルールを設定するための特定の状況でのみ使用されます。
これらのIPアドレスは、例えばリモートホストからAmazon RedshiftへCOPYコマンのでデータをロードする場合などに使用されます。
自動スナップショットの保存期間などの設定
クラスター作成時に指定出来なかった、以下の設定を変更してみます。
- Automated Snapshot Retention Period
- Maintenance Window Start/End
- Allow Version Upgrade
▼ クラスターの詳細情報画面を開く
▼ 「Cluster」-「Modify」を選択
▼ 設定を変更し、「Modify」をクリック
▼ 設定が反映されたことを確認
Amazon Redshift クラスターへの接続確認
疎通確認としてpsql
コマンドで作成したAmazon Redshift クラスターへ接続してみます。
クラスターの詳細情報画面からクラスターのエンドポイントを確認します。
psqlコマンド
で接続します。
$ psql -h my-dw-instance.xxxxxxxxxxxx.ap-northeast-1.redshift.amazonaws.com -U root -d mydb -p 5439 Password for user root: psql (9.4.4, server 8.0.2) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: on) Type "help" for help. mydb=#
データベースの一覧を確認してみます。
mydb=# \list List of databases name | owner | encoding | access privileges --------------+-------+----------+------------------- dev | rdsdb | UNICODE | mydb | root | UNICODE | padb_harvest | rdsdb | UNICODE | template0 | rdsdb | UNICODE | rdsdb=CT/rdsdb template1 | rdsdb | UNICODE | rdsdb=CT/rdsdb (5 rows)
デフォルトで作成されるdevと、クラスター作成時に指定したmydbの存在が確認できます。
JDBCやODBCでの接続方法については以下をご参照下さい。
- JDBC 接続を設定する - Amazon Redshift
- ODBC 接続を設定する - Amazon Redshift
- Amazon Redshift カスタムJDBCドライバを使い倒す | Developers.IO
- Amazon Redshift カスタムODBCドライバを試してみました | Developers.IO
まとめ
同じRDBということもあり、基本的な設定項目はRDSと共通していますが、Amazon Redshiftならでは項目については設定に迷う部分もあるかと思います。本ブログエントリがAmazon Redshift クラスターを作成する際の一助となれば幸いです。