本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 上使用 dbt MWAA
本主題演示瞭如何將 dbt 和 Postgres 與 Amazon 一起使用。MWAA在以下步驟中,您將新增必要的相依性至您的requirements.txt
,並將範例 dbt 專案上傳到環境的 Amazon S3 儲存貯體。然後,您將使用範例DAG來驗證 Amazon 是否MWAA已安裝相依性,最後使BashOperator
用執行 dbt 專案。
版本
-
您可以使用此頁面上的代碼示例與 Python 3.10
中的阿帕奇氣流 V2。
必要條件
您需要下列項目,才能完成下列步驟:
-
使用阿帕奇氣流 v2.2.2 的 Amazon MWAA 環境。此範例已撰寫完成,並使用 v2.2.2 進行測試。您可能需要修改範例,才能與其他 Apache 氣流版本搭配使用。
-
一個範例 dbt 專案。要開始在 Amazon 上使用 dbtMWAA,您可以創建一個分叉並從 db GitHub t-labs 存儲庫克隆 dbt 入門項目
。
相依性
若要將 Amazon MWAA 與 dbt 搭配使用,請將以下啟動指令碼新增至您的環境。若要進一步了解,請參閱在 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 python3-virtualenv cd 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-redshift==1.6.1 dbt-postgres==1.6.1 echo "------------------------------" echo "Venv libraries..." echo "------------------------------" pip3 list dbt --version echo "------------------------------" echo "Deactivating venv..." echo "------------------------------" deactivate
在以下各節中,您會將 dbt 專案目錄上傳到 Amazon S3,然後執行驗證 Amazon 是否MWAA已成功安裝所需的 dbt 相依性。DAG
將 dbt 項目上傳到 Amazon S3
為了能夠在 Amazon MWAA 環境中使用 dbt 項目,您可以將整個項目目錄上傳到環境的dags
文件夾。當環境更新時,Amazon 將 dbt 目錄MWAA下載到本地文usr/local/airflow/dags/
件夾。
將 dbt 專案上傳到 Amazon S3
-
瀏覽至您複製 dbt 入門專案的目錄。
-
執行下列 Amazon S3 AWS CLI 命令,以遞迴方式使用
--recursive
參數將專案內容複製到環境的dags
資料夾。該命令創建一個名為的子目錄dbt
,您可以將其用於所有 dbt 項目。如果子目錄已存在,則專案檔案會複製到現有目錄中,而不會建立新目錄。此指令也會在此特定入門專案的dbt
目錄內建立子目錄。$
aws s3 cp
dbt-starter-project
s3://mwaa-bucket
/dags/dbt/dbt-starter-project
--recursive您可以為項目子目錄使用不同的名稱來組織父
dbt
目錄中的多個 dbt 項目。
使用 a DAG 來驗證 dbt 相依性安裝
以下DAG使用BashOperator
和 bash 命令來驗證 Amazon 是否MWAA已成功安裝中requirements.txt
指定的 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控台,然後從可用環境清單中選擇「開啟氣流使用者介面」。
-
在 Apache Airflow 使用者介面上,
dbt-installation-test
DAG從清單中找到,然後選擇Last Run
欄下方的日期以開啟上次成功的工作。 -
使用「圖形檢視」,選擇要開啟
bash_command
作業執行環境詳細資訊的作業。 -
選擇 [記錄] 開啟工作記錄,然後驗證記錄檔是否成功列出我們在中
requirements.txt
指定的 dbt 版本。
使用一個DAG來運行一個 dbt 項目
以下DAG使用 a 將您上傳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/mwaa_dbt_test_project;\ /usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt run --project-dir /tmp/dbt/mwaa_dbt_test_project --profiles-dir ..;\ cat /tmp/dbt_logs/dbt.log;\ rm -rf /tmp/dbt/mwaa_dbt_test_project" )