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 page décrit les meilleures pratiques que nous recommandons pour installer et gérer les dépendances Python dans un requirements.txt fichier pour un environnement Amazon Managed Workflows for Apache Airflow.

Tests DAGs à l'aide de l'MWAACLIutilitaire Amazon

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

  • CLIcrée localement une image de conteneur Docker similaire à une image de MWAA production Amazon. Cela vous permet d'exécuter un environnement Apache Airflow local pour développer et tester DAGs des plugins personnalisés et des dépendances avant le déploiement sur AmazonMWAA.

  • Pour exécuter leCLI, reportez-vous à la section aws-mwaa-local-runnerActivé GitHub.

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

La section suivante décrit les différentes manières d'installer les dépendances Python conformément au format de fichier d'exigences PyPi .org.

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

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

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'MWAACLIutilitaire Amazon, consultez aws-mwaa-local-runnerle GitHub

  2. Consultez les suppléments du package Apache Airflow. Pour consulter la liste des packages installés pour Apache Airflow v2 sur AmazonMWAA, consultez Amazon MWAA local Runner requirements.txt sur le GitHub site Web.

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

    À partir de la version 2.7.2 d'Apache Airflow, votre fichier d'exigences doit inclure une instruction. --constraint Si vous ne fournissez aucune contrainte, Amazon vous en MWAA indiquera une afin de garantir 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} avec le numéro de version de votre environnement, et {Python-version} avec 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 environnement, il pip3 install échouera afin d'empêcher l'installation de bibliothèques incompatibles dans votre environnement. Si l'installation d'un package échoue, vous pouvez consulter les journaux d'erreurs de chaque composant Apache Airflow (le planificateur, le programme de travail et le serveur Web) dans le flux de journal correspondant sur Logs. CloudWatch Pour plus d'informations sur les types de journaux, consultezAfficher les journaux Airflow sur Amazon CloudWatch.

  4. Paquets 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 d'une version différente, sur 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 qu'une future mise à jour de rupture de PyPi.org ne soit automatiquement appliquée.

    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 les autres packages de votrerequirements.txt.

Apache Airflow v1
  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'MWAACLIutilitaire Amazon, consultez aws-mwaa-local-runnerle GitHub

  2. Consultez les extras du package Airflow. Consultez la liste des packages disponibles pour Apache Airflow v1.10.12 sur airflow/constraints-1.10.12/constraints-3.7.txt. https://raw.githubusercontent.com/apache/

  3. Ajoutez le fichier de contraintes. Ajoutez le fichier de contraintes pour Apache Airflow v1.10.12 en haut de votre fichier. requirements.txt Si le fichier de contraintes détermine que le xyz==1.0 package n'est pas compatible avec les autres packages de votre environnement, pip3 install il n'empêchera pas l'installation de bibliothèques incompatibles dans votre environnement.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. Paquets Apache Airflow v1.10.12. Ajoutez les extras du package Airflow et la version Apache Airflow v1.10.12 (). == Cela permet d'empêcher l'installation de packages portant le même nom, mais d'une version différente, sur votre environnement.

    apache-airflow[package]==1.10.12
    Exemple Coque sécurisée (SSH)

    L'exemple de requirements.txt fichier suivant s'installe SSH pour Apache Airflow v1.10.12.

    apache-airflow[ssh]==1.10.12
  5. Bibliothèques Python. Ajoutez le nom du package et la version (==) dans votre requirements.txt fichier. Cela permet d'éviter qu'une future mise à jour de rupture de PyPi.org ne soit automatiquement appliquée.

    library == version
    Exemple Boto3

    Le requirements.txt fichier d'exemple suivant installe la bibliothèque Boto3 pour Apache Airflow v1.10.12.

    boto3 == 1.17.4

    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 les autres packages de votrerequirements.txt.

Deuxième option : roues Python (.whl)

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

  • Installation plus rapide : les WHL fichiers sont copiés dans le conteneur en un seul fichierZIP, puis installés localement, sans qu'il soit nécessaire de les télécharger.

  • 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 de trouver 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é des versions entre les conteneurs d'un MWAA environnement Amazon. 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 recommandons les méthodes suivantes pour installer les dépendances Python à partir d'une archive Python Wheel (.whl) dans votrerequirements.txt.

Utilisation du plugins.zip fichier dans un compartiment Amazon S3

Le planificateur, les outils de traitement 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 AWS Fargate géré pour votre environnement à l'adresse. /usr/local/airflow/plugins/* Ce processus commence avant les dépendances Amazon pip3 install -r requirements.txt pour Python et le démarrage MWAA du service Apache Airflow. Un plugins.zip fichier doit ê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 écriventDAGs. Par exemple, les fichiers de roue de la bibliothèque Python, PEM les fichiers de certificats et YAML les fichiers 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 WHL fichiers nécessaires Vous pouvez les utiliser pip downloadavec votre conteneur Amazon MWAA Local-Runner existant requirements.txt ou un autre conteneur Amazon Linux 2 pour résoudre et télécharger les fichiers Python Wheel 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-linkset demandez de pip ne pas les installer à partir d'autres sources en utilisant --no-index, comme indiqué ci-dessous

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

À l'aide d'un WHL fichier hébergé sur un URL

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

  • Fournissez un URL. Fournissez le URL à une roue dans votrerequirements.txt.

    Exemple archive des roues sur un public URL

    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 URL que vous avez spécifiée et l'installe sur votre environnement.

    Note

    URLsne sont pas accessibles depuis des serveurs Web privés, conformément aux exigences d'installation dans Amazon MWAA v2.2.2 et versions ultérieures.

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

Si vous disposez d'un serveur Web 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 ce qui suit DAG pour intégrer vos MWAA exigences Amazon existantes dans 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://{S3_BUCKET}/{S3_KEY}" )

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

Cette méthode vous permet d'utiliser les mêmes bibliothèques hors ligne.

Troisième option : dépendances Python hébergées sur un dépôt privé PyPi PEP /-503 conforme

La section suivante décrit comment installer un Apache Airflow extra hébergé sur un serveur privé URL 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 nom privéURL, ainsi que par le nom d'utilisateur et le mot de passe que vous avez ajoutés comme options de configuration d'Apache Airflow. Par exemple :

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. Ajoutez des 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 MWAA console Amazon

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

Vous pouvez activer les journaux Apache Airflow au CRITICAL niveau INFOWARNING,ERROR, ou. Lorsque vous choisissez un niveau de journalisation, Amazon MWAA envoie des logs 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 recommandons d'activer les journaux Apache Airflow au INFO niveau du planificateur afin de visualiser les journaux reçus pour le. requirements.txt

Cette image montre comment activer les journaux au INFO niveau supérieur.

Afficher les journaux sur la console CloudWatch Logs

Vous pouvez consulter les journaux 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 MWAA console Amazon et afficher les journaux Apache Airflow sur la CloudWatch console Logs.

Pour consulter les journaux d'un requirements.txt
  1. Ouvrez la page Environnements sur la MWAA console Amazon.

  2. Choisissez un environnement.

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

  4. Choisissez le requirements_install_ip log in Log streams.

  5. Vous devriez voir 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, un message d'erreur similaire au suivant peut s'afficher :

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

Affichage des erreurs dans l'interface utilisateur d'Apache Airflow

Vous pouvez également vérifier l'interface utilisateur d'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 cette erreur s'affiche dans l'interface utilisateur d'Apache Airflow, il est probable qu'il vous manque une dépendance obligatoire dans votre requirements.txt fichier.

Connexion à Apache Airflow

Vous avez besoin d'Politique d'accès à l'interface utilisateur d'Apache Airflow : A mazonMWAAWeb ServerAccessautorisations pour votre AWS compte dans AWS Identity and Access Management (IAM) pour afficher votre interface utilisateur Apache Airflow.

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

  2. Choisissez un environnement.

  3. Choisissez Open Airflow UI.

Exemples de requirements.txt scénarios

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

Exemple Des extras sur PyPi .org et un public URL

Vous devez utiliser --index-url cette option lorsque vous spécifiez des packages provenant de PyPi .org, en plus des packages sur un site publicURL, tels que le dépôt URLs personnalisé conforme au PEP 503.

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