View a markdown version of this page

Utiliser la dette avec Amazon MWAA - Amazon Managed Workflows for Apache Airflow

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.

Version

Vous pouvez utiliser l'exemple de code de cette page avec Apache Airflow v2 en Python 3.12 sur le site Web Python et Apache Airflow v3 en Python 3.12 sur le site Web Python.

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
  1. Accédez au répertoire dans lequel vous avez cloné le projet dbt starter.

  2. Exécutez la AWS CLI commande Amazon S3 suivante pour copier de manière récursive le contenu du projet dans le dags dossier de votre environnement à l'aide du --recursive paramètre. La commande crée un sous-répertoire appelé dbt que 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 le dbt répertoire de ce projet de démarrage spécifique.

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

    Vous pouvez utiliser des noms différents pour les sous-répertoires de projets afin d'organiser plusieurs projets dbt dans le répertoire parentdbt.

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.

  1. Accédez à la console Amazon MWAA, puis choisissez Open Airflow UI dans la liste des environnements disponibles.

  2. Dans l'interface utilisateur d'Apache Airflow, recherchez le dbt-installation-test DAG dans la liste, puis choisissez la date dans la Last Run colonne pour ouvrir la dernière tâche réussie.

  3. À l'aide de Graph View, choisissez la bash_command tâche pour ouvrir les détails de l'instance de tâche.

  4. 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
  1. Dans le répertoire où vous avez cloné le projet de démarrage, créez un fichier nommé profiles.yml avec 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_user password: your_db_password dbname: your_database schema: your_schema threads: 4
  2. Téléchargez le fichier dans le dbt sous-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" )