LakeFormationで作るデータレイク

こんにちは、開発チームの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の設定

ここが一番ややこしく感じました。

設定することで、データベース・テーブル・カラム × アカウント・ロール単位といった細かい粒度でのデータへのアクセス制御を行えます。 全てのデータを入れることのできるデータレイクだからこそ、アクセスできるデータとできないデータを細かく設定することでセキュリティリスクを低減させます。

https://docs.aws.amazon.com/lake-formation/latest/dg/images/TBAC_example_tags.png

AWS Lake Formationより

テーブル・カラムとアカウントそれぞれにタグをつけて管理するイメージです。

タグを作成します

データベース・テーブル・カラムごとにタグを付与します

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で可視化してみたりと、調理方法は無限大です☺️

テックアカデミーチームでもどんどんデータを活用していきたいと思います💪

参考資料

booth.pm www.nikkeibp.co.jp

*1:Glueをまず触ってみたいという方は、ハンズオンを試してみるのがわかりやすくおすすめです。 (下記リンクの "はじめてのデータレイクハンズオン ~データの可視化と整形をやってみよう編~" から資料&動画が参照可能です) aws.amazon.com