View a markdown version of this page

Utilizzo di dbt con Amazon MWAA - Amazon Managed Workflows for Apache Airflow

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di dbt con Amazon MWAA

Con Amazon MWAA, puoi utilizzare dbt (strumento di creazione di dati) e PostgreSQL per creare ed eseguire flussi di lavoro di trasformazione dei dati. Nei passaggi seguenti, aggiungi le dipendenze richieste utilizzando uno script di avvio e carica un progetto dbt di esempio nel bucket Amazon S3 del tuo ambiente. Quindi, utilizza un DAG di esempio per verificare che Amazon MWAA abbia installato le dipendenze. Infine, usa il per BashOperator eseguire il progetto dbt.

Versione

È possibile utilizzare l'esempio di codice in questa pagina con Apache Airflow v2 in Python 3.12 sul sito Web Python e Apache Airflow v3 in Python 3.12 sul sito Web Python. https://peps.python.org/pep-0693/

Prerequisiti

Prima di poter completare i seguenti passaggi, è necessario quanto segue:

  • Un ambiente Amazon MWAA che utilizza Apache Airflow v2.11.2. Questo esempio è stato scritto e testato con la versione 2.11.2. Potrebbe essere necessario modificare l'esempio per utilizzarlo con altre versioni di Apache Airflow.

  • Un esempio di progetto dbt. Per iniziare a usare dbt con Amazon MWAA, puoi creare un fork e clonare il progetto dbt starter dal repository dbt-labs. GitHub

Dipendenze

Per utilizzare Amazon MWAA con dbt, aggiungi il seguente script di avvio al tuo ambiente. Per ulteriori informazioni, consulta Usare uno script di avvio con 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
Impostazione della variabile DBT_ENV_PATH

Puoi impostarlo $DBT_ENV_PATH nello script di avvio o impostarlo come configurazione Airflow nel tuo ambiente Amazon MWAA.

Nelle sezioni seguenti, carica la directory del tuo progetto dbt su Amazon S3 ed esegui un DAG che convalida se Amazon MWAA ha installato correttamente le dipendenze dbt richieste.

Carica un progetto dbt su Amazon S3

Per poter utilizzare un progetto dbt con il tuo ambiente Amazon MWAA, puoi caricare l'intera directory del progetto nella cartella del tuo ambiente. dags Quando l'ambiente si aggiorna, Amazon MWAA scarica la directory dbt nella cartella locale. usr/local/airflow/dags/

Per caricare un progetto dbt su Amazon S3
  1. Accedi alla directory in cui hai clonato il progetto dbt starter.

  2. Esegui il seguente AWS CLI comando Amazon S3 per copiare in modo ricorsivo il contenuto del progetto nella cartella del tuo ambiente utilizzando il parametro. dags --recursive Il comando crea una sottodirectory denominata dbt che puoi usare per tutti i tuoi progetti dbt. Se la sottodirectory esiste già, i file di progetto vengono copiati nella cartella esistente e non viene creata una nuova directory. Il comando crea anche una sottodirectory all'interno della dbt directory per questo specifico progetto iniziale.

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

    È possibile utilizzare nomi diversi per le sottodirectory dei progetti per organizzare più progetti dbt all'interno della directory principale. dbt

Utilizzate un DAG per verificare l'installazione della dipendenza dbt

Il seguente DAG utilizza un comando BashOperator e un comando bash per verificare se Amazon MWAA ha installato correttamente le dipendenze dbt specificate nello script di avvio.

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" )

Effettua le seguenti operazioni per accedere ai log delle attività e verificare che dbt e le sue dipendenze siano stati installati.

  1. Accedi alla console Amazon MWAA, quindi scegli Open Airflow UI dall'elenco degli ambienti disponibili.

  2. Nell'interfaccia utente di Apache Airflow, trova il dbt-installation-test DAG dall'elenco, quindi scegli la data nella Last Run colonna per aprire l'ultima operazione riuscita.

  3. Utilizzando Graph View, scegliete l'bash_commandattività per aprire i dettagli dell'istanza dell'attività.

  4. Scegliete Log per aprire i log delle attività, quindi verificate che nei log sia indicata correttamente la versione dbt specificata nello script di avvio.

Crea e carica un file dbt profiles.yml

Per connettersi al database di destinazione, dbt richiede un file. profiles.yml Il DAG nella sezione successiva passa--profiles-dir /tmp/dbt, quindi dbt lo cerca profiles.yml direttamente all'interno della directory. /tmp/dbt Questa è la dbt cartella che hai caricato su Amazon S3.

Il nome del profilo in profiles.yml deve corrispondere al profile: valore definito nel progetto iniziale. dbt_project.yml Il progetto dbt starter utilizza. default

Per creare e caricare un profiles.yml
  1. Nella directory in cui hai clonato il progetto iniziale, crea un file denominato profiles.yml con i dettagli di connessione al database.

    default: target: dev outputs: dev: type: postgres host: your-db-endpoint.region.rds.amazonaws.com port: 5432 user: your_db_user password: your_db_password dbname: your_database schema: your_schema threads: 4
  2. Carica il file dbt nella sottodirectory nella cartella DAG del tuo ambiente.

    aws s3 cp profiles.yml s3://amzn-s3-demo-bucket/dags/dbt/profiles.yml
Protezione delle credenziali del database

Per evitare di archiviare le credenziali in testo normale, fai riferimento ai segreti utilizzando la funzione dbt. env_var() Fornisci i valori tramite variabili di ambiente Amazon MWAA o, ad esempio,. AWS Secrets Managerpassword: "{{ env_var('DBT_PASSWORD') }}" Assicurati inoltre che i tuoi gruppi di sicurezza Amazon MWAA VPC consentano ai tuoi lavoratori di raggiungere il tuo database sulla porta configurata.

Usa un DAG per eseguire un progetto dbt

Il seguente DAG utilizza un BashOperator per copiare i progetti dbt caricati su Amazon S3 dalla usr/local/airflow/dags/ directory locale alla /tmp directory accessibile in scrittura, quindi esegue il progetto dbt. I comandi bash presuppongono un progetto dbt iniziale intitolato. dbt-starter-project Modificate il nome della cartella in base al nome della cartella del vostro progetto.

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" )