

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
<a name="samples-dbt"></a>

Topik ini menunjukkan bagaimana Anda dapat menggunakan dbt dan Postgres dengan Amazon MWAA. Pada langkah-langkah berikut, Anda akan menambahkan dependensi yang diperlukan ke perangkat Anda`requirements.txt`, dan mengunggah contoh proyek dbt ke bucket Amazon S3 lingkungan Anda. Kemudian, Anda akan menggunakan sampel DAG untuk memverifikasi bahwa Amazon MWAA telah menginstal dependensi, dan akhirnya menggunakan `BashOperator` untuk menjalankan proyek dbt.

**Topics**
+ [Versi](#samples-dbt-version)
+ [Prasyarat](#samples-dbt-prereqs)
+ [Dependensi](#samples-dbt-dependencies)
+ [Unggah proyek dbt ke Amazon S3](#samples-dbt-upload-project)
+ [Gunakan DAG untuk memverifikasi instalasi ketergantungan dbt](#samples-dbt-test-dependencies)
+ [Gunakan DAG untuk menjalankan proyek dbt](#samples-dbt-run-project)

## Versi
<a name="samples-dbt-version"></a>

**[Anda dapat menggunakan contoh kode pada halaman ini dengan **Apache Airflow v2 di Python 3.10 dan Apache Airflow**[v3 di Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

## Prasyarat
<a name="samples-dbt-prereqs"></a>

Sebelum Anda dapat menyelesaikan langkah-langkah berikut, Anda memerlukan yang berikut:
+ [Lingkungan Amazon MWAA](get-started.md) menggunakan Apache Airflow v2.2.2. Sampel ini ditulis, dan diuji dengan v2.2.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](https://github.com/dbt-labs/dbt-starter-project). GitHub 

## Dependensi
<a name="samples-dbt-dependencies"></a>

Untuk menggunakan Amazon MWAA dengan dbt, tambahkan skrip startup berikut ke lingkungan Anda. Untuk mempelajari lebih lanjut, lihat [Menggunakan skrip startup dengan Amazon MWAA](using-startup-script.md).

```
#!/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
```

Di bagian berikut, Anda akan mengunggah direktori proyek dbt Anda ke Amazon S3 dan menjalankan DAG yang memvalidasi apakah Amazon MWAA telah berhasil menginstal dependensi dbt yang diperlukan.

## Unggah proyek dbt ke Amazon S3
<a name="samples-dbt-upload-project"></a>

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 lokal. `usr/local/airflow/dags/`

**Untuk mengunggah proyek dbt ke Amazon S3**

1. Arahkan ke direktori tempat Anda mengkloning proyek starter dbt.

1. Jalankan AWS CLI perintah Amazon S3 berikut untuk menyalin konten proyek secara rekursif ke `dags` folder lingkungan Anda menggunakan parameter. `--recursive` Perintah membuat sub-direktori bernama `dbt` 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 dalam `dbt` direktori untuk proyek pemula khusus ini.

   ```
   aws s3 cp dbt-starter-project s3://amzn-s3-demo-bucket/dags/dbt/dbt-starter-project --recursive
   ```

   Anda dapat menggunakan nama yang berbeda untuk sub-direktori proyek untuk mengatur beberapa proyek dbt dalam direktori induk. `dbt`

## Gunakan DAG untuk memverifikasi instalasi ketergantungan dbt
<a name="samples-dbt-test-dependencies"></a>

DAG berikut menggunakan perintah `BashOperator` dan bash untuk memverifikasi apakah Amazon MWAA telah berhasil menginstal dependensi dbt yang ditentukan dalam. `requirements.txt`

```
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.

1. Arahkan ke konsol Amazon MWAA, lalu pilih **Open Airflow UI** dari daftar lingkungan yang tersedia.

1. Pada Apache Airflow UI, temukan `dbt-installation-test` DAG dari daftar, lalu pilih tanggal di kolom untuk membuka `Last Run` tugas terakhir yang berhasil.

1. Menggunakan **Tampilan Grafik**, pilih `bash_command` tugas untuk membuka detail instance tugas.

1. Pilih **Log** untuk membuka log tugas, lalu verifikasi bahwa log berhasil mencantumkan versi dbt yang kami tentukan. `requirements.txt`

## Gunakan DAG untuk menjalankan proyek dbt
<a name="samples-dbt-run-project"></a>

DAG berikut menggunakan a `BashOperator` untuk menyalin proyek dbt yang Anda unggah ke Amazon S3 dari direktori `usr/local/airflow/dags/` lokal ke direktori `/tmp` yang dapat diakses tulis, lalu jalankan 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/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"
			)
```