データレイクの構築・運用を担う「AWS Lake Formation」は具体的に何をしてくれるサービスかイメージ湧きますか?
サービス名からデータレイクそのものを構築してくれそうにも思えますが、実際にはデータレイクに必要な要素の一部をフォローしています。
文字だけだとイメージが湧きにくいので「AWS Lake Formation Workshop」を使って、そのサービス概要を理解していきます。
AWS Lake Formationとは
デベロッパーガイドの冒頭には次のように記述されています。
AWS Lake Formationは、データレイクの構築、セキュア化、および管理を簡単に実行できるフルマネージドサービスです。
この一文だけでLake Formationの概要を把握できる人はいないと思います・・・。
サービスを理解するには実際に手を動かすのが早い、ということで「AWS Lake Formation Workshop」を使ってサービス概要を理解していきます。
ただ本紙を和訳して同じことを説明するだけだと芸がないので、「英語で書かれているし概要を理解するために読むのは面倒だなぁ」という方向けにサービスのイメージが持てることを目的に、要点をピックアップして整理していこうと思います。
catalog.us-east-1.prod.workshops.aws
AWS Lake Formation Workshop
環境の準備
CloudFormationテンプレートが用意されているので、こちらを使ってワークショップ環境を準備します。
このテンプレートで生成されるリソースは下記の通りです。
EC2インスタンスが1台ありますが、RDSやS3に初期データを自動登録するためのものなのでワークショップ本体とは関係ないです。
Glueの基本(Glue Basics)
Lake FormationはAWS Glueと多くのリソースを共有しており、データカタログやジョブなどは両コンソールから参照・操作できます。
Glueの概要を押さえておくとLake Formationも理解しやすくなるので、ワークショップではGlueの説明から入っています。
Glueワークショップの内容は割愛しますが、ここではGlueの構成要素を図示して概要をおさらいしておきます。
GlueはETLサービスであり、データの抽出・変換・取込処理を司るのがジョブです。
SparkかPythonで記述でき、トリガーで定義した日時やイベントをきっかけに実行されます。
このジョブと同様に重要な要素がデータカタログです。
データカタログにはデータソースであるファイルやDBのテーブル構造(カラム、データ型、パーティション、インデックス等)を保持しており、
例えば「顧客テーブルのメールアドレスを削除」というジョブを作ればデータカタログを参照して顧客テーブルの実態がどのデータソースにあるかを把握します。
テーブルはデータベースによってグルーピングされ、クローラーがデータソースをクロールすることで作成されます。
また、クローラー、トリガー、ジョブを連ねたのがワークフローです。
上図のように各要素をエディタで連結させてゼロから作ることもできますが、「csvファイルをParquet形式に変換したい」などよくあるユースケースはワークフローをプル―プリントというテンプレートにしておき、そこからワークフローを生成することもできます。
Lake Formationの基本(Lake Formation Basics)
Glueの概要をおさらいしたところで、ここから本題のLake Formationワークショップです。この章は下記の流れで実装します。
1. データレイクとして管理するS3バケットを宣言
まず、データレイクとして管理するS3バケットを宣言します。
これによりLake FormationからS3に格納されたデータにアクセス可能になります。
Lake Formationコンソールの「Data lake locations」で定義します。
2. RDSからデータ抽出してS3へ格納
次にブループリントを使って、RDSからデータ抽出してS3へファイルを格納する処理を作ります。
Glueのブループリントと同義で、これによりクローラー・トリガー・ジョブを含むワークフローが生成されます。
Lake Formationを使う嬉しいポイントは、汎用的なブループリントが用意されていることです。
このワークショップでは「Database snapshot」のブループリントを使って、RDSから一括でS3に取り込むワークフローを作ります。
作成後のワークフローを実行し正常に完了したら、データレイクであるS3にデータが格納され、S3をデータソースとするデータカタログができています。
3. データカタログを使ってパーミッション設定
今度はデータレイク内のデータに対するパーミッションを定義します。
ワークショップでは4種類のパーミッション管理法を学びます。
1つめが「Table-based access」です。データカタログ内のテーブル単位でアクセス可否を定義し、IAMユーザないしはIAMロールに必要なパーミッションを付与します。
2つめは「Column-based access」です。テーブルの列単位でアクセスを制御します。
3つ目は「Row and Cell-based access」です。下図のような行を絞るフィルタ―を事前に定義しておき、フィルターが適用されたテーブルに対してアクセス設定することで実装します。
4つ目が「LF Tag-based access」です。Lake FormationではLFタグというタグを定義でき、データベースやテーブル、列に関連づけることができます。そのタグの値をベースにアクセスを制御します。
4. パーミッションを利かせてAthenaでS3データ参照
この章の最後に、上記4種類のパーミッションを付与したIAMユーザを使ってAthenaからクエリを実行してS3データへのアクセスが制御できているかを確認します。
例えばColumn-based accessを使って特定の列のみ参照権限が持つIAMユーザが、それ以外の列へSelectを実行すると次のようにエラーメッセージが表示され、正しく権限制御できていることを確認します。
クロスアカウントアクセス
データレイクとして各種データを管理するAWSアカウントと、AthenaやEMRなどデータを利用するAWSアカウントが異なる場合はどのような構成になるのでしょうか?
ワークショップでは「ハブアンドスポーク構成」を紹介しています(AWSアカウントを複数持っていなかったので、これ以降の画像はワークショップからの転載です)。
(出典)AWS Lake Formation Workshop
データを管理するAWSアカウント(プロデューサー)は、従来通りAWS Lake Formationで自身のS3バケットをデータレイクとするデータカタログを作成しますが、テーブルへのパーミッション指定するときにデータを利用するAWSアカウント(コンシューマー)を権限付与先(プリンシパル)として指定します。
(出典)AWS Lake Formation Workshop
するとコンシューマー側のAWS Resource Access Managerにリソース共有の招待が届くので、共有を承諾します。
(出典)AWS Lake Formation Workshop
次にコンシューマー側のLake Formationで共有テーブルに対するリソースリンクを作ります。 これはデータベース領域だとOracleならデータベースリンク、SQLServerならリンクサーバに近い概念で、共有した外部データカタログ内のデータベース or テーブルを自身が管理するデータカタログのように参照できる機能です。 (出典)AWS Lake Formation Workshop
ここまでくればコンシューマーが自分でデータレイクを管理しているのと同じ扱いです。 プロデューサーのデータを参照するIAMユーザ or IAMロールに対してリソースリンクへのアクセス権限を付与することで、適切な権限管理を施した上でプロデューサーのデータレイクを参照できます。 (出典)AWS Lake Formation Workshop
これ以降のワークショップ内容
ここまででLake Formationの基本は終了です。
基本を押さえられたところで、Black Beltのスライドを参照してみます。
(出典)【AWS Black Belt】AWS Lake Formation
図の中で一番大きいオブジェクトになっている「ブループリント」と「アクセスパーミッション」こそがLake Formationの2大機能と言えます。 またそれらはGlueのジョブ、クローラー、データカタログをベースにした機能でした。 どうでしょう、この概念図がイメージアップできるようになったでしょうか?
これ以降はより実践的な内容になりますので、興味がある方は是非本紙の方をご参照ください。
- Lake Formationを使ったAmazon EMRでのパーミッション管理
- Kinesisで生成されるデータストリームに対する制御
- Glueで生成したパーミッションをLake Formationに移行
まとめ
AWSワークショップを使って、Lake Formationのサービス概要を整理しました。
Lake Formationはデータレイクを構築・運用するにあたって重要なサービスと言えますが、実案件でデータレイクを運用しようとすると例えば次のユースケースが発生するのではないでしょうか?
- S3バケットとフォルダ構成はどうする?
- 業務ロジックを含むデータ変換処理が途中で必要だけどどう実装する?
- ターゲットはデータカタログを使わないサービス(RDSやS3から直接ファイルダウンロード)だけど、どうパーミッション管理する?
上記のユースケースはLake Formationの外で設計・実装する必要があります(と理解しています)。 個人的には「Lake Formationって名前なんだからデータレイク環境をまるっと作ってくれるんでしょ!?」という印象だったのですが、ワークショップを通じてLake Formationがフォローするサービス範囲を理解することができました。