このハンズオンで学んだこと
このハンズオンを実践して出来るようになったことは以下です。
・Amazon Redshift と Amazon QuickSight を利用したデータ分析環境の構築
・Amazon QuickSight を利用し、Amazon Redshift のデータ読み込み、データ分析の可視化を実行
また、これらの AWSサービスが接続し連携するための IAMロール作成についても、
どのサービスに対して、どのポリシーが必要で、どのようにアタッチするのか、を学べました。
IAM ロールの作成およびアタッチは(セキュリティの観点も含め)環境構築時の非常に重要な要素なので、簡単にではありますが一連の流れを学べたのは良かったです。
構成と利用サービスについて
今回構築した構成はこちらです。
めちゃくちゃシンプルですが、これくらいシンプルな方が初心者の自分にとっての学びの入り口としては入りやすく、肩の力を抜いて取り組めました。
構成図で示している通り構築するにあたって利用したAWSサービスは以下です。
・Amazon S3
・Amazon Redshift
・Amazon QuickSight
それぞれのサービスがどのような役割を持っているのか、少し説明します。
・Amazon S3
S3 はデータを格納するデータレイクの役割を担っています。
データレイクとは、多数のソースからデータを元の形式のまま保存しておくためのリポジトリです。
データの形式とは構造化データ/半構造化データ/非構造化データがあり、それらを変換せずに保存しておきます。
変換せずに保存しておくことで、S3 と連携する先のサービスでデータが必要になった時の利用用途に応じて活用することができます。
・Amazon Redshift
Redshift はデータウェアハウスという、データを格納する役割を担っています。
S3 と似た働きをしていますが明確な違いとして、データウェアハウスは構造化されたデータを格納しています。
構造化されたデータとはすなわち、トランザクションシステムや業務データベース、基幹業務アプリケーションからのリレーショナルデータなどです。
また、Redshift には以下の特徴もあります。
・ペタバイト級までスケールアウト可能
・フルマネージドサービス
・ピークタイムも自動的にクラスターを拡張
・列指向型のデータ格納
→ 処理速度が行指向型と比べて早い
・Amazon QuickSight
Amazon QuickSight はビジネス分析(BI)サービスとして、AWS に蓄積されたデータ利用したダッシュボードを作成して可視化・分析する役割を担っています。
QuickSight はサーバーレスでスケーラブルな BIツールなので、サーバー構築の必要がありません。
また、ローカルからファイルをアップロードしたり S3 上のデータを取り込んでBIを利用することができ、Redshift と組み合わせることでより高いレスポンスを実現することが可能となります。
構築時のポイント
その1
Resshift から他AWSサービスと接続するためには IAM ロールが必要となり、今回の構築では S3 からデータをロードするために必要となります。
手順としては IAM からロールを作成する際にサービスまたはユースケースで Redshift を選択し、ユースケースで Redshift - Customization を選択しています。
許可ポリシーについてはS3からデータをロードするために必要なので、【AmazonS3ReadOnlyAccess 】を選択しました。
ここで作成したロールを、Redshift クラスター作成時に関連付けられた IAM ロールで忘れずに設定しましょう。
その2
Redshift 作成後のネットワーク設定変更は出来ないので(追加設定は可能)、事前にアタッチするネットワークをしっかり決めておく必要があります。
尚ノード数やインスタンスタイプは後から変更することも可能です。
その3
Redshift へデータロードを実行する際は、S3 にデータを格納して COPY コマンドで Bul kLoad する方法がRedshift でのデータロードベストプラクティスとなります。
その他のベストプラクティスとしては以下があります。
・テーブル毎に1つの COPY コマンドを使う
・データは複数ファイルに分割しておく
・データファイルは GZIP,ZSTD などで圧縮
・1ファイルあたりのサイズは圧縮後 1MB ~ 1GB に収まるサイズにする
その4
Redshift 側と QuickSight 側でそれぞれセキュリティグループを設定し、相互通信可能な状態にします。
セキュリティグループの作成順序は以下です。
1.Reshift 用のセキュリティグループを作成する
設定値はデフォルトのまま今回は作成しました。
2.QuickSight 用のセキュリティグループを作成する
インバウンドルールに Redhift 用セキュリティグループを指定します。
3.Redshift 用のセキュリティグループに QuickSight からの通信を許可する
Redshift 用のセキュリティグループから【インバウンドのルールを編集】を選択し、タイプに【Redshift】、ソースに QuickSight 用のセキュリティグループを指定します。
ここまで完了した時点ではセキュリティグループ間の相互通信が可能な状態ですが、QuickSight と QuickSight 用のセキュリティグループが紐づいていません。
そのため、Redshift と QuickSight の VPC 間接続を可能にする必要があります。
設定方法としては以下となります。
1.QuickSight画面の右上から【QuickSightを管理】を選択する
2.VPC 接続の管理 > VPC 接続の追加 を選択する
3.セキュリティグループIDに QuickSight 用に作成したセキュリティグループのIDを指定する
上記の設定を行うことで、QuickSight が VPC に 作成された ENI から QuickSight 用のセキュリティグループを通して Redshift と接続することができるようになります。
躓いたポイント
概ねハンズオン動画で解説されている設定を実行することでスムーズに構築していけましたが、いくつか躓いた箇所があったので記載しておきます。
その1
Redshift クラスター作成時に設定するサブネットについてです。
このハンズオン動画ではデフォルト値のまま設定していましたが、私は自分で作成したVPCを設定したかったので選択しようとしたところ、アタッチしたいVPCがグレーアウトされていて選択できない状態でした。
調べてみるとサブネットグループが作成されていない事が原因だと判明したので、Redshift の設定からサブネットグループを作成することで選択できるようになりました。
その2
QuickSight から VPC 接続の追加をする際に以下のエラーにより追加する事が出来ませんでした。
原因は指定したロール(aws-quicksight-service-role-v0)に Action と Resource が定義されていないためで、AWS 公式ドキュメントにも記載のある通り、VPC 接続を作成、削除、変更するIAMポリシーを追加する必要があります。
記述したポリシーは以下です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateNetworkInterface",
"ec2:ModifyNetworkInterfaceAttribute",
"ec2:DeleteNetworkInterface",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
}
]
}
まとめ
いくつか躓いたポイントがありながらも、公式ドキュメントを参照しながら解決方法を見つけて最後までやりきることができました。
構成としては S3, Redshift, QuickSight 3つのサービスで構成されるとてもシンプルな構成のデータ分析基盤構築でしたが、そもそもデータレイクとは?データウェアハウスとは?の状態からスタートし、実践していくうちに役割の違いを理解した上で終える事が出来たので、入門としてはとても入りやすい良いハンズオンでした。
データ分析基盤に興味がある方はぜひトライしてみることをおすすめします。