Amazon RedshiftのデータをAmazon QuickSightを使って分析するハンズオンをやってみた

Amazon RedshiftのデータをAmazon QuickSightを使って分析するハンズオンの紹介です。Redshift、QuickSight等に触ったことが無い方におすすめのハンズオンです。
2022.10.10

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

お疲れさまです。とーち(@tttkkk215) です。
今まであんまり AWS のデータ分析周りのサービスに触れてこなかったんで、勉強のために以下のハンズオンをやってみました。内容や感想等共有しようと思います。

このハンズオンはどんな人におすすめ?

  • Amazon Redshift(以下 Redshift)をとりあえず触ってみたい方
  • Amazon QuickSight(以下 QuickSight)をとりあえず触ってみたい方
  • QuickSight と Redshift がどのように連携するか実際に試してみたい方

ハンズオン目次

ハンズオンの目次は以下のようになっています。

  1. [説明] 今回のハンズオンで構成する構成等の紹介
  2. [説明] Amazon Redshift の概要
  3. [ハンズオン] Amazon Redshift クラスターのセットアップ
  4. [ハンズオン] Amazon Redshift クラスターへのデータロード
  5. [ハンズオン] Amazon Redshift に対してクエリ実⾏
  6. [説明] Amazon QuickSight の概要
  7. [ハンズオン] Amazon QuickSight のセットアップ
  8. [ハンズオン] Amazon QuickSight を⽤いた可視化

以下、上記の目次に沿って内容を書いていきます。

1. [説明] 今回のハンズオンで構成する構成等の紹介

座学部分です。そもそもデータ活用とは何なのかというところから説明されています。

パソコン上の表計算ソフトや RDBMS を使ってもデータ活用はできるのですが、その中でなぜあえてデータウェアハウスが必要となるのかといった説明がされています。


画像引用: ハンズオンの資料より

また本ハンズオンで構成するシステム構成についても紹介されます。


画像引用: ハンズオンの資料より

2. [説明] Amazon Redshift の概要

Redshift の概要についての説明です。一般的な RDBMS と Redshift でのデータの持ち方の違いについても説明されています。


画像引用: ハンズオンの資料より

3. [ハンズオン] Amazon Redshift クラスターのセットアップ

Redshift クラスターのセットアップをしていきます。一部ハンズオン資料の通りにいかなかった部分があったので自分の実施した手順を記載します。

  1. Redshift 用の IAM ロールを作成します。必要なポリシーは「AmazonS3ReadOnlyAccess」管理ポリシーのみです。
  2. Redshift クラスターを作成していくのですが、いきなり「無料トライアル」設定の Redshift クラスターを作成しようとするとエラーになりました。先に Redshift 用のサブネットグループを作成しておく必要があるようです。画面左のナビゲーションペインから「設定 → サブネットグループ」を選んで「クラスターサブネットグループの作成」ボタンを押すことで作成画面に移ります。今回はプライベートサブネットのみを含めたサブネットグループにしました。
  3. 続いて Redshift クラスターを作成します。画面左のナビゲーションペインから「クラスター」を選んで、「クラスターを作成ボタン」を押します。設定は以下のようにしました。なお、サブネットグループの設定項目は「無料トライアル」設定では出てこないのですが、作成されたクラスターを見ると事前に作成したサブネットグループが設定されていました。
  4. 無料トライアル設定の場合、Redshift クラスター作成画面では上記の項目しか設定できないので、作成したクラスターのプロパティタブ内にある「クラスターの許可」設定から IAM ロールを追加します。

4. [ハンズオン] Amazon Redshift クラスターへのデータロード

この項目では S3 上に格納したファイルから Redshift クラスターへのデータロードを行います。以下は自分が行った手順になります。

  1. S3 バケットを作成。デフォルト設定で作成しました。
  2. AWS コンソールから本ハンズオンでダウンロードできるファイルを作成した S 3にアップロードします。
  3. Redshift への接続
    AWS コンソールから Redshift のサービス画面に移り、クエリエディタを開きます。ハンズオンではクエリエディタ v1 を使用していましたがせっかくなので v2 を使ってみました。v1 では最初に Redshift 接続のためのユーザ名、パスワード等の情報を入力する必要がありますが、v2 では AWS コンソールへのアクセスに使用している IAM ユーザまたは IAM ロールの権限を使って Redshift にアクセスするのでパスワード等の情報を入力する必要がありません。
    ただし、IAM ユーザまたは IAM ロールに「AmazonRedshiftQueryEditorV2FullAccess」等の権限が必要になります。

    クエリエディタ v2 アクセスに関する参考資料:AWS アカウントの設定 - Amazon Redshift
  4. Redshift 上でテーブルの作成
    ハンズオンの内容に則りテーブルを作成しようとしたところ「既にテーブルがあるぞ」と怒られました。
    どうやら、2022/10/5 時点の Redshift では「無料トライアル」設定で作成するとサンプル DB も一緒に作成され、サンプル DB の中身はハンズオンで作成するものと一部が一致しているので、エラーとなったようです。
    ざっと確認した限りではハンズオンで作成する予定のものと同じカラムをもつテーブルが存在していたので、テーブル作成の手順はスキップしました。
  5. Redshift 上のテーブルにデータをロード Redshift 上のテーブルに S3 からデータをロードしていくのですが、「無料トライアル」設定で作成されたテーブルには既にデータが入っているので一旦それを消してからデータのロードを行っています。以下は実行した SQL です。
  • テーブル内データの削除と削除されたことの確認
    DELETE FROM "dev"."public"."users";
    DELETE FROM "dev"."public"."date";
    DELETE FROM "dev"."public"."sales";
    SELECT FROM "dev"."public"."users";
    SELECT FROM "dev"."public"."date";
    SELECT FROM "dev"."public"."sales";

  • S3 からのデータロード

    COPY users from 's3://[S3 バケット名]/ticketdb/allusers_pipe.txt' iam_role '[ロール ARN]' delimiter '|' ;
    COPY date from 's3://[S3 バケット名]/ticketdb/date2008_pipe.txt' iam_role '[ロール ARN]' delimiter '|' ;
    COPY sales from 's3://[S3 バケット名]/ticketdb/sales_tab.txt' iam_role '[ロール ARN] ' delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS';

またこの項目では、redshift のデータロードのベストプラクティスについても触れられていたのでご紹介しておきます。

  • データロードには S3 上のファイルをソースとした COPY コマンドを使う
  • テーブルごとに一つの COPY コマンドを使う
  • データは複数ファイル(クラスタースライス数の倍数)に分割する
  • データファイルは GZIP 等で圧縮
  • 1ファイルあたりのサイズは圧縮後 1MB-1GB に収めるようにする

クラスターのスライス数というのがわかりにくかったのですが、クラスターを構成するノードサイズにより1ノード辺りのスライス数が決まってくるようです。

参考:Amazon Redshift クラスター - Amazon Redshift

5. [ハンズオン] Amazon Redshift に対してクエリ実行

クエリエディタから select 文を発行して、結果が得られることを確認します。後の QuickSight での結果と見比べて一致していることを確認するために Redshift 上でもクエリ実行しています。

6. [説明] Amazon QuickSight の概要

QuickSight の概要の説明になります。QuickSight は AWS のサーバレスで実行できる BI ツールです。BI ツールとはざっくり言うとデータを分析して見える化をするためのツールになります。
画像引用: ハンズオンの資料より

7. [ハンズオン] Amazon QuickSight のセットアップ

QuickSight のセットアップをしていきます。流れとしては以下の通りで、ハンズオンに従っていけば完了します。

  1. QuickSight のサインアップ
  2. セキュリティグループの作成と設定
    Quicksight と Redshift 間の接続は以下のようになるので下図の ENI に紐づくセキュリティグループを作成します。Redshift 用のセキュリティグループはクラスター作成時に作成されるのでそれを変更すれば OK です。

    画像引用: ハンズオンの資料より
    セキュリティグループの内容としては以下のようになります。

    • Quicksight 用:インバウンドルールに Redshift 用セキュリティグループからのすべての TCP 通信を許可
    • Redshift 用:インバウンドルールに Quicksight 用セキュリティグループからの TCP:5439 ポートの通信を許可
  3. Redshift 接続用の VPC 接続設定 QuickSight 設定画面から VPC 接続設定をします。 ちなみに料金を節約するために最初 QuickSight のスタンダードプランを使用したのですが、スタンダードプランでは「Virtual Private Cloud (VPC) のサポート」がないためハンズオンをすすめることが出来ませんでした。素直にエンタープライズプランで作成しましょう。

    参考:Amazon QuickSight サブスクリプションの Standard Edition から Enterprise Edition へのアップグレード - Amazon QuickSight

    また、QuickSight 設定画面から VPC 設定をする際に ENI を作成するサブネットを選択するのですが、こちらは一つしか選べないようでした。サブネットが一つということは Redshift に接続するための ENI も一つしか作成されないので可用性が気になるところです。(BI ツールなのでそこまで可用性が求められるケースがないのかもしれませんが)
    なお、試しに QuickSight 設定画面の VPC 接続設定を2つ作ってみたところ ENI の状態は以下の通りとなったので、一つしか使われないようです。

8. [ハンズオン] Amazon QuickSight を用いた可視化

QuickSight を使って Redshift 上のデータを可視化します。ハンズオンの通りにすすめると以下のように QuickSight からも Redshift でクエリ実行した結果と同じ結果が確認できるのが体験できます。
画像引用: ハンズオンの資料より

まとめと感想

Redshift を絡めたデータ分析周りのサービスをとりあえず触ってみたかったのでとても参考になりました。またこのハンズオンで作成された構成を使って更に別の機能を試す等の足がかりにもなるかと思います。

本ブログでは省略していますが、QuickSight の使い方といった面でも実際に操作して体験できるので感触を掴めるかと思います。本ブログを見て気になった方はぜひ登録して実際に試してみてください。