AWS Glueをより活用する方法!CDGCでリネージュを作成してカラムレベルでデータの流れを把握する

こんにちは。SCSK石原です。

AWSを中心にデータ基盤を作成されている場合、AWS Glueが登場する機会が多いのではないでしょうか。AWS Glueには、ETL機能はもちろん、システムメタデータを管理できるAWS Glue Data Catalogがあります。

AWS Glue Data CatalogにはCrawlerという強力な機能があり、自動でスキーマを構成可能です。

また、インフォマティカ(Informatica)では、クラウドデータマネージメントプラットフォームとして「Intelligent Data Management Cloud(IDMC)」があり、その中の一つとして「Cloud Data Governance and Catalog(CDGC)」というデータカタログ機能を含むサービスあります。このサービスはシステムメタデータビジネスメタデータの双方を管理できるものです。

今回はAWS Glueをより活用するために、ETL情報をCDGCで抽出しリネージュを取得、カラムレベルでのデータの流れを把握できることを検証します。

全体概要

検証環境の全体概要について、インフラ視点とデータ視点で説明します。

インフラ構成図

インフラ構成は以下の通りです。Amazon EC2にはSecureAgentというランタイム環境をインストールします。EC2からインターネット経由でIDMCに接続します。

VPC外には、データストアとしてAmazon S3、ETL及びデータカタログとしてのAWS Glue、クエリエンジンのAmazon Athenaを利用します。このほかにも、IAMなどのサービスを利用しますが下記図では割愛します。

 

データ遷移図

コンポーネント間のデータの流れを整理します。AWS GlueにてETLを実行します。ソースシステムとターゲットシステムにはAmazon S3を利用します。

Amazon S3に格納したデータに対してAWS GlueのCrawlerを利用して、AWS Glue Data Catalogにシステムメタデータを登録します。

IDMCからは、Amazon Athena及びAWS Glueの接続コネクタを利用して、スキーマやテーブル情報などのシステムメタデータやカラムレベルのリネージュ情報を取得します。

今回は、Kaggleのチュートリアルで利用するTitanicのデータセットを利用させていただきました。

 

AWS側の準備

AWSの設定を行います。

AWS Glue Data Catalogの設定

Amazon S3にTitanicのデータ(CSVファイル)を格納しましたので、AWS Glue Data Catalogに登録します。

  1. AWS Glue Data Catalogのデータベース作成
  2. AWS Glue Classifiersの設定
  3. AWS Glue Crawlerでテーブルを作成

今回の設定値は以下の通りです。

データベース名 ishihara-db
テーブル名 titanic

AWS GlueによるETLジョブ作成

後ほどリネージュを確認するために、2つのデータソースを結合してAmazon S3にファイルを出力するETLジョブを作成します。

結合に利用したデータは下記のとおりです。

Survived_id Survived_name
0 dead
1 survival

ETLジョブ実行後に、出力されたデータに対してAmazon Athenaでクエリできることを確認しておきます。

正常にクエリができていますので、AWS側の設定は完了です。

もし、Amazon Athenaでクエリに失敗した場合は、「age」列を確認してみてください。クローラー実行後はdouble型で定義されていましたが、欠損値があり異なる型が含まれると判断されて、クエリに失敗する事象が発生しました。一つの手段として、欠損値が許容される型(String型など)に手動でスキーマを変更すると実行できるようになります。

 

IAMユーザの準備

Amazon Athenaの接続設定をするためには、AWS IAMのユーザが必要になります。下記のドキュメントに従って適切なポリシーを保持したユーザを作成したのち、アクセスキーを発行します。

ドキュメントにアクセスするためにはインフォマティカアカウントにログインが必要です。

 

IDMC側の準備

次にCDGCからAWSの各種サービスへメタデータスキャン設定を行います。

Amazon Athenaへの接続

接続設定

接続設定は以下の通りです。先ほど作成したアクセスキーを利用します。

検証中に下記のエラーが出力されました。こちらはIAM権限不足によるエラーであり、CloudtrailにAccessDenyのエラーが出力されます。今回の場合では、コンソールアクセス用のIAMユーザで発行したアクセスキーを利用しており、MFAを通さない限りほとんどの操作がDenyされるポリシーが付与されていたことが原因でした。
CON_Athenaのテスト接続に失敗しました。[SDK_APP_COM_20000] error [error [java.sql.SQLException: [Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. You are not authorized to perform: athena:StartQueryExecution on the resource. After your AWS administrator or you have updated your permissions, please try again. [Execution ID not available]]]

カタログソース設定(Amazon Athena)

Amazon Athenaのカタログソースを構成します。下記のマニュアルを参考に進めます。

ドキュメントにアクセスするためにはインフォマティカアカウントにログインが必要です。

 

事前定義されたカタログソースのうち「Amazon Athena」を選択して、設定します。 

先ほど定義した「接続」を使用します。テスト接続が成功することを確認して次に進みます。

まずはメタデータの抽出が有効になっていることを確認して、保存します。

カタログソース設定が完了したのち、実行すると以下のジョブ画面を確認することができます。今回はフィルタ設定をしていないため、今回用に作成したAWS Glue Data Catalog以外のテーブルやスキーマも取り込まれています。

カタログソース設定(AWS Glue)

AWS Glueのカタログソースを構成します。下記のマニュアルを参考に進めます。

ドキュメントにアクセスするためにはインフォマティカアカウントにログインが必要です。
2023年9月現在、AWS Glueのコネクタはプレビュー版です。
カタログソース設定をしたのち、実行した結果は下記のとおりです。

カタログソース設定(Amazon S3)

Amazon S3のカタログソースを構成します。下記のマニュアルを参考に進めます。

ドキュメントにアクセスするためにはインフォマティカアカウントにログインが必要です。

カタログソース設定をしたのち、実行した結果は下記のとおりです。

接続の割り当て

Amazon Athena,AWS Glue,Amazon S3のメタデータ抽出が完了したのち、関連する情報のマッピングを行います。

  1. Amazon Athena(S3__ishihara-techharmony-01-bucket)はAWS Glue Data Catalogを参照しており、実データはAmazon S3に存在するため、Amazon AthenaのカタログソースとAmazon S3のカタログソースをマッピングします。
  2. AWS Glue(S3__ishihara-techharmony-01-bucket)はAWS Glue Data Catalogを参照しており、実データはAmazon S3に存在するため、AWS GlueのカタログソースとAmazon S3のカタログソースをマッピングします。
  3. AWS Glue(ATHENA-H_ATHENA-DB)はAWS Glue Data Catalogを参照しているため、Amazon Athenaのカタログソースとマッピングします。AWS Glue Data CatalogはAmazon Athenaのカタログソースとして登録されているように見受けられます。

オブジェクトの一致率が100%になっていない箇所があります。Amazon S3のカタログソース設定で、不要なファイルをスキャンしていることが原因です。また、Amazon Athenaの場合は当方で作成していないリソース(AWS Glue Data Catalog)の情報もスキャンされているためです。

結果

AWS GlueをCDGCでスキャンすることで、カラムレベルでデータの流れを確認することができるようになりました。データの流れを可視化できることにより、データの透明性を高めることができます。

大規模なデータ基盤となれば、データリネージュが必要になると考えております。この記事が役に立てば幸いです。

タイトルとURLをコピーしました