Amazon Web Services ブログ

Amazon DataZone で OpenLineage 互換のデータリネージの可視化機能をプレビュー公開

この記事は Amazon DataZone introduces OpenLineage-compatible data lineage visualization in preview を翻訳したものです。


Amazon DataZone で OpenLineage 互換の API を使用したデータリネージ機能のプレビュー版の提供を開始したことをお知らせできることを嬉しく思います。この機能により、Amazon DataZone 上のデータアセットのリネージ (データの流れや変遷) のキャプチャ、保存、そして可視化が可能になります。

Amazon DataZone の OpenLineage 互換 API により、ドメイン管理者やデータプロデューサー (データ提供者) は、より広範囲のリネージイベントをキャプチャして保存できるようになりました。Amazon DataZone 内の情報に加え、 Amazon Simple Storage Service (Amazon S3)、AWS Glue、およびその他の AWS サービスで行った変換も含めることができます。これにより、Amazon DataZone を閲覧するデータコンシューマー (データ利用者) はデータアセットの出所を確認することができ、データプロデューサーはデータアセットの使用状況を把握することで変更の影響を評価できるようになります。

この記事では、Amazon DataZone のデータリネージの最新機能、OpenLineage との互換性、そして AWS Glue、Amazon RedshiftAmazon Managed Workflows for Apache Airflow (Amazon MWAA) など、他のサービスから API を通じて Amazon DataZone にリネージを取り込む方法について説明します。

データリネージの重要性

データリネージによって、データアセットの全体像を把握し、オブジェクトの出所とその関連性の連鎖を確認できるようになります。データリネージがあれば時間の経過に伴うデータの変遷を追跡でき、データの出所、変更履歴、そしてデータパイプライン内での最終的な行き先を明確に理解できるようになります。データの出所が透明化されることで、データコンシューマーはそのデータが自分たちの用途に適しているかどうかを的確に判断できるようになります。データリネージはテーブル、カラム、ジョブなどの情報を含むため、影響分析やデータに関する問題への対処が可能になります。例えば、ある項目が下流のソースコードにどのような影響を与えるかを確認できます。このようにして、変更をコミットする前に十分な情報に基づいて判断を下し、下流で望ましくない変更が発生するのを回避できます。

Amazon DataZone のデータリネージは、 API として提供される OpenLineage 互換の機能です。これにより、OpenLineage 対応システムや API からリネージイベントをキャプチャし、可視化できます。さらに、データの出所や変換を追跡し、組織間におけるデータの利用状況を的確に把握できるようになります。Amazon DataZone のビジネスデータカタログ内のアクティビティは、リネージとして可視化されます。また、カタログ化されたアセットだけでなく、ビジネスデータカタログの外で発生したアクティビティも、API を使用してプログラム的にキャプチャします。これにより、データの流れと利用状況を包括的に理解できるようになります。

さらに、Amazon DataZone はイベントごとにリネージのバージョン管理を行い、いつでも必要なときにリネージを可視化したり、アセットやジョブの履歴全体で変遷を比較することができます。過去のリネージを確認することで、データがどのように進化してきたかを深く理解できるため、トラブルシューティング、監査、およびデータアセットの整合性の確保に欠かせない機能だといえます。

次のスクリーンショットは、Amazon DataZone のデータカタログで可視化されたリネージグラフの例を示しています。

OpenLineage 互換のデータリネージ機能の概要

さまざまなアナリティクスサービスにわたってデータリネージを一貫してキャプチャし、それらを統一されたオブジェクトモデルに組み込むことが、リネージ情報から洞察を得るための重要な要素となります。OpenLineage は、リネージを収集および分析するためのフレームワークを提供するオープンソースプロジェクトです。また、メタデータを記録するためのオブジェクトモデルのリファレンス実装と、主要なデータアナリティクスツールとの統合機能も提供しています。

OpenLineage における主要な概念を以下に挙げます。

  • リネージイベント (Lineage event) – OpenLineage は一連のイベントを通してデータのリネージ情報をキャプチャします。イベントとは、データパイプラインにおいてデータの取り込み、変換、利用などの特定の操作を表すものです。
  • リネージエンティティ (Lineage entity) – OpenLineage におけるエンティティは、データセットやテーブルなど、リネージプロセスに関わるさまざまなデータオブジェクトを表します。
  • リネージ実行 (Lineage run) – リネージ実行は、データパイプラインやジョブの実行を表す概念であり、複数のリネージイベントとエンティティから構成されます。
  • リネージ形式 (Lineage form type) – 形式またはファセット (データの分類や検索に用いる属性情報) は、リネージエンティティやイベントに関する追加のメタデータやコンテキスト情報を提供し、より豊かで記述的なリネージ情報を実現します。OpenLineage はラン、ジョブ、データセットのファセットを提供しており、カスタムファセットを構築することも可能です。

Amazon DataZone のデータリネージ API は OpenLineage 互換であり、OpenLineage の機能を拡張しています。具体的には、リネージ情報を柔軟に拡張可能なデータ構造 (オブジェクトモデル) に保存するためのエンドポイントを提供しています。OpenLineage は特定のデータソースとの統合機能も提供しています。Amazon DataZone はこれらのデータソースとの統合を簡単に行うことができます。Amazon DataZone のデータリネージ API がこれらのフォーマットを解釈し、リネージのデータモデルに変換するためです。

次の図は、Amazon DataZone のリネージデータモデルの例を示しています。

Amazon DataZone では、すべてのリネージノードが実際のリソースを表しています。つまり、リネージノードとテーブル、ビュー、アセットなどの論理的または物理的リソースとの間に 1 対 1 のマッピングがあるということです。ノードは特定のジョブの特定の実行を表すか、テーブルやアセットのノードやサブスクライブしたアセットのノードを表します。

ノードの各バージョンは、タイムスタンプで実際のリソースに何が起きたのかを管理しています。Amazon DataZone のリネージは、外部で発生したデータ移動の変遷を共有するだけでなく、Amazon DataZone 内でのアセット作成、キュレーション (メタデータの整備) 、公開、サブスクリプションなどのアクティビティによるリネージも表します。

Amazon DataZone でデータリネージのモデルを構築するには、2 種類のデータリネージを取得する必要があります。

  • Amazon DataZone 内のリネージアクティビティ – これには、カタログに追加され公開されたアセットが含まれ、その後サブスクリプションの詳細が自動的に取得されます。プロデューサープロジェクトの視点 (例えば、選択したプロジェクトがブラウジング中のアセットの所有プロジェクトであり、そのプロジェクトのメンバーである場合) では、データセットノードの 2 つの状態が表示されます。
    • インベントリアセットタイプのノードは、未公開の段階にあるカタログ内のアセットを定義します。他のプロジェクトのメンバーはインベントリアセットをサブスクライブできません。詳細については、Amazon DataZone でのインベントリデータの作成とデータの公開を参照してください。
    • 公開済みアセットタイプのノードは、組織全体のデータユーザーが利用可能な実際のアセットを表します。これは、他のプロジェクトのメンバーがサブスクライブできるアセットタイプです。そのアセットのプロデューサープロジェクト以外のコンシューマーの視点では、公開済みアセットノードのみが表示されます。
  • Amazon DataZone の外部で発生したリネージアクティビティは、PostLineageEvent を使用することでそのプログラムから取得できます。カタログ化されたアセットのデータ処理の前後でこれらのイベントを取得することで、データプロデューサーとデータコンシューマーはデータの移動を包括的に把握し、データの出所またはその消費を確認できます。この記事の後半で、リネージイベントを連携するための API の使用方法について説明します。

Amazon DataZone には 2 種類のリネージノードが用意されています:

  • データセットノード (Dataset node) – Amazon DataZone では、リネージの可視化機能ではテーブルやビューを表すノードを表示します。プロジェクトの視点によって表示される内容は異なり、プロデューサーはインベントリと公開済みアセットの両方を表示できますが、コンシューマーは公開済みアセットしか表示できません。アセット詳細ページのリネージタブを最初に開くと、カタログ化されたデータセットノードがリネージグラフの上流または下流の探索の開始点になります。データセットノードには、Amazon DataZone から自動で生成されるリネージノードと、独自に作成するリネージノードがあります。
    • 自動生成データセットノード (Automated dataset node) – これらのノードには、Amazon DataZone カタログに公開された AWS Glue または Amazon Redshift アセットに関する情報が含まれています。自動的に生成され、ノード内に対応する AWS Glue または Amazon Redshift のアイコンが含まれています。
    • カスタムデータセットノード (Custom dataset node) – これらのノードには、Amazon DataZone カタログに公開されていないアセットに関する情報が含まれています。ドメイン管理者 (プロデューサー) が手動で作成し、ノード内にはカスタムアセットアイコンが表示されます。これらは、OpenLineage イベント形式を使用して作成されたカスタムリネージノードです。
  • ジョブノード / ジョブ実行ノード (Job node / Job run node)  – このノードは、特定のジョブの最新の実行とその実行の詳細を表すジョブの詳細をキャプチャします。このノードは、そのジョブの複数の実行もキャプチャでき、ノード詳細の History タブで表示できます。ノードの詳細はアイコンを選択すると表示されます。

Amazon DataZone でのデータリネージの可視化

Amazon DataZone は、データプロデューサーとデータコンシューマー向けに統合的な操作環境を提供します。アセット詳細ページではリネージの情報がグラフで表示されており、上流または下流のデータ間の関係を容易に把握できます。アセット詳細ページにはグラフをナビゲートするための次の機能があります。

  • カラムレベルのリネージ – データセットノードで利用可能な場合、カラムレベルのリネージを展開できます。これにより、データソースのカラム情報が利用可能であれば、上流または下流のデータセットノードとの関係が表示されます。
  • カラム検索 – データセットに 10 個以上のカラムがある場合、ノードには最初に表示されないカラムに移動するためのページ送りが表示されます。データセットノードには検索機能があり、この機能を使うと検索結果には該当するカラムだけが表示され、探したいカラムをすぐに見つけることができます。
  • データセットノードのみを表示 – ジョブノードを除外したい場合は、グラフビューアーの Open view control のアイコンを選択し、Display dataset nodes only の設定を切り替えます。これにより、グラフからすべてのジョブノードが表示されなくなり、データセットノードのみを移動できるようになります。
  • 詳細ペイン – 各リネージノードは次の詳細をキャプチャして表示します。
    • すべてのデータセットノードには、Lineage info、Schema、History の 3 つのタブがあります。History タブには、そのノードでキャプチャされたリネージイベントのバージョンが一覧表示されます。
    • ジョブノードには、Job info History のタブを持つ詳細ペインがあり、ジョブの詳細が表示されます。詳細ペインにはジョブの一部として実行されたクエリや式もキャプチャされます。
  • バージョンタブ – Amazon DataZone データリネージのすべてのノードには、キャプチャされたリネージイベントに基づく履歴としてバージョン管理が行われます。選択したタイムスタンプでリネージを表示すると、リネージページに新しいタブが開き、異なるタイムスタンプ間で比較できます。

次のスクリーンショットはデータリネージの可視化の例を示しています。

Lineage タブで Preview を選択し、Try sample lineage リンクを選択すると、サンプルデータでどのように可視化されるかを体験できます。新しいブラウザタブが開き、ガイドツアーを利用するかどうかに関わらず、サンプルデータを使ってこの機能をテストして使い方を学ぶことができます。次のスクリーンショットはサンプルデータのリネージを表示した例です。

ソリューションの概要

ここまでは Amazon DataZone の新しいデータリネージ機能を説明しました。次は AWS Glue のテーブルと ETL (抽出、変換、ロード) ジョブ、Amazon Redshift、そして Amazon MWAA からリネージ情報をキャプチャする方法を見ていきましょう。

スタートアップスクリプトは Amazon DataZone の新しい GitHub リポジトリでも入手できます。

前提条件

このウォークスルーを行うには、以下の前提条件を満たしている必要があります:

この記事の手順を実行する AWS アカウントで AWS Lake Formation を使用して AWS Glue Data Catalog の権限を管理している場合は、データベースとテーブルを作成する権限を持つユーザーとしてログインしてください。詳細については、Lake Formation の暗黙的なアクセス許可を参照してください。

CloudFormation スタックの起動

このユースケースのリソースを AWS CloudFormation で作成するには、以下の手順を実行してください:

  1. CloudFormation スタックを us-east-1 でデプロイします:
  2. Stack name には、スタックの名前を入力します。
  3. Next を選択します。
  4. I acknowledge that AWS CloudFormation might create IAM resources with custom を選択します
  5. Create stack を選択します。

スタックの作成とリソースのプロビジョニングが完了するのを待ちます。CREATE_COMPLETE ステータスが表示されれば次のステップに進めます。

AWS Glue テーブルからのデータリネージのキャプチャ

この例では、AWS Glue テーブルからリネージメタデータを収集するために必要なコマンドを実行するため、ブラウザベースのシェルである CloudShell を使用します。以下の手順を実行してください。

  1. AWS Glue コンソールで、ナビゲーションペインから Crawlers を選択します。
  2. CloudFormation テンプレートによって作成されたクローラー AWSomeRetailCrawler を選択します。
  3. Run を選択します。

クローラーの実行が完了すると、Succeeded ステータスが表示されます。

では、CloudShell を使用してリネージのメタデータを収集しましょう。

  1. extract_glue_crawler_lineage.py ファイルをダウンロードします。
  2. Amazon DataZone コンソールで CloudShell を開きます。
  1. Actions メニューから、Update file を選択します。
  2. extract_glue_crawler_lineage.py ファイルをアップロードします。

  3. 次のコマンドを実行します:
    sudo yum -y install python3
    python3 -m venv env
    . env/bin/activate
    pip install boto3

次のような結果が得られるはずです。

  1. すべてのライブラリと依存関係が構成されたら、次のコマンドを実行して inventory テーブルからリネージのメタデータを収集します。なお、dzd_Your_domain は自身の DataZone ドメイン ID に置き換えます:
    python extract_glue_crawler_lineage.py -d awsome_retail_db -t inventory -r us-east-1 -i dzd_Your_domain
  2. スクリプトは設定情報の確認を求めてきます。yes と入力します。

スクリプトが正常に実行されたことを示す通知が表示されるはずです。

Inventory テーブルからリネージ情報をキャプチャした後、データソースジョブを実行するには、以下の手順を行います。

  1. Amazon DataZone データポータルで、Sales を開きます。
  2. ナビゲーションペインで Data タブを選択し、Data sources を選択します。
  1. データソースジョブを選択し、Run を選択します。

この例では、awsome_retail_db データベースを指すデータソースジョブ SalesDLDataSourceV2 がすでに作成されていました。データソースジョブの作成方法の詳細については、AWS Glue Data Catalog の Amazon DataZone データソースを作成して実行するを参照してください。

ジョブが正常に実行されると、確認メッセージが表示されます。

Amazon DataZone によって生成されたリネージグラフを見てみましょう。

  1. Data inventory タブで Inventory テーブルを選択します。
  2. Inventory アセットページで新しく追加されている Lineage タブを選択します。

Lineage タブでは、Amazon DataZone が 3 つのノードを作成したことがわかります。

  • Job / Job run – アセットのテクニカルメタデータを収集するために使用される AWS Glue クローラーを表しています
  • Dataset – このアセットに関連するデータを含む S3 オブジェクトを表しています
  • Table – クローラーによって作成された AWS Glue テーブルを表しています

Dataset ノードを選択すると、Amazon DataZone はアセットを作成するために使用された S3 オブジェクトに関する情報を提供します。

AWS Glue ETL ジョブからのデータリネージのキャプチャ

前のセクションでは、データアセットのデータリネージグラフを生成する方法について説明しました。次に、AWS Glue ジョブのデータリネージグラフを作成する方法を見ていきましょう。

先ほど起動した CloudFormation テンプレートは、Inventory_Insights という名前の AWS Glue ジョブを作成しました。このジョブは Inventory テーブルからデータを取得し、すべての店舗で利用可能な製品の合計データを集計した新しい Inventory_Insights テーブルを作成します。

CloudFormation テンプレートは、この記事用に作成された S3 バケットに openlineage-spark_2.12-1.9.1.jar ファイルもコピーしています。このファイルは、AWS Glue ジョブからリネージメタデータを生成するために必要です。この OpenLineage Spark プラグインは、 AWS Glue 3.0 (この記事の AWS Glue ジョブ作成に使用したバージョン) と互換性のある 1.9.1 バージョンを使用しています。異なるバージョンの AWS Glue を使用している場合は、OpenLineage Spark プラグインファイルの対応するバージョンをダウンロードする必要があります。

OpenLineage Spark プラグインは、AWS Glue DynamicFrames を使用する AWS Glue Spark ジョブからデータリネージを抽出することができません。代わりに Spark SQL DataFrames を使用してください。

  1. extract_glue_spark_lineage.py ファイルをダウンロードします。
  2. Amazon DataZone コンソールで CloudShell を開きます。
  3. Actions メニューから Update file を選択します。
  4. extract_glue_spark_lineage.py ファイルをアップロードします。
  5. CloudShell コンソールで、次のコマンドを実行します (CloudShell セッションの有効期限が切れている場合は新しいセッションを開きます)。
    python extract_glue_spark_lineage.py --region "us-east-1" --domain-identifier 'dzd_Your Domain'
  6. スクリプトによって表示される情報を確認し、yes と入力して確定します。

次のメッセージが表示されます。これは、スクリプトを実行した後で AWS Glue ジョブのリネージメタデータをキャプチャする準備ができたことを意味します。

Cloud formation テンプレートで作成した AWS Glue ジョブを実行します。

  1. AWS Glue コンソールで、ナビゲーションペインから ETL jobs を選択します。
  2. Inventory_Insights ジョブを選択し、Run job を選択します。

Job details タブを見ると、このジョブには次の構成があることがわかります:

  • キー --conf には以下の値が設定されています
    spark.extraListeners=io.openlineage.spark.agent.OpenLineageSparkListener --conf spark.openlineage.transport.type=console --conf spark.openlineage.facets.custom_environment_variables=[AWS_DEFAULT_REGION ; GLUE_VERSION ; GLUE_COMMAND_CRITERIA ; GLUE_PYTHON_VERSION ; ]
  • キー --user-jars-first の値には true が設定されています
  • Dependent JARs path は S3 のパスである s3://{your bucket}/lib/openlineage-spark_2.12-1.9.1.jar が設定されています
  • AWS Glue のバージョンは 3.0 に設定されています

ジョブの実行中、CloudShell コンソールに次の出力が表示されます。

これは、スクリプトが AWS Glue ジョブからリネージメタデータを正常に収集できたことを意味します。

AWS Glue ジョブによって作成されたデータをもとに AWS Glue テーブルを作成します。この例では、AWS Glue クローラーを使用します。

  1. AWS Glue コンソールで、ナビゲーションペインから Crawlers を選択します。
  2. CloudFormation テンプレートによって作成されたクローラー AWSomeRetailCrawler を選択し、Run を選択します。

クローラーの実行が完了すると、次のメッセージが表示されます。

  1. クローラーの実行が完了したら、次のコマンドを実行して inventory_insight テーブルからリネージのメタデータを収集します。dzd_Your_domain は自分の DataZone ドメイン ID に置き換えてください:
    python extract_glue_crawler_lineage.py -d awsome_retail_db -t inventory_insight -r us-east-1 -i dzd_Your_domain

Amazon DataZone ポータルを開き、Amazon DataZone でどのような図が表示されるか確認します。

  1. Amazon DataZone ポータルで、Sales プロジェクトを選択します。
  2. Data タブで、ナビゲーションペインから Inventory data を選択します。
  3. データソースジョブを再実行し、inventory insights アセットを選択します。

Lineage タブでは、Amazon DataZone によって作成された図を確認できます。この図には 3 つのノードが表示されています。

    • AWS Glue テーブルを作成するために使用された AWS Glue クローラー
    • クローラーによって作成された AWS Glue テーブル
    • Amazon DataZone にカタログ化されたアセット
  1. 作成した inventory_insights テーブルを生成するために実行した AWS Glue ジョブのリネージ情報を確認するには、図の左側にある矢印アイコンを選択します。

そうすると、Inventory_insights テーブルの完全なリネージグラフを確認できます。

  1. 図の左側のインベントリノードにある青い矢印アイコンを選択します。

カラムの変遷と、それらに加えられた変換を確認できます。

図中のノードを選択すると、その詳細を確認できます。例えば、inventory_insights ノードには次の情報が表示されます。

Amazon Redshift からのデータリネージのキャプチャ

Amazon Redshift からリネージグラフを生成する方法を見ていきましょう。この例では、Redshift クラスターが存在する仮想プライベートクラウド (VPC) への接続を構成できるため、AWS Cloud9 を使用します。AWS Cloud9 の詳細については、AWS Cloud9 ユーザーガイドを参照してください。

この記事に含まれる CloudFormation テンプレートには、Redshift クラスターの作成やこのセクションで使用するテーブルの作成は含まれていません。Redshift クラスターの作成方法の詳細については、ステップ 1: サンプルの Amazon Redshift クラスターを作成するを参照してください。このセクションで必要なテーブルを作成するには、次のクエリを使用します。

Create SCHEMA market 

create table market.retail_sales (
  id BIGINT primary key,
  name character varying not null 
);

create table market.online_sales (
  id BIGINT primary key,
  name character varying not null 
);

/* Important to insert some data in the table */
INSERT INTO market.retail_sales 
VALUES (123, 'item1')

INSERT INTO market.online_sales 
VALUES (234, 'item2')

create table market.sales AS 
Select id, name from market.retail_sales 
Union ALL 
Select id, name from market.online_sales ;

Redshift クラスターへのアクセスを許可するセキュリティグループに AWS Cloud9 環境の IP アドレスを追加するのを忘れないようにしてください。

  1. requirements.txtextract_redshift_lineage.py ファイルをダウンロードします。
  2. File メニューから Upload Local Files を選択します。
  3. requirements.txtextract_redshift_lineage.py ファイルをアップロードします。
  4. 次のコマンドを実行します:
    # Python をインストール
    sudo yum -y install python3 
    
    # 依存関係のセットアップ
    python3 -m venv env 
    . env/bin/activate 
    
    pip install -r requirements.txt

次のメッセージが表示されるはずです。

  1. AWS 認証情報を設定するには、次のコマンドを実行します:
    export AWS_ACCESS_KEY_ID=<<Your Access Key>>
    export AWS_SECRET_ACCESS_KEY=<<Your Secret Access Key>>
    export AWS_SESSION_TOKEN=<<Your Session Token>>

  2. extract_redshift_lineage.py スクリプトを実行し、リネージグラフを生成するために必要なメタデータを収集します:
    python extract_redshift_lineage.py \ 
     -r region \ 
     -i dzd_your_dz_domain_id \ 
     -n your-redshift-cluster-endpoint \ 
     -t your-rs-port \ 
     -d your-database \ 
     -s the-starting-date
  3. 次に、Amazon DataZone データベースに接続するためのユーザー名とパスワードを入力します。
  4. 確認メッセージが表示されたら yes と入力します。

設定が正しく行われた場合、次の確認メッセージが表示されます。

では、Amazon DataZone でこの図がどのように作成されたかを見ていきましょう。

  1. Amazon DataZone データポータルで、Sales プロジェクトを開きます。
  2. Data タブで、Data sources を選択します。
  3. データソースジョブを実行します。

この記事では、Amazon DataZone プロジェクトに Redshift データソースを追加するために、Sales_DW_Enviroment-default-datasource という名前のデータソースジョブを作成済みです。データソースジョブの作成方法については、Amazon Redshift の Amazon DataZone データソースを作成して実行するを参照してください。

ジョブを実行すると、次の確認メッセージが表示されます。

  1. Data タブで、ナビゲーションペインから Inventory data を選択します。
  2. total_sales アセットを選択します。
  1. Lineage タブを選択します。

Amazon DataZone は Total Sales テーブルの 3 つのノードで構成されるリネージグラフを作成します。任意のノードを選択して詳細を確認できます。

  1. Job/ Job run ノードの横にある矢印アイコンを選択すると、より詳細なリネージグラフを表示できます。
  1. Job / Job run を選択します

Job Info セクションには、合計売上テーブルを作成するために使用されたクエリが表示されます。

Amazon MWAA からのデータリネージのキャプチャ

Apache Airflow はバッチ処理型のワークフローを開発、スケジューリング、そして監視するためのオープンソースプラットフォームです。Amazon MWAA は、最新の Airflow プラットフォームを使ってワークフローを管理できる Airflow の管理サービスです。OpenLineage は openlineage-airflow パッケージを使って Airflow 2.6.3 との統合をサポートしており、同様の機能を Amazon MWAA でプラグインとして有効にできます。有効にすると、このプラグインは Airflow のメタデータを OpenLineage イベントに変換し、DataZone.PostLineageEvent で取り込めるようになります。

次の図は、OpenLineage を使用してデータリネージをキャプチャし Amazon DataZone に登録するにあたって、Amazon MWAA で必要な構成を示しています。

このワークフローでは、Amazon MWAA DAG を使用してデータパイプラインを呼び出します。プロセスは次のとおりです。

  1. openlineage-airflow プラグインは、Amazon MWAA で リネージを行うためのバックエンド機能 として設定されています。DAG 実行に関するメタデータがプラグインに渡され、OpenLineage 形式に変換されます。
  2. 収集されたリネージ情報は、Amazon MWAA の環境に応じた Amazon CloudWatch のロググループに書き込まれます。
  3. ヘルパー関数がログファイルからリネージ情報をキャプチャし、PostLineageEvent API を使用して Amazon DataZone に登録します。

この記事で使用している例では、Amazon MWAA のバージョン 2.6.3 、そして OpenLineage プラグインのバージョン 1.4.1 を使用しています。OpenLineage がサポートする他の Airflow バージョンについては、サポートされている Airflow バージョンを参照してください。

OpenLineage プラグインの Amazon MWAA への設定とリネージのキャプチャ

OpenLineage を使用してリネージを収集する際は、Transport 構成を設定する必要があります。これは、OpenLineage がイベントを出力する場所 (コンソールや HTTP エンドポイントなど) を指定します。ConsoleTransport を使用すると、OpenLineage イベントが Amazon MWAA タスクの CloudWatch ロググループに記録され、ヘルパー関数を使って Amazon DataZone に登録できます。

Amazon MWAA で設定された S3 バケットに追加された requirements.txt ファイルに以下の内容を設定します:

openlineage-airflow==1.4.1

Airflow 環境の MWAA 設定の Airflow logging configuration セクションで、ログレベル INFO で Airflow タスクログを有効にします。次のスクリーンショットはサンプルの設定を示しています。

正しく設定すれば Airflow にプラグインが追加されます。プラグインが追加されたかどうかは Airflow UI の Admin メニューから Plugins を選択することで確認できます。

この記事では、サンプルの DAG を使用して Redshift テーブルにデータを取り込みます。次のスクリーンショットは、グラフビューの DAG を示しています。

DAG を実行し、実行が正常に完了したら、Airflow 環境 (airflow-env_name-task) の Amazon MWAA タスク CloudWatch ロググループを開き、console.py という式でフィルタリングして、OpenLineage から出力されたイベントを選択します。次のスクリーンショットは、その結果を示しています。

Amazon DataZone へのデータリネージの登録

CloudWatch にリネージイベントを出力できました。次のステップは、Amazon DataZone にそれらを登録し、データアセットに関連付けてビジネスデータカタログ上で可視化することです。

  1. ファイル requirements.txtairflow_cw_parse_log.py をダウンロードし、AWS リージョン、Amazon MWAA 環境名、Amazon DataZone ドメイン ID などの環境詳細を収集します。
  2. Amazon MWAA の環境名は Amazon MWAA コンソールから取得できます。
  3. Amazon DataZone ドメイン ID は、Amazon DataZone サービスコンソールまたは Amazon DataZone ポータルから取得できます。
  4. CloudShell に移動し、Actions メニューから Upload files を選択し、requirements.txtextract_airflow_lineage.py をアップロードします。

  5. ファイルがアップロードされたら、次のスクリプトを実行して Airflow タスクログからリネージイベントをフィルタリングし、Amazon DataZone に登録します。(訳註:your_domain_identifier は自身の DataZone ドメイン ID に、your_airflow_environment_name は自身の Airflow 環境名に置き換えます)
    # 仮想環境をセットアップし、依存関係をインストールする
    python -m venv env 
    pip install -r requirements.txt 
    . env/bin/activate 
    
    # スクリプトを実行する
    python extract_airflow_lineage.py \ 
     --region us-east-1 \ 
     --domain-identifier your_domain_identifier \ 
     --airflow-environment-name your_airflow_environment_name

extract_airflow_lineage.py 関数は、Amazon MWAA タスクのロググループからデータリネージイベントをフィルタリングし、Amazon DataZone 内の指定されたドメインにデータリネージを登録します。

Amazon DataZone でのデータリネージの可視化

DataZone にリネージが登録された後、DataZone プロジェクトを開き、Data タブに移動して Amazon MWAA DAG がアクセスしたデータアセットを選択します。この記事ではサブスクライブされたアセットの例を示します。

Amazon DataZone に登録されたデータリネージを可視化するには Lineage タブに移動します。

ノードを選択して追加のリネージメタデータを確認します。次のスクリーンショットでは、リネージの生成元が airflow とマークされていることがわかります。

結論

この記事では、Amazon DataZone のデータリネージのプレビュー機能、その仕組み、AWS Glue、Amazon Redshift、Amazon MWAA からリネージイベントをキャプチャしてアセットのブラウジング体験の一部として可視化する方法について説明しました。

Amazon DataZone の詳細と開始方法については Getting started guide を参照してください。Amazon DataZone の最新のデモと利用可能な機能の簡単な説明については、YouTube プレイリストをご覧ください。


著者について

Leonardo Gomez は AWS のプリンシパルアナリティクススペシャリストであり、10 年以上にわたるデータマネジメントの経験があります。データガバナンスを専門としており、データの可能性を最大限に活かしながらデータの民主化に取り組んでいる世界中の顧客を支援しています。 LinkedIn で彼とつながってください。

Priya Tiruthani は AWS の Amazon DataZone でシニアテクニカルプロダクトマネージャーを務めています。彼女はデータアナリティクスに必要なデータの発見とキュレーションの改善に注力しています。特にデータガバナンスとアナリティクスの分野で、顧客のエンドツーエンドのデータジャーニーを簡素化するための革新的な製品を作ることに情熱を注いでいます。仕事以外では、ハイキングやネイチャーフォトグラフィー、最近ではピックルボールというスポーツを楽しんでいます。

Ron Kyker は AWS の Amazon DataZone でプリンシパルエンジニアを務めており、チームのためにイノベーションの推進、複雑な問題の解決、エンジニアリングの優秀性の基準設定に尽力しています。仕事以外では、友人や家族とボードゲームを楽しんだり、映画鑑賞、ワインテイスティングなどを趣味としています。

Srinivasan Kuppusamy は AWS の ProServe でデータ分野のシニアクラウドアーキテクト を務めており、AWS のクラウドのテクノロジーを活用してお客様のビジネス課題を解決するのを支援しています。彼の関心分野はデータアナリティクス、データガバナンス、AI/ML です。

翻訳はパートナーソリューションアーキテクトの丸山 大輔が担当しました。原文はこちらです。