翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon MWAA での dbt の使用
Amazon MWAA では、dbt (データ構築ツール) と PostgreSQL を使用して、データ変換ワークフローを構築および実行できます。次の手順では、スタートアップスクリプトを使用して必要な依存関係を追加し、サンプルの dbt プロジェクトを環境の Amazon S3 バケットにアップロードします。次に、サンプル DAG を使用して、Amazon MWAA が依存関係をインストールしていることを確認します。最後に、 BashOperator を使用して dbt プロジェクトを実行します。
トピック
バージョン
このページのコード例は、Python ウェブサイトの Python 3.12 の Apache Airflow v2 と Python ウェブサイトの Python 3.12 の
前提条件
次の手順を実行する前に、以下が必要です。
-
Apache Airflow v2.11.2 を使用する Amazon MWAA 環境。このサンプルは作成され、v2.11.2 でテストされました。他の Apache Airflow バージョンで使用するためには、サンプルを変更する必要がある場合があります。
-
dbt プロジェクトのサンプル。Amazon MWAA で dbt を使い始めるには、フォークを作成し、dbt-labs GitHub リポジトリから dbt スタータープロジェクト
をクローンすることができます。
依存関係
dbt で Amazon MWAA を使用するには、次のスタートアップスクリプトを環境に追加します。詳細については、Amazon MWAA でのスタートアップスクリプトの使用 を参照してください。
#!/bin/bash if [[ "${MWAA_AIRFLOW_COMPONENT}" != "worker" ]] then exit 0 fi echo "------------------------------" echo "Installing virtual Python env" echo "------------------------------" pip3 install --upgrade pip echo "Current Python version:" python3 --version echo "..." sudo pip3 install --user virtualenv sudo mkdir -p /usr/local/airflow/python3-virtualenv cd /usr/local/airflow/python3-virtualenv sudo python3 -m venv dbt-env sudo chmod -R 777 * echo "------------------------------" echo "Activating venv in $DBT_ENV_PATH" echo "------------------------------" source dbt-env/bin/activate pip3 list echo "------------------------------" echo "Installing libraries..." echo "------------------------------" # do not use sudo, as it will install outside the venv pip3 install dbt-core==1.9.4 dbt-redshift==1.9.1 dbt-postgres==1.9.0 echo "------------------------------" echo "Venv libraries..." echo "------------------------------" pip3 list dbt --version echo "------------------------------" echo "Deactivating venv..." echo "------------------------------" deactivate
DBT_ENV_PATH 変数の設定
スタートアップスクリプト$DBT_ENV_PATHで を設定するか、Amazon MWAA 環境で Airflow 設定として設定できます。
以下のセクションでは、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 コマンドを実行して、
--recursiveパラメータを使用してプロジェクトのコンテンツを環境のdagsフォルダに再帰的にコピーします。このコマンドは、dbtと呼ばれるサブディレクトリを作成し、これをすべてのdbtプロジェクトに使用できます。サブディレクトリが既に存在する場合、プロジェクトファイルは既存のディレクトリにコピーされ、新しいディレクトリは作成されません。このコマンドは、この特定のスターターのためにdbtディレクトリ内にサブディレクトリも作成します。aws s3 cpdbt-starter-projects3://amzn-s3-demo-bucket/dags/dbt/dbt-starter-project--recursiveプロジェクトのサブディレクトリに異なる名前を使用して、親
dbtディレクトリ内の複数の dbt プロジェクトを整理できます。
DAG を使用して dbt 依存関係のインストールを検証します。
次の DAG は、 BashOperatorと bash コマンドを使用して、Amazon MWAA がスタートアップスクリプトで指定された dbt 依存関係を正常にインストールしたかどうかを確認します。
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/python3-virtualenv/dbt-env/bin/dbt --version" )
以下を実行してタスクログにアクセスし、dbt とその依存関係がインストールされていることを確認します。
-
Amazon MWAA コンソールに移動し、使用可能な環境のリストから Airflow UI を開く を選択します。
-
Apache Airflow UI のリストから
dbt-installation-testDAG を探し、Last Run列にある日付を選択して、最後に成功したタスクを開きます。 -
グラフビュー を使用してタスクを選択し、
bash_commandタスクインスタンスの詳細を開きます。 -
Log を選択してタスクログを開き、起動スクリプトで指定された dbt バージョンがログに正常にリストされていることを確認します。
dbt profiles.yml を作成してアップロードする
ターゲットデータベースに接続するには、dbt に profiles.yml ファイルが必要です。次のセクションの DAG は を渡すため--profiles-dir /tmp/dbt、dbt は /tmp/dbt ディレクトリ内でprofiles.yml直接 を探します。これは、Amazon S3 にアップロードしたdbtフォルダです。
のプロファイル名は、スタータープロジェクトの で定義されているprofile:値と一致するprofiles.yml必要がありますdbt_project.yml。dbt スタータープロジェクトは を使用しますdefault。
profiles.yml を作成してアップロードするには
-
スタータープロジェクトをクローンしたディレクトリで、データベース接続の詳細
profiles.ymlを含む という名前のファイルを作成します。default: target: dev outputs: dev: type: postgres host:your-db-endpoint.region.rds.amazonaws.com port: 5432 user:your_db_userpassword:your_db_passworddbname:your_databaseschema:your_schemathreads: 4 -
環境の DAGsフォルダの
dbtサブディレクトリにファイルをアップロードします。aws s3 cp profiles.yml s3://amzn-s3-demo-bucket/dags/dbt/profiles.yml
データベース認証情報の保護
プレーンテキストの認証情報を保存しないようにするには、dbt env_var()関数を使用してシークレットを参照します。Amazon MWAA 環境変数または AWS Secrets Managerなどを使用して値を指定しますpassword: "{{ env_var('DBT_PASSWORD') }}"。また、Amazon MWAA VPC セキュリティグループで、ワーカーが設定されたポートのデータベースにアクセスできることを確認してください。
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", "") # assumes all files are in a subfolder of DAGs called dbt 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="source /usr/local/airflow/python3-virtualenv/dbt-env/bin/activate;\ cp -R /usr/local/airflow/dags/dbt /tmp;\ echo 'listing project files:';\ ls -R /tmp;\ cd /tmp/dbt/dbt-starter-project;\ /usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt run --project-dir /tmp/dbt/dbt-starter-project --profiles-dir /tmp/dbt;\ cat /tmp/dbt/dbt-starter-project/logs/dbt.log;\ rm -rf /tmp/dbt/dbt-starter-project" )