はじめてのRedshift

# はじめてのRedshift

## 勉強前イメージ

AWSのDBのうちの1つってイメージ
そんなイメージしかない
ほかと何が違うんやろ

## 調査

### Redshiftとは

データウェアハウスサービスです
データウェアハウスとは複数のシステムから大量のデータを蓄積し、必要なデータを収集し、目的別に再構成した統合データベースです
BI(ビジネスインテリジェンス)ツールと呼ばれています。
特徴としては、以下になります。

- 時系列順に保存する
- データの更新や削除は行わない
BigQueryやVerticaもデータウェアハウスになります。

### Redshiftの特徴

- 列指向データベース
- 簡単にインスタンス追加が出来る

### Redshiftのクラスタを作って中に入ってみよう

#### 概要

1. Redshiftのクラスタを作成します
2. 同じVPC内に作成したEC2にssh接続します
3. EC2からクラスタにアクセスを行います

![gaiyouUntitled Diagram.drawio - diagrams.net - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a28843a8-971a-61a0-c14d-1bc67c6e695a.png)


#### Redshiftでクラスタを作成する

- Redshiftの管理画面でクラスタを作成

![1Redshift - Google Chrome 2020-12-11 21.26.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/98903163-8bf7-2e57-0a8b-cdf86c656229.png)


- クラスタの設定

以下のクラスタの設定を行います
クラスタの識別子 : my-test-claster (クラスタの名称)
利用方法 : 無料トライアル (今回はテストで作成なので...)

![2Redshift - Google Chrome 2020-12-11 21.27.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ed32ce5e-6864-199d-da1f-68823f44acaf.png)


- データベース設定

データベース名 : dev (デフォルト)
マスターユーザ名 : awsuser (デフォルト)
マスターユーザーのパスワード : 任意
上記の記載を行ったら、 `クラスタを作成` で作成を行います

赤で囲っていない、データベースポートは今回デフォルトのままで設定しますが、
もし変更される際は、後から設定するセキュリティグループのポート番号も合わせて変更してください

![3Redshift - Google Chrome 2020-12-11 21.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/b06622a6-e46b-0ccc-6413-d10799bf09eb.png)


- 作成されました

作成中と出ています。
ちょっと時間かかります

![4無題 - ペイント 2020-12-11 21.31.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/48256487-fd90-2e43-c04b-7c1403fc9a99.png)


#### EC2のセキュリティグループを変更

接続するEC2インスタンスのセキュリティグループの変更を行います。

- セキュリティグループの変更

EC2のセキュリティグループに移動
接続するEC2インスタンスののセキュリティグループにチェックを入れて
アクション > インバウンドルールを変更 へ進む

![5無題 - ペイント 2020-12-11 21.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ec17cebf-29e2-cfeb-511e-b0f8f29790e3.png)


- インバウンドルールの変更

元々あったsshのルールの追加に、Redshiftに接続するセキュリティグループの追加
タイプ : カスタムTCP
ポート範囲 : 5439
ソース : 0.0.0.0/0
記載したら、 `ルールを保存` してください

このポート番号はRedshiftの `データベース設定` の際に少しだけ書いたポート番号です。
Redshiftの設定のポート番号を変更するとこちらのセキュリティグループの設定も合わせて変更してください

![6無題 - ペイント 2020-12-11 21.42.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/423a647c-5fbb-dde9-66a1-70e9fcd59274.png)


- セキュリティグループの設定完了

きちんと追加されていました！

![7無題 - ペイント 2020-12-11 21.47.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/09980972-fd7b-0be3-6941-f90e7153663a.png)


#### 接続する

- EC2インスタンスにログイン

任意のEC2インスタンスにログインしてください

- psqlコマンドでログインを行う

psqlコマンドが入っていない方は `yum install postgresql` でインストールしてください

接続コマンドは以下になります。
`psql -h [エンドポイント] -U [マスターユーザー名] -d [データベース名] -p [ポート番号]`
最初に聞かれるパスワードはマスターユーザーのパスワードです

```
[root@ip-xx-xx-xx-xx ~]# psql -h my-test-claster.xxxxxxxxx.xxxxxxxxx.redshift.amazonaws.com -U awsuser -d dev -p 5439
Password for user awsuser: 
psql (9.2.24, server 8.0.2)
WARNING: psql version 9.2, server version 8.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

dev=# 
```

## 勉強後イメージ

とりあえず作って接続するところまで。
セキュリティグループであれれ？ってちょっとなった。
まぁ作るだけだったらそんな難しくないよね...
今度はデータ入れたり触ってみよう

## 参考

- [CRMとデータウェアハウス（DWH）との関係](https://www.advanlink.co.jp/crmconsultation/crm_dwh.html)
- [Amazon Redshift](https://qiita.com/leomaro7/items/d72eca73154f0609bf61)
- [第1回　Amazon Redshiftとは［前編］](https://gihyo.jp/dev/serial/01/redshift/0001)
- [はじめてのRedshift](https://qiita.com/nyasba/items/2586b172219776d694a6)
- [Amazon Redshift クラスターの作成手順](https://dev.classmethod.jp/articles/how-to-create-amazon-redshift-clusters/)
- [【AWS】Amazon Redshift のクラスター作成と起動から接続までの方法（入門編）](https://www.task-notes.com/entry/20150807/1438916400)
- [Redshiftでのクラスター構築](https://qiita.com/subretu/items/55a19435d8186239a7b7)