翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon MWAA での dbt の使用
このトピックでは、Amazon MWAA で dbt と Postgres を使用する方法を示します。次のステップでは、必要な依存関係を requirements.txt
に追加し、サンプルの dbt プロジェクトを環境の Amazon S3 バケットにアップロードします。次に、サンプル DAG を使用して Amazon MWAA が依存関係をインストールしたことを確認し、最後に BashOperator
を使用して dbt プロジェクトを実行します。
トピック
バージョン
-
このページのコード例は、「Python 3.10
」で Apache Airflow v2 以上と共に使用可能です。
前提条件
次の手順を完了するには、以下のものが必要です。
-
Apache Airflow v2.2.2 を使用する Amazon MWAA 環境。このサンプルは v2.2.2 で作成され、テストされています。他の Apache Airflow バージョンで使用するためには、サンプルを変更する必要がある場合があります。
-
dbt プロジェクトのサンプル。Amazon MWAA で dbt を使い始めるには、フォークを作成し、dbt-labs GitHub リポジトリから dbt スタータープロジェクト
をクローンすることができます。
依存関係
dbt で Amazon MWAA を使用するには、requirements.txt
に次の依存関係を追加してください。詳細については、「Python 依存関係のインストール」を参照してください。
環境の更新が完了すると、Amazon MWAA は必要な dbt ライブラリと、psycopg2
などの追加の依存関係をインストールします。
注記
Apache Airflow v2.2.2 で提供されるデフォルトの制約ファイルには、このガイドで使用している dbt のバージョンではサポートされていない、jsonschema
と矛盾するバージョンがあります。そのため、dbt で Amazon MWAA を使用する場合は、Apache Airflow 制約ファイルを Amazon S3 DAGs フォルダにダウンロードして変更し、--constraint /usr/local/airflow/dags/my-updated-constraint.txt
などの requirements.txt
ファイル内で参照するか、以下に示すように --constraint
から requirements.txt
を省略することができます。
json-rpc==1.13.0 minimal-snowplow-tracker==0.0.2 packaging==20.9 networkx==2.6.3 mashumaro==2.5 sqlparse==0.4.2 logbook==1.5.3 agate==1.6.1 dbt-extractor==0.4.0 pyparsing==2.4.7 msgpack==1.0.2 parsedatetime==2.6 pytimeparse==1.1.8 leather==0.3.4 pyyaml==5.4.1 # Airflow constraints are jsonschema==3.2.0 jsonschema==3.1.1 hologram==0.0.14 dbt-core==0.21.1 psycopg2-binary==2.8.6 dbt-postgres==0.21.1 dbt-redshift==0.21.1
以下のセクションでは、dbt プロジェクトディレクトリを Amazon S3 にアップロードし、Amazon MWAA が必要な dbt 依存関係を正常にインストールしたかどうかを検証する DAG を実行します。
DBT プロジェクトを Amazon S3 にアップロードする
Amazon MWAA 環境で dbt プロジェクトを使用できるようにするには、プロジェクトディレクトリ全体を環境のdags
フォルダにアップロードできます。環境が更新されると、Amazon MWAA は dbt ディレクトリをローカルusr/local/airflow/dags/
フォルダにダウンロードします。
DBT プロジェクトを Amazon S3 にアップロードするには
-
dbt スタータープロジェクトをクローンしたディレクトリに移動します。
-
次の Amazon S3 AWS CLI コマンドを実行して、
dags
パラメータを使用してプロジェクトの内容を再帰的に環境の--recursive
にコピーします。このコマンドは、dbt
と呼ばれるサブディレクトリを作成し、これをすべてのdbtプロジェクトに使用できます。サブディレクトリが既に存在する場合、プロジェクトファイルは既存のディレクトリにコピーされ、新しいディレクトリは作成されません。このコマンドは、この特定のスターターのためにdbt
ディレクトリ内にサブディレクトリも作成します。$
aws s3 cp
dbt-starter-project
s3://mwaa-bucket
/dags/dbt/dbt-starter-project
--recursiveプロジェクトのサブディレクトリに異なる名前を使用して、親
dbt
ディレクトリ内の複数の dbt プロジェクトを整理できます。
DAG を使用して dbt 依存関係のインストールを検証します。
次の DAGは、BashOperator
を使用し、requirements.txt
で指定されたdbtの依存関係を正常にインストールしたかどうかを Amazon MWAA が確認します。
from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago with DAG(dag_id="dbt-installation-test", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="/usr/local/airflow/.local/bin/dbt --version" )
以下を実行してタスクログを表示し、dbt とその依存関係がインストールされていることを確認します。
-
Amazon MWAA コンソールに移動し、使用可能な環境のリストから [Airflow UI を開く] を選択します。
-
Apache Airflow UI のリストから
dbt-installation-test
DAG を探し、Last Run
列の下にある日付を選択して、最後に成功したタスクを開きます。 -
グラフビューを使用してタスクを選択し、
bash_command
タスクインスタンスの詳細を開きます。 -
[Log] を選択してタスクログを開き、次に、
requirements.txt
で指定されたdbtのバージョンをログが正常にリストしていることを確認してください。
DAG を使用して dbt プロジェクトを実行します。
次の DAG は、BashOperator
を使用して Amazon S3 にアップロードした dbt プロジェクトをローカル usr/local/airflow/dags/
ディレクトリから書き込み可能な/tmp
ディレクトリにコピーし、dbt プロジェクトを実行します。bash コマンドは、dbt-starter-project
というタイトルのスターター dbt プロジェクトを想定しています。プロジェクトディレクトリの名前に従ってディレクトリ名を変更します。
from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago import os DAG_ID = os.path.basename(__file__).replace(".py", "") with DAG(dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="cp -R /usr/local/airflow/dags/dbt /tmp;\ cd /tmp/dbt/
dbt-starter-project
;\ /usr/local/airflow/.local/bin/dbt run --project-dir /tmp/dbt/dbt-starter-project
/ --profiles-dir ..;\ cat /tmp/dbt_logs/dbt.log" )