Redshift+QuickSightでS3のデータを分析してみた

こんにちは、保険システム部の照屋です。
今回は、Redshiftを構築し、クエリを実行して、S3にあるCSVファイルを分析してみます。
さらに、QuickSightとの連携を行って、データの可視化も行います。

Amazon Redshiftとは

RedshiftとはAWSが提供するフルマネージド型のデータウェアハウスサービスです。
Redshiftは、PostgreSQLをベースに構築されており、PostgreSQLの構文を使用してアクセスすることが可能です。
また、データを並列で処理しているため、高速にデータの読み出しや分析を行うことができます。
そのため、大規模なデータを処理することを得意としています。

Redshiftの構築

Redshiftの構築には、VPCやサブネットの作成を行う必要があります。
最初に、VPCとサブネットの作成から行っていきます。

構成図

今回のゴールとなる構成図は以下のようになります。
Redshiftを構築して、QuickSightと連携することでデータを可視化します。
しかし、Redshiftはプライベートサブネットにあり、QuickSightから直接アクセスすることができません。
そのため、RedshiftとQuickSightの間に踏み台となるプライベートサブネットを構築し、QuickSightとのVPC接続を設定します。

AWS構成図

VPCの作成

VPCのコンソール画面を開き、「VPC」タブから「VPCを作成」をクリックします。

VPCを作成

VPCの設定画面で、VPCの名前やIPv4CIDRを設定します。

VPCの設定

入力が完了したら、「VPCを作成」をクリックします。

Redshift用のサブネットを作成

作成したVPC内に、サブネットを作成します。
下図のオレンジの枠で囲われている部分を構築していきます。

構築する部分

VPCのコンソール画面で、「サブネットを作成」をクリックします。

サブネットを作成

サブネットを作成するVPCとして、先ほど作成したVPCを選択します。
サブネットの設定欄で、サブネット名、アベイラビリティ-ゾーン、CIDRブロックを設定します。

サブネットの設定

入力が完了したら「サブネットを作成」をクリックします。

クラスターサブネットグループの作成

Redshiftのコンソール画面で、「設定」タブの「サブネットグループ」を選択します。

Redshift, サブネットグループの作成

「クラスターサブネットグループの作成」をクリックします。

Redshift, クラスターサブネットグループの作成

クラスターサブネットグループの詳細欄で、クラスターサブネットグループの名前と説明を入力します。
サブネットの追加欄で、作成したVPCとサブネットを選択し、「サブネットを追加」をクリックします。
サブネットの追加まで完了したら、「クラスターサブネットグループの作成」をクリックします。

Redshift, サブネットの追加

クラスターの作成

Redshiftのコンソール画面で、「クラスター」タブの「クラスターを作成」をクリックします。

Redshift, クラスターの作成

次の画面で、クラスターを作成していきます。
クラスター設定で、クラスター識別子とノードの種類・数を入力します。
今回はノードの種類として、最も安価で利用できる「dc2.large」を選択し、ノードの数は1つで設定します。

Redshift, クラスターの設定

続いて、データベース設定で、管理者ユーザー名とパスワードを設定します。
クラスターの許可欄では、RedshiftやS3へのアクセス権限が付与されたIAMロールを関連付けます。
設定が完了したら、画面下部にある「クラスターを作成」をクリックします。

Redshift, データベース設定

S3のデータをRedshiftへロード

クラスター作成後に「クラスター」タブをクリックすると、作成したクラスターが表示されています。
作成したクラスターをチェックし、「Query in query editor」か「Query in query editor v2」のどちらかをクリックしてエディタを開きます。(今回は「Query in query editor v2」をクリックします。)

Redshift, エディタを開く

S3のデータをロードする前に、Redshiftクラスターにテーブルを作成します。

Redshift, テーブル作成

S3のデータをRedshiftにロードするには、COPYコマンドを使用します。
FROMには、ロードするファイルのパスを入力します。
iam_roleには、クラスター作成時に紐づけたIAMロールのARNを指定します。
今回はCSVファイルをロードするため、delimiterに’ , 'を指定します。
そして、IGNOREHEADERに1を指定することで、1行目をヘッダーとして扱い、ロードしないという設定が可能になります。

Redshift, S3データのロード

データのロードが完了したら、SELECT文を実行し、正しくロードできているか確認します。

Redshift, ロード確認

正しくロードできていることが確認出来たら、Redshiftの構築は完了です!

QuickSightへの連携

Redshiftにロードしたデータを可視化して分析するために、QuickSightへの連携を行います。
しかし、今回構築したRedshiftクラスターはプライベートサブネット内にあるため、現在の状態ではQuickSightからアクセスすることができません。
そのため、QuickSightからRedshiftクラスターへのVPC接続を行います。
VPC接続を行うためには、新しくサブネットとセキュリティグループを作成する必要があります。

QuickSightアクセス用のサブネットを作成

下図のオレンジの枠で囲われている部分を構築していきます。

構築する部分

今回作成したVPC内に、QuickSightアクセス用のサブネットを作成します。

Quicksightアクセス用サブネット作成

QuickSightアクセス用のセキュリティグループの作成

セキュリティグループ(Security group1)を作成して、下図のオレンジの枠で囲われた部分で通信を行えるようにします。

構築する部分

VPC内にセキュリティグループ(Security group1)を作成していきます。
Redshiftクラスターからの通信を許可するインバウンドルールを追加します。
「タイプ」は「すべてのTCP」を選択し、「ソース」にはVPCを作成した際に自動で作成された、Redshift用のセキュリティグループ(Security group2)のIDを入力します。

Quicksightアクセス用セキュリティグループ作成, インバウンドルール

Redshiftクラスターへのトラフィックを許可するアウトバウンドルールも追加します。
「タイプ」は「カスタムTCP」を選択し、「ポート範囲」にはRedshiftポートである「5439」を入力します。
「ソース」にはインバウンドルールで設定したセキュリティグループIDを入力します。

アウトバウンドルール

以上で、QuickSightアクセス用のセキュリティグループの作成が完了しました。

Redshift用のセキュリティグループを編集

VPCを作成した際に、自動的にデフォルトで作成されるRedshift用のセキュリティグループ(Security group2)を編集していきます。
QuickSightアクセス用のセキュリティグループ(Security group1)からのトラフィックを許可するインバウンドルールを追加します。
「タイプ」は「Redshift」を選択し、「ソース」にはQuickSightアクセス用のセキュリティグループIDを入力します。

デフォルトセキュリティグループの編集, インバウンドルール

QuickSightアクセス用のセキュリティグループ(Security group1)へのトラフィックを許可するアウトバウンドルールを追加します。
「タイプ」は「すべてのTCP」を選択し、ソースにインバンドルールで設定したセキュリティグループIDを入力します。

セキュリティグループの編集(アウトバウンド)

以上でデフォルトのセキュリティグループの編集が完了しました。

VPC接続の追加

下図のオレンジの枠で囲われた部分を構築していきます。

構築する部分

QuickSightのVPC接続を追加します。
QuickSightコンソール画面右上の、ユーザー名をクリックし、「QuickSightの管理」を選択します。

Quicksight, Quicksightの管理

次の画面で「VPC接続の管理」をクリックし、「VPC接続の追加」をクリックします。

Quicksight, VPC接続の追加

VPC接続の追加画面で、VPC接続名、VPC ID、サブネットID、セキュリティグループIDを入力します。

Quicksight, VPC接続の追加

入力が完了したら、「作成」をクリックします。
以上でVPC接続の追加が完了しました。

データセットの作成と分析

QuickSightコンソール画面の「データセット」タブの「新しいデータセット」をクリックし、データセットを作成します。
データセットを作成する画面で、「Redshift」クリックします。

Quicksight, データセットを作成

次の画面で、データソース名を入力し、インスタンスIDで今回作成したRedshiftクラスターを選択します。
接続タイプでは、先ほど作成したVPC接続を選択し、クラスター作成時に設定したしたユーザ名とパスワードを入力します。
入力が完了したら「データソースを作成」をクリックします。

Quicksight, データソースを作成

次のテーブル選択画面で今回作成したテーブルを選択します。

Quicksight, テーブルの選択

データセット作成の完了画面では、SPICEへインポートをチェックし、「Visualize」をクリックします。

Quicksight, データセット作成完了

次の画面で、実際にデータを可視化して分析を行うことができます。

Quicksight, 分析

以上でQuickSightへの連携が完了しました!

さいごに

今回は、Redshiftの構築からQuickSightへの連携まで行いました。
QuickSightへの連携では、プライベートサブネットに作成したRedshiftクラスターに対してVPC接続を行うため、複雑な手順が必要でした。
しかし、VPCやサブネット、セキュリティグループなど様々なサービスを触る機会となりました!