Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utiliser la dette avec Amazon MWAA
Avec Amazon MWAA, vous pouvez utiliser dbt (outil de génération de données) et PostgreSQL pour créer et exécuter des flux de travail de transformation de données. Au cours des étapes suivantes, ajoutez les dépendances requises à l'aide d'un script de démarrage et chargez un exemple de projet dbt dans le compartiment Amazon S3 de votre environnement. Utilisez ensuite un exemple de DAG pour vérifier qu'Amazon MWAA a installé les dépendances. Enfin, utilisez le BashOperator pour exécuter le projet dbt.
Rubriques
Version
Vous pouvez utiliser l'exemple de code de cette page avec Apache Airflow v2 en Python 3.12
Conditions préalables
Avant de pouvoir effectuer les étapes suivantes, vous devez disposer des éléments suivants :
-
Un environnement Amazon MWAA utilisant Apache Airflow v2.11.2. Cet échantillon a été écrit et testé avec la version 2.11.2. Vous devrez peut-être modifier l'exemple pour l'utiliser avec d'autres versions d'Apache Airflow.
-
Un exemple de projet DBT. Pour commencer à utiliser dbt avec Amazon MWAA, vous pouvez créer un fork et cloner le projet dbt starter à
partir du référentiel dbt-labs. GitHub
Dépendances
Pour utiliser Amazon MWAA avec dbt, ajoutez le script de démarrage suivant à votre environnement. Pour en savoir plus, consultez la section Utilisation d'un script de démarrage avec 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
Définition de la variable DBT_ENV_PATH
Vous pouvez le définir $DBT_ENV_PATH dans le script de démarrage ou le définir en tant que configuration Airflow dans votre environnement Amazon MWAA.
Dans les sections suivantes, chargez le répertoire de votre projet dbt sur Amazon S3 et exécutez un DAG qui vérifie si Amazon MWAA a correctement installé les dépendances dbt requises.
Charger un projet DBT sur Amazon S3
Pour pouvoir utiliser un projet dbt avec votre environnement Amazon MWAA, vous pouvez télécharger l'intégralité du répertoire du projet dans le dossier de dags votre environnement. Lorsque l'environnement est mis à jour, Amazon MWAA télécharge le répertoire dbt dans le dossier localusr/local/airflow/dags/.
Pour télécharger un projet DBT sur Amazon S3
-
Accédez au répertoire dans lequel vous avez cloné le projet dbt starter.
-
Exécutez la AWS CLI commande Amazon S3 suivante pour copier de manière récursive le contenu du projet dans le
dagsdossier de votre environnement à l'aide du--recursiveparamètre. La commande crée un sous-répertoire appelédbtque vous pouvez utiliser pour tous vos projets dbt. Si le sous-répertoire existe déjà, les fichiers du projet sont copiés dans le répertoire existant et aucun nouveau répertoire n'est créé. La commande crée également un sous-répertoire dans ledbtrépertoire de ce projet de démarrage spécifique.aws s3 cpdbt-starter-projects3://amzn-s3-demo-bucket/dags/dbt/dbt-starter-project--recursiveVous pouvez utiliser des noms différents pour les sous-répertoires de projets afin d'organiser plusieurs projets dbt dans le répertoire parent
dbt.
Utiliser un DAG pour vérifier l'installation de la dépendance à la dette
Le DAG suivant utilise une BashOperator commande and bash pour vérifier si Amazon MWAA a correctement installé les dépendances dbt spécifiées dans le script de démarrage.
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" )
Procédez comme suit pour accéder aux journaux des tâches et vérifier que dbt et ses dépendances ont été installés.
-
Accédez à la console Amazon MWAA, puis choisissez Open Airflow UI dans la liste des environnements disponibles.
-
Dans l'interface utilisateur d'Apache Airflow, recherchez le
dbt-installation-testDAG dans la liste, puis choisissez la date dans laLast Runcolonne pour ouvrir la dernière tâche réussie. -
À l'aide de Graph View, choisissez la
bash_commandtâche pour ouvrir les détails de l'instance de tâche. -
Choisissez Log pour ouvrir les journaux des tâches, puis vérifiez que les journaux répertorient correctement la version dbt spécifiée dans le script de démarrage.
Créez et téléchargez un fichier dbt profiles.yml
Pour se connecter à votre base de données cible, dbt a besoin d'un profiles.yml fichier. Le DAG de la section suivante passe--profiles-dir /tmp/dbt, donc dbt recherche profiles.yml directement dans le /tmp/dbt répertoire. Il s'agit du dbt dossier que vous avez chargé sur Amazon S3.
Le nom du profil profiles.yml doit correspondre à la profile: valeur définie dans celui du projet de démarragedbt_project.yml. Le projet dbt Starter utilisedefault.
Pour créer et télécharger un fichier profiles.yml
-
Dans le répertoire où vous avez cloné le projet de démarrage, créez un fichier nommé
profiles.ymlavec les informations de connexion à la base de données.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 -
Téléchargez le fichier dans le
dbtsous-répertoire du dossier DAGS de votre environnement.aws s3 cp profiles.yml s3://amzn-s3-demo-bucket/dags/dbt/profiles.yml
Protection des informations d'identification de base
Pour éviter de stocker des informations d'identification en texte brut, référencez les secrets à l'aide de la fonction dbtenv_var(). Fournissez les valeurs via les variables d'environnement Amazon MWAA ou AWS Secrets Manager, par exemple,. password: "{{ env_var('DBT_PASSWORD') }}" Assurez-vous également que vos groupes de sécurité Amazon MWAA VPC autorisent vos employés à accéder à votre base de données sur le port configuré.
Utiliser un DAG pour exécuter un projet dbt
Le DAG suivant utilise a BashOperator pour copier les projets dbt que vous avez chargés sur Amazon S3 depuis le usr/local/airflow/dags/ répertoire local vers le /tmp répertoire accessible en écriture, puis exécute le projet dbt. Les commandes bash supposent un projet dbt de démarrage intitulé. dbt-starter-project Modifiez le nom du répertoire en fonction du nom du répertoire de votre projet.
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" )