Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan dbt dengan Amazon MWAA
Dengan Amazon MWAA, Anda dapat menggunakan dbt (alat pembuatan data) dan PostgreSQL untuk membangun dan menjalankan alur kerja transformasi data. Pada langkah-langkah berikut, tambahkan dependensi yang diperlukan menggunakan skrip startup, dan unggah contoh proyek dbt ke bucket Amazon S3 lingkungan Anda. Kemudian, gunakan contoh DAG untuk memverifikasi bahwa Amazon MWAA telah menginstal dependensi. Terakhir, gunakan BashOperator untuk menjalankan proyek dbt.
Topik
Versi
Anda dapat menggunakan contoh kode di halaman ini dengan Apache Airflow v2 di Python 3.12
Prasyarat
Sebelum Anda dapat menyelesaikan langkah-langkah berikut, Anda memerlukan yang berikut:
-
Lingkungan Amazon MWAA menggunakan Apache Airflow v2.11.2. Sampel ini ditulis, dan diuji dengan v2.11.2. Anda mungkin perlu memodifikasi sampel untuk digunakan dengan versi Apache Airflow lainnya.
-
Contoh proyek dbt. Untuk mulai menggunakan dbt dengan Amazon MWAA, Anda dapat membuat fork dan mengkloning proyek starter dbt
dari repositori dbt-labs. GitHub
Dependensi
Untuk menggunakan Amazon MWAA dengan dbt, tambahkan skrip startup berikut ke lingkungan Anda. Untuk mempelajari selengkapnya, lihat Menggunakan skrip startup dengan 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
Mengatur variabel DBT_ENV_PATH
Anda dapat mengatur $DBT_ENV_PATH dalam skrip startup atau mengaturnya sebagai konfigurasi Airflow di lingkungan Amazon MWAA Anda.
Di bagian berikut, unggah direktori proyek dbt Anda ke Amazon S3 dan jalankan DAG yang memvalidasi apakah Amazon MWAA telah berhasil menginstal dependensi dbt yang diperlukan.
Unggah proyek dbt ke Amazon S3
Untuk dapat menggunakan proyek dbt dengan lingkungan Amazon MWAA Anda, Anda dapat mengunggah seluruh direktori proyek ke folder lingkungan Anda. dags Saat lingkungan diperbarui, Amazon MWAA mengunduh direktori dbt ke folder lokalusr/local/airflow/dags/.
Untuk mengunggah proyek dbt ke Amazon S3
-
Arahkan ke direktori tempat Anda mengkloning proyek starter dbt.
-
Jalankan AWS CLI perintah Amazon S3 berikut untuk menyalin konten proyek secara rekursif ke
dagsfolder lingkungan Anda menggunakan--recursiveparameter. Perintah membuat sub-direktoridbtyang disebut yang dapat Anda gunakan untuk semua proyek dbt Anda. Jika sub-direktori sudah ada, file proyek disalin ke direktori yang ada, dan direktori baru tidak dibuat. Perintah ini juga membuat sub-direktori dalamdbtdirektori untuk proyek starter khusus ini.aws s3 cpdbt-starter-projects3://amzn-s3-demo-bucket/dags/dbt/dbt-starter-project--recursiveAnda dapat menggunakan nama yang berbeda untuk sub-direktori proyek untuk mengatur beberapa proyek dbt dalam direktori indu
dbtk.
Gunakan DAG untuk memverifikasi instalasi ketergantungan dbt
DAG berikut menggunakan perintah a BashOperator dan bash untuk memverifikasi apakah Amazon MWAA telah berhasil menginstal dependensi dbt yang ditentukan dalam skrip startup.
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" )
Lakukan hal berikut untuk mengakses log tugas dan memverifikasi bahwa dbt dan dependensinya telah diinstal.
-
Arahkan ke konsol Amazon MWAA, lalu pilih Open Airflow UI dari daftar lingkungan yang tersedia.
-
Pada UI Apache Airflow, temukan
dbt-installation-testDAG dari daftar, lalu pilih tanggal diLast Runkolom untuk membuka tugas terakhir yang berhasil. -
Menggunakan Tampilan Grafik, pilih
bash_commandtugas untuk membuka detail instance tugas. -
Pilih Log untuk membuka log tugas, lalu verifikasi bahwa log berhasil mencantumkan versi dbt yang ditentukan dalam skrip startup.
Buat dan unggah profil.yml dbt
Untuk terhubung ke database target Anda, dbt memerlukan profiles.yml file. DAG di bagian berikutnya berlalu--profiles-dir /tmp/dbt, jadi dbt mencari profiles.yml langsung di dalam /tmp/dbt direktori. Ini adalah dbt folder yang Anda unggah ke Amazon S3.
Nama profil di profiles.yml harus sesuai dengan profile: nilai yang ditentukan dalam proyek pemuladbt_project.yml. Proyek starter dbt menggunakandefault.
Untuk membuat dan mengunggah profiles.yml
-
Di direktori tempat Anda mengkloning proyek starter, buat file bernama
profiles.ymldengan detail koneksi database Anda.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 -
Unggah file ke
dbtsub-direktori di folder DAG lingkungan Anda.aws s3 cp profiles.yml s3://amzn-s3-demo-bucket/dags/dbt/profiles.yml
Melindungi kredentif database
Untuk menghindari penyimpanan kredenSIAL plaintext, referensi rahasia menggunakan fungsi dbtenv_var(). Menyediakan nilai melalui variabel lingkungan Amazon MWAA atau AWS Secrets Manager—misalnya,. password: "{{ env_var('DBT_PASSWORD') }}" Juga pastikan grup keamanan Amazon MWAA VPC Anda mengizinkan pekerja Anda menjangkau database Anda di port yang dikonfigurasi.
Gunakan DAG untuk menjalankan proyek dbt
DAG berikut menggunakan a BashOperator untuk menyalin proyek dbt yang Anda unggah ke Amazon S3 dari usr/local/airflow/dags/ direktori lokal ke direktori yang dapat diakses penulisan/tmp, lalu menjalankan proyek dbt. Perintah bash mengasumsikan proyek dbt starter berjudul. dbt-starter-project Ubah nama direktori sesuai dengan nama direktori proyek Anda.
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" )