こんにちは、開発チームのmです。 今回はAWSのサービスであるLakeFormationを使ったデータレイクづくりについてご紹介いたします☺️
データレイクとは
ざっくりいうと、構造化データ(DBのデータなど)も非構造化データ(動画など)もまるっといれて置いておける場所です。 DWH(データウェアハウス)と違い、整形したものではなく生のままのデータを入れられるため、分析や機械学習など利用シーンを限定しません。 aws.amazon.com
LakeFormationとは
AWSのサービスの一つで、データレイクの構築を簡単に行うことができます。 aws.amazon.com LakeFormationは、AWS Glue*1 のラッパーで、より簡単にデータレイクを構築できるようになっています。 特にBlueprintsという機能では、ポチポチっとするだけでワークフローを自動で生成することができます。
今回はBlueprintsを使って、DBデータをデータレイクに入れるワークフローを作成し、Athenaからデータを参照できるようにしました。
早速つくってみる
事前準備
VPC内で構築する場合、下記の設定が必要になります。
- RDSのセキュリティグループのインバウンドルールに自己参照ルールを追加
- RDSがあるVPCにS3のエンドポイントを作成 docs.aws.amazon.com
LakeFormationの初期設定
Lake Formation の使用の開始 - AWS Lake Formationに従ってに設定します。 操作する方はIAM作成などの権限を持っている必要があります。
S3バケットの作成
データレイクとなるS3バケットをあらかじめ作成しておきます。
データベース作成
Glueのデータカタログのメタデータを保存するデータベースです。Athenaでの参照時に使われます。
DBへの接続設定(Glue)
抽出したいDBに接続できるように、接続先の設定を行います。 接続先はRDSなどの各種DBサービスから選べます。JDBCを選んで自分で設定することも可能です。
Permissionの設定
ここが一番ややこしく感じました。
設定することで、データベース・テーブル・カラム × アカウント・ロール単位といった細かい粒度でのデータへのアクセス制御を行えます。 全てのデータを入れることのできるデータレイクだからこそ、アクセスできるデータとできないデータを細かく設定することでセキュリティリスクを低減させます。
テーブル・カラムとアカウントそれぞれにタグをつけて管理するイメージです。
タグを作成します
データベース・テーブル・カラムごとにタグを付与します
IAM(もしくはrole)にタグを付与し、許可する操作を選択します
BluePrintsの設定
BluePrintsのタイプを選択します
今回は、実行時に全てのデータを更新したかったので Database snapshot
にしました。
Incremental database
を選ぶと増分アップデートが可能なので、データ内容によってはこちらでも○
- Database Connection: Glue上で設定した、DBの接続情報を選びます。
- Source data Path: 抽出したいデータベース、テーブルを設定します。ワイルドカード(
%
)の指定も可能です。sample-database/%
とすると、sample-databaseの中の全てのテーブルが抽出されます。 - Exclude pattern: 上で指定したものの中で、抽出したくないデータベース、テーブルが設定できます。パスワード情報や管理者情報など、データ活用に必要なくセキュリティリスクの高いデータはここで除外すると良さそうです。
- Target database: Glue上で設定した、データベースを選択します。
- Target storage location: データレイクとするS3バケットを選択します。
- Data format: データ保存の型を選択します。データを使用する際のパフォーマンスに影響するので、今回は列指向型のParquetを選択しました。
- frequency: 実行頻度を設定します。随時か日付実行を選択。cron形式で指定も可能です。
- Workflow name: ワークフローの名前
- IAM role: ワークフローを実行するIAM(ここでは初期設定で作成した
LakeFormationWorkflowRole
) - Table prefix: RDSでのテーブル名の前に付きます
- Maximum capacity: ジョブ実行時に割り当てられるDPUの最大数
- Concurrency: ジョブの最大同時実行数
できあがり
こちらができあがったワークフローです。一つ一つのジョブを設定することを考えると、ありがたさが身にしみますね。
Athenaで確認
AWSDataCatalogの中に今回作成したデータベースが追加されており、RDS上のデータが入っていることが確認できました😽
おわりに
データレイクができてしまえば、AWS GlueのETL機能を使ってデータの整形を行ったり、Amazon SageMakerから機械学習を行ってみたり、Amazon QuickSightで可視化してみたりと、調理方法は無限大です☺️
テックアカデミーチームでもどんどんデータを活用していきたいと思います💪
参考資料
*1:Glueをまず触ってみたいという方は、ハンズオンを試してみるのがわかりやすくおすすめです。 (下記リンクの "はじめてのデータレイクハンズオン ~データの可視化と整形をやってみよう編~" から資料&動画が参照可能です) aws.amazon.com