View a markdown version of this page

Gestion des dépendances Python dans requirements.txt - 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.

Gestion des dépendances Python dans requirements.txt

Cette rubrique explique comment installer et gérer les dépendances Python dans un requirements.txt fichier pour un environnement Amazon Managed Workflows pour Apache Airflow.

Tester les DAG à l'aide de l'utilitaire Amazon MWAA CLI

  • L'utilitaire d'interface de ligne de commande (CLI) reproduit localement un environnement Amazon Managed Workflows pour Apache Airflow.

  • La CLI crée localement une image de conteneur Docker similaire à une image de production Amazon MWAA. Vous pouvez l'utiliser pour exécuter un environnement Apache Airflow local afin de développer et de tester des DAG, des plugins personnalisés et des dépendances avant le déploiement sur Amazon MWAA.

  • Pour exécuter la CLI, reportez-vous à https://github.com/aws/amazon-mwaa-docker-images aws-mwaa-docker-images on. GitHub

Installation des dépendances Python à l'aide du format de fichier des PyPi.org exigences

La section suivante décrit les différentes méthodes d'installation des dépendances Python en fonction du format de fichier des PyPi.org exigences.

Option 1 : dépendances Python à partir de l'index des packages Python

La section suivante explique comment spécifier les dépendances Python à partir de l'index des packages Python dans un requirements.txt fichier.

Apache Airflow v3
  1. Testez localement. Ajoutez des bibliothèques supplémentaires de manière itérative pour trouver la bonne combinaison de packages et de leurs versions, avant de créer un requirements.txt fichier. Pour exécuter l'utilitaire Amazon MWAA CLI, reportez-vous à la section https://github.com/aws/amazon-mwaa-docker-images aws-mwaa-docker-images sur. GitHub

  2. Consultez les suppléments du package Apache Airflow. Pour accéder à la liste des packages installés pour Apache Airflow v3 sur Amazon MWAA, consultez requirements.txt aws-mwaa-docker-images sur le site Web. GitHub

  3. Ajoutez une déclaration de contraintes. Ajoutez le fichier de contraintes de votre environnement Apache Airflow v3 en haut de votre requirements.txt fichier. Les fichiers de contraintes d'Apache Airflow spécifient les versions du fournisseur disponibles au moment de la publication d'Apache Airflow.

    Dans l'exemple suivant, remplacez {environment-version} par le numéro de version de votre environnement et {Python-version} par la version de Python compatible avec votre environnement.

    Pour plus d'informations sur la version de Python compatible avec votre environnement Apache Airflow, consultez la section Versions d'Apache Airflow.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    Si le fichier de contraintes détermine que le xyz==1.0 package n'est pas compatible avec les autres packages de votre environnementpip3 install, il n'empêche pas l'installation de bibliothèques incompatibles dans votre environnement. Si l'installation échoue pour l'un des packages, vous pouvez accéder aux journaux d'erreurs pour chaque composant Apache Airflow (le planificateur, le worker et le serveur Web) dans le flux de journaux correspondant sur Logs. CloudWatch Pour plus d'informations sur les types de journaux, reportez-vous àAccès aux journaux Airflow sur Amazon CloudWatch.

  4. Packages Apache Airflow. Ajoutez les extras du package et la version (==). Cela permet d'empêcher l'installation de packages portant le même nom, mais dont la version est différente, dans votre environnement.

    apache-airflow[package-extra]==2.5.1
  5. Bibliothèques Python. Ajoutez le nom du package et la version (==) dans votre requirements.txt fichier. Cela permet d'éviter l'application automatique d'une future mise à jour PyPi.org de dernière minute.

    library == version
    Exemple Boto3 et psycopg2-binary

    Cet exemple est fourni à des fins de démonstration. Les bibliothèques boto et psycopg2-binary sont incluses dans l'installation de base d'Apache Airflow v3 et n'ont pas besoin d'être spécifiées dans un fichier. requirements.txt

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    Si un package est spécifié sans version, Amazon MWAA installe la dernière version du package depuis. PyPi.org Cette version peut entrer en conflit avec d'autres packages de votrerequirements.txt.

Apache Airflow v2
  1. Testez localement. Ajoutez des bibliothèques supplémentaires de manière itérative pour trouver la bonne combinaison de packages et de leurs versions, avant de créer un requirements.txt fichier. Pour exécuter l'utilitaire Amazon MWAA CLI, reportez-vous à la section https://github.com/aws/amazon-mwaa-docker-images aws-mwaa-docker-images sur. GitHub

  2. Consultez les suppléments du package Apache Airflow. Pour accéder à la liste des packages installés pour Apache Airflow v2 sur Amazon MWAA, accédez à requirements.txt aws-mwaa-docker-images sur le site Web. GitHub

  3. Ajoutez une déclaration de contraintes. Ajoutez le fichier de contraintes de votre environnement Apache Airflow v2 en haut de votre requirements.txt fichier. Les fichiers de contraintes d'Apache Airflow spécifient les versions du fournisseur disponibles au moment de la publication d'Apache Airflow.

    À partir de la version 2.7.2 d'Apache Airflow, votre fichier de spécifications doit inclure une déclaration. --constraint Si vous n'indiquez aucune contrainte, Amazon MWAA vous en indiquera une afin de s'assurer que les packages répertoriés dans vos exigences sont compatibles avec la version d'Apache Airflow que vous utilisez.

    Dans l'exemple suivant, remplacez {environment-version} par le numéro de version de votre environnement et {Python-version} par la version de Python compatible avec votre environnement.

    Pour plus d'informations sur la version de Python compatible avec votre environnement Apache Airflow, consultez la section Versions d'Apache Airflow.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    Si le fichier de contraintes détermine que le xyz==1.0 package n'est pas compatible avec les autres packages de votre environnementpip3 install, il n'empêche pas l'installation de bibliothèques incompatibles dans votre environnement. Si l'installation échoue pour l'un des packages, vous pouvez accéder aux journaux d'erreurs pour chaque composant Apache Airflow (le planificateur, le worker et le serveur Web) dans le flux de journaux correspondant sur Logs. CloudWatch Pour plus d'informations sur les types de journaux, reportez-vous àAccès aux journaux Airflow sur Amazon CloudWatch.

  4. Packages Apache Airflow. Ajoutez les extras du package et la version (==). Cela permet d'empêcher l'installation de packages portant le même nom, mais dont la version est différente, dans votre environnement.

    apache-airflow[package-extra]==2.5.1
  5. Bibliothèques Python. Ajoutez le nom du package et la version (==) dans votre requirements.txt fichier. Cela permet d'éviter l'application automatique d'une future mise à jour PyPi.org de dernière minute.

    library == version
    Exemple Boto3 et psycopg2-binary

    Cet exemple est fourni à des fins de démonstration. Les bibliothèques boto et psycopg2-binary sont incluses dans l'installation de base d'Apache Airflow v2 et n'ont pas besoin d'être spécifiées dans un fichier. requirements.txt

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    Si un package est spécifié sans version, Amazon MWAA installe la dernière version du package depuis. PyPi.org Cette version peut entrer en conflit avec d'autres packages de votrerequirements.txt.

Option 2 : roues Python (.whl)

Une roue Python est un format de package conçu pour fournir des bibliothèques contenant des artefacts compilés. Les packages Wheel présentent plusieurs avantages en tant que méthode d'installation des dépendances dans Amazon MWAA :

  • Installation plus rapide  : les fichiers WHL sont copiés dans le conteneur sous la forme d'un seul ZIP, puis installés localement, sans avoir à télécharger chacun d'eux.

  • Moins de conflits  : vous pouvez déterminer à l'avance la compatibilité des versions de vos packages. Par conséquent, il n'est pas nécessaire d'élaborer pip de manière récursive des versions compatibles.

  • Plus de résilience  : avec les bibliothèques hébergées en externe, les exigences en aval peuvent changer, ce qui entraîne une incompatibilité de version entre les conteneurs d'un environnement Amazon MWAA. En ne dépendant pas d'une source externe pour les dépendances, chaque conteneur possède les mêmes bibliothèques, quel que soit le moment où chaque conteneur est instancié.

Nous vous recommandons les méthodes suivantes pour installer les dépendances Python à partir d'une archive Python Wheel (.whl) dans votrerequirements.txt.

Utilisation du fichier plugins.zip sur un compartiment Amazon S3

Le planificateur, les outils de travail et le serveur Web Apache Airflow (pour Apache Airflow v2.2.2 et versions ultérieures) recherchent des plugins personnalisés lors du démarrage sur le conteneur Fargate AWS géré pour votre environnement à l'adresse. /usr/local/airflow/plugins/* Ce processus commence avant les dépendances Amazon MWAA pip3 install -r requirements.txt pour Python et le démarrage du service Apache Airflow. Un plugins.zip fichier peut être utilisé pour tous les fichiers que vous ne souhaitez pas modifier en permanence pendant l'exécution de l'environnement, ou pour lesquels vous ne souhaitez pas accorder l'accès aux utilisateurs qui écrivent des DAG. Par exemple, les fichiers roues de la bibliothèque Python, les fichiers PEM de certificats et les fichiers YAML de configuration.

La section suivante décrit comment installer une roue qui se trouve dans le plugins.zip fichier de votre compartiment Amazon S3.

  1. Téléchargez les fichiers WHL nécessaires. Vous pouvez les utiliser pip download avec vos images aws-mwaa-docker-images existantes requirements.txt sur Amazon MWAA ou avec un autre conteneur Amazon Linux 2 pour résoudre et télécharger les fichiers de roue Python nécessaires.

    pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins" cd "$AIRFLOW_HOME/plugins" zip "$AIRFLOW_HOME/plugins.zip" *
  2. Spécifiez le chemin dans votre requirements.txt. Spécifiez le répertoire des plugins en haut de votre fichier requirements.txt en utilisant --find-links et demandez de pip ne pas installer à partir d'autres sources en utilisant --no-index, comme indiqué dans le code suivant :

    --find-links /usr/local/airflow/plugins --no-index
    Exemple roue dans requirements.txt

    L'exemple suivant suppose que vous avez chargé la roue dans un plugins.zip fichier à la racine de votre compartiment Amazon S3. Par exemple :

    --find-links /usr/local/airflow/plugins --no-index numpy

    Amazon MWAA récupère la numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl roue plugins dans le dossier et l'installe dans votre environnement.

Utilisation d'un fichier WHL hébergé sur une URL

La section suivante décrit comment installer une roue hébergée sur une URL. L'URL doit être accessible au public ou accessible depuis l'Amazon VPC personnalisé que vous avez spécifié pour votre environnement Amazon MWAA.

  • Fournissez une URL. Fournissez l'URL d'une roue de votrerequirements.txt.

    Exemple archive de roues sur une URL publique

    L'exemple suivant télécharge une roue depuis un site public.

    --find-links https://files.pythonhosted.org/packages/ --no-index

    Amazon MWAA récupère la roue à partir de l'URL que vous avez spécifiée et l'installe dans votre environnement.

    Note

    Les URL ne sont pas accessibles depuis les serveurs Web privés qui installent les exigences d'Amazon MWAA v2.2.2 et versions ultérieures.

Création d'un fichier WHL à partir d'un DAG

Si vous disposez d'un environnement de réseau privé utilisant Apache Airflow v2.2.2 ou version ultérieure et que vous ne parvenez pas à installer les exigences car votre environnement n'a pas accès à des référentiels externes, vous pouvez utiliser le DAG suivant pour intégrer vos exigences Amazon MWAA existantes sur Amazon S3 :

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago S3_BUCKET = 'my-s3-bucket' S3_KEY = 'backup/plugins_whl.zip' with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://amzn-s3-demo-bucket/{S3_KEY}" )

Après avoir exécuté le DAG, utilisez ce nouveau fichier comme Amazon MWAAplugins.zip, éventuellement, avec d'autres plugins. Ensuite, mettez à jour votre requirements.txt liste précédée par --find-links /usr/local/airflow/plugins et --no-index sans ajout--constraint.

Vous pouvez utiliser cette méthode pour utiliser les mêmes bibliothèques hors connexion.

Option 3 : dépendances Python hébergées sur un dépôt PyPi/PEP-503 conforme privé

La section suivante décrit comment installer un module supplémentaire d'Apache Airflow hébergé sur une URL privée avec authentification.

  1. Ajoutez votre nom d'utilisateur et votre mot de passe comme options de configuration d'Apache Airflow. Par exemple :

    • foo.user : YOUR_USER_NAME

    • foo.pass : YOUR_PASSWORD

  2. Créez votre requirements.txt dossier. Dans l'exemple suivant, remplacez les espaces réservés par votre URL privée, ainsi que le nom d'utilisateur et le mot de passe que vous avez ajoutés en tant qu'options de configuration d'Apache Airflow. Par exemple :

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. Ajoutez toutes les bibliothèques supplémentaires à votre requirements.txt fichier. Par exemple :

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3

Activation des journaux sur la console Amazon MWAA

Le rôle d'exécution pour votre environnement Amazon MWAA nécessite une autorisation pour envoyer des CloudWatch journaux à Logs. Pour mettre à jour les autorisations d'un rôle d'exécution, reportez-vous àRôle d'exécution Amazon MWAA.

Vous pouvez activer les journaux Apache Airflow au CRITICAL niveau INFOWARNING,ERROR, ou. Lorsque vous choisissez un niveau de journalisation, Amazon MWAA envoie des journaux correspondant à ce niveau et à tous les niveaux de gravité supérieurs. Par exemple, si vous activez les journaux au INFO niveau, Amazon MWAA envoie les INFO journaux et WARNINGERROR, et les niveaux de CRITICAL journalisation à CloudWatch Logs. Nous vous recommandons d'activer les journaux Apache Airflow au INFO niveau permettant au planificateur d'accéder aux journaux reçus pour le. requirements.txt

Cette image montre comment activer les journaux au niveau INFO.

Accès aux journaux sur la console CloudWatch Logs

Vous pouvez accéder aux journaux d'Apache Airflow pour le planificateur qui planifie vos flux de travail et analyse votre dossier. dags Les étapes suivantes décrivent comment ouvrir le groupe de journaux pour le planificateur sur la console Amazon MWAA et comment accéder aux journaux Apache Airflow sur la CloudWatch console Logs.

Pour accéder aux journaux d'un fichier requirements.txt
  1. Ouvrez la page Environnements sur la console Amazon MWAA.

  2. Choisissez un environnement.

  3. Choisissez le groupe de journaux du planificateur Airflow dans le volet Surveillance.

  4. Choisissez l'option requirements_install_ip Login Log streams.

  5. Reportez-vous à la liste des packages installés sur l'environnement à l'adresse/usr/local/airflow/.local/bin. Par exemple :

    Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1)) Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
  6. Consultez la liste des packages et vérifiez si l'un d'entre eux a rencontré une erreur lors de l'installation. En cas de problème, vous pouvez obtenir une erreur similaire à la suivante :

    2021-03-05T14:34:42.731-07:00 No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4)) No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))

Erreurs d'accès dans l'interface utilisateur d'Apache Airflow

Vous pouvez également consulter votre interface utilisateur Apache Airflow pour déterminer si une erreur est liée à un autre problème. L'erreur la plus courante que vous pouvez rencontrer avec Apache Airflow sur Amazon MWAA est la suivante :

Broken DAG: No module named x

Si vous trouvez cette erreur dans l'interface utilisateur d'Apache Airflow, il vous manque probablement une dépendance obligatoire dans votre requirements.txt fichier.

Connectez-vous à Apache Airflow

Vous avez besoin d'Politique d'accès à l'interface utilisateur d'Apache Airflow : AmazonMWAAWebServerAccessautorisations pour accéder Compte AWS à votre interface utilisateur Apache Airflow Gestion des identités et des accès AWS (IAM).

Pour accéder à votre interface utilisateur Apache Airflow
  1. Ouvrez la page Environnements sur la console Amazon MWAA.

  2. Choisissez un environnement.

  3. Choisissez Open Airflow UI.

Exemples de scénarios requirements.txt

Vous pouvez mélanger et assortir différents formats dans votrerequirements.txt. L'exemple suivant utilise une combinaison de différentes méthodes pour installer des options supplémentaires.

Exemple Suppléments PyPi.org et URL publique

Vous devez utiliser --index-url cette option lorsque vous spécifiez des packages provenant PyPi.org, en plus des packages figurant sur une URL publique, tels que des URL de dépôt personnalisées conformes à la norme PEP 503.

aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib