AWS Lake Formation と AWS Glue を使用して AWS でデータメッシュアーキテクチャをセットアップする

データメッシュアーキテクチャは、分散されたシステムを構築し、データ処理の負荷を分散し、データセットを安全に共有するための方法です。AWS Lake FormationとAWS Glueを使用することで、AWS上でデータメッシュアーキテクチャを簡単にセットアップすることができます。

データメッシュアーキテクチャ
--

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/c9c26022-5e3c-3191-f573-1091b7b9ab83.png)

AWS Glue Data Catalogの作成
--
AWS Glue Data Catalogは、データのメタデータを管理するための中央のデータレポジトリです。これにより、異なるAWSサービス間でデータを共有しやすくなります。

【手順】
AWS Glueコンソールにログインします。
左側のメニューから「Data Catalogs」を選択します。
「Create catalog」をクリックします。
Catalog nameを入力します。これは一意の名前であり、後で参照する際に使用します。
「Next」をクリックします。
オプションでDatabase locationをカスタマイズすることができますが、デフォルトを使用することもできます。
その場合は、「Next」をクリックして次に進みます。
「Create」をクリックします。

データソースを特定する
--
AWS Glueを使用して、データを __ETL（Extract、Transform、Load）__ して、Lake Formationで使用するデータフォーマットに変換する前に、データソースを特定する必要があります。これは、Amazon S3バケット、Amazon RDS、またはAmazon Redshiftなど、さまざまなデータソースを活用します。データソースを特定するためには、AWS Glueの「Crawlers」を使用して、データソースのメタデータを収集する必要があります。

【手順】
AWS Glueコンソールにログインします。
メインメニューから「Crawlers」を選択します。
「Add crawler」をクリックして、新しいクローラーを作成します。
クローラーの名前を入力します。この名前は、クローラーが収集するデータソースの識別子となります。
「Data store」フィールドで、データソースを選択します。
AWS Glueは、S3、JDBC、DynamoDBなど、多くのデータストアをサポートしています。
データソースの設定を入力します。
例えば、S3バケットの場合、バケット名、オブジェクトプレフィックス、およびフォーマットを指定します。
JDBCの場合、JDBC接続文字列、データベース名、および認証情報を指定する必要があります。
「Frequency」フィールドで、クローラーを実行する頻度を設定します。
例えば、毎日、週に一度などの頻度でクローラーを設定することができます。
「IAM role」フィールドで、クローラーに必要なアクセス権限を持つIAMロールを選択します。
AWS Glueは、S3バケットやDynamoDBなど、様々なAWSサービスにアクセスするための権限が必要となります。
設定が完了したら、「Finish」をクリックして、クローラーを作成します。
AWS Glueは、クローラーが定義したデータソースを自動的に収集し、AWS Glue Data Catalogにメタデータを保存します。

これで、AWS Glue Data Catalog内で、データソースを特定することができます。

ETL（抽出、変換、ロード）ジョブの作成
--
AWS Glueを使用して、ETLジョブを作成し、データを変換してLake Formationで使用する形式に変換します。ETLジョブは、スケジュールに基づいて自動的に実行されるように設定することができます。

【手順】
AWS Glueコンソールにログインし、「Jobs」を選択します。
「Add job」をクリックして、新しいジョブを作成します。
ジョブの名前を入力します。
「IAM role」フィールドで、ジョブに必要なアクセス権限を持つIAMロールを選択します。
「This job runs」フィールドで、ジョブが実行される環境を選択します。ここでは、「Spark job」を選択します。
「Glue version」フィールドで、使用するGlueバージョンを選択します。
「Script file name」フィールドで、ジョブスクリプトのファイル名を指定します。
「S3 path where script is stored」フィールドで、ジョブスクリプトが保存されているS3パスを指定します。
「Job parameters」フィールドで、ジョブに渡す必要があるパラメータを設定します。
「Connections」フィールドで、ジョブが使用する接続を指定します。
スクリプトを編集して、ETLジョブのロジックを定義します。スクリプトは、PySpark言語を使用して記述することができます。
「Save job and edit script」をクリックして、ジョブを保存します。
ジョブを実行するには、「Run job」をクリックします。
ジョブの実行ログを確認するには、「Logs」タブを開きます。

__データの抽出（Extract)__
クローラーを使用して、データを抽出します。抽出したデータは、AWS Glue Data Catalogに格納されます。
__データの変換（Transform)__
抽出したデータを必要な形式に変換します。PySpark言語を使用して、データの変換を行うことができます。
__データのロード（Load)__
変換したデータを指定したデータストアにロードします。データストアとしては、Redshift、RDS、またはS3などが利用可能です。

Lake Formationのセットアップ
--
データレイクは、異なる形式やソースの大量のデータを保管、管理するためのストレージサービスであり、分析や機械学習などの用途に利用されます。

【手順】
AWS Management Consoleにログインし、Lake Formationコンソールにアクセスします。
「データレイクのセットアップ」をクリックします。
「データストアの追加」をクリックして、新しいデータストアを作成します。
データストアのタイプを選択します。S3バケットを選択する場合は、「S3オブジェクトストレージ」を選択します。
データストアの名前を入力します。
「IAMロール」フィールドで、Lake Formationに必要なアクセス権限を持つIAMロールを選択します。
データストアの場所を指定します。たとえば、S3バケットの場合は、バケット名を指定します。
「完了」をクリックして、データストアを作成します。
これで、Lake FormationにS3バケットが登録され、データにアクセスするための権限を設定できます。


データセットの作成
--
複数のデータストアにまたがる複雑なデータソースを単一の場所で管理することができます。

【手順】
AWS Lake Formationコンソールにログインし、「データセット」を選択します。
「新しいデータセットの追加」をクリックして、新しいデータセットを作成します。
データセットの名前を入力します。
データセットに含めるテーブルやビューなどのデータを選択します。
このステップは、Lake Formation Data Catalogで定義されているデータソースからテーブルを選択することができます。
もしくは、新しいテーブルを作成してデータを登録することもできます。
データセットに関連するデータストアを選択します。このステップでは、S3バケットなどのデータストアを指定することができます。
データセットに必要なメタデータを追加します。このステップでは、データセットの説明やタグなど、必要に応じて任意の情報を入力することができます。
「完了」をクリックして、データセットを作成します。

※データセットを作成することで、複数のデータソースにまたがる複雑なデータを一元管理することができます。
また、データセットにアクセスするためのアクセス許可を制御することもできます。
データセットは、データストア、テーブル、ビュー、およびアクセス許可のセットとして定義されます。

アクセス許可の設定
--
AWS Lake Formationを使用する場合、データへのアクセス権限を設定する必要があります。

__アクセス許可設定手順__

【手順】
__IAMロールを作成する__
データレイクにアクセスするためには、IAMロールを作成する必要があります。
IAMロールには、データレイクにアクセスするための必要な権限が含まれている必要があります。

IAMコンソールにログインし、「ロールの作成」を選択します。
ロールを作成するための指示に従い、適切なサービスとポリシーを選択します。
ロール名と説明を入力します。
ロールがアクセスするリソースを指定します。
最後に、ロールの作成をクリックします。

__データレイクにアクセスするユーザーグループを作成する__
次に、データレイクにアクセスするユーザーグループを作成する必要があります。Lake Formationコンソールにログインし、「ユーザーグループ」を選択します。新しいグループを作成するには、「新しいユーザーグループの追加」を選択します。グループ名を入力し、必要に応じて説明を追加します。

__ユーザーグループにIAMロールを割り当てる__
新しいグループを作成したら、IAMロールをグループに割り当てる必要があります。Lake Formationコンソールで、「ユーザーグループ」を選択し、割り当てたいグループを選択します。次に、グループの詳細ページで、「IAMロールの割り当て」を選択します。IAMロールを選択し、「保存」をクリックします。

__データセットにアクセスするための権限を設定する__
データレイクにアクセスするためには、Lake Formationコンソールでデータセットにアクセスするための権限を設定する必要があります。データセットのページで、「アクセス許可の追加」を選択します。この画面では、アクセス許可を与えるグループ、またはIAMロールを指定し、権限レベルを指定します。適切な権限を設定し、「保存」をクリックします。これで、指定したグループまたはIAMロールのメンバーは、データセットにアクセスすることができます。

__AWS Lake Formation CDK（Cloud Development Kit）__ については、下記にまとめました。
https://qiita.com/kimuni-i/items/5c3d9a4e4c2db83d9cc5
AWS Lake Formation CDKは、AWS Cloud Development Kit（AWS CDK）を使用してLake Formationリソースを構築するためのツールキットであり、Lake Formationに関連するAWSリソースをプログラムで作成することができます。Lake Formation CDKを使用することで、Lake Formationのデータカタログ、データベース、テーブル、およびデータアクセスの制御などの機能を自動化できます。