Utilisation d'un script de démarrage 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.

Utilisation d'un script de démarrage avec Amazon MWAA

Un script de démarrage est un script shell (.sh) que vous hébergez dans le compartiment Amazon S3 de votre environnement, similaire à vos DAG, à vos exigences et à vos plugins. Amazon MWAA exécute ce script au démarrage sur chaque composant Apache Airflow individuel (programme de travail, planificateur et serveur Web) avant d'installer les exigences et d'initialiser le processus Apache Airflow. Utilisez un script de démarrage pour effectuer les opérations suivantes :

  • Installer les environnements d'exécution : installez les environnements d'exécution Linux requis par vos flux de travail et vos connexions.

  • Configurer les variables d'environnement : définissez les variables d'environnement pour chaque composant Apache Airflow. Remplacez les variables courantes telles que PATHPYTHONPATH, etLD_LIBRARY_PATH.

  • Gestion des clés et des jetons : transmettez des jetons d'accès aux référentiels personnalisés aux clés de sécurité requirements.txt et configurez-les.

Les rubriques suivantes décrivent comment configurer un script de démarrage pour installer des environnements d'exécution Linux, définir des variables d'environnement et résoudre les problèmes connexes à l'aide CloudWatch des journaux.

Configuration d'un script de démarrage

Pour utiliser un script de démarrage avec votre environnement Amazon MWAA existant, chargez un .sh fichier dans le compartiment Amazon S3 de votre environnement. Ensuite, pour associer le script à l'environnement, spécifiez ce qui suit dans les détails de votre environnement :

  • Le chemin de l'URL Amazon S3 vers le script : le chemin relatif vers le script hébergé dans votre compartiment, par exemple, s3://mwaa-environment/startup.sh

  • L'ID de version Amazon S3 du script : version du script shell de démarrage dans votre compartiment Amazon S3. Vous devez spécifier l'ID de version qu'Amazon S3 attribue au fichier chaque fois que vous mettez à jour le script. Les identifiants de version sont des chaînes opaques Unicode, codées en UTF-8, prêtes pour les URL, dont la longueur ne dépasse pas 1 024 octets, par exemple. 3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

Pour effectuer les étapes décrites dans cette section, utilisez l'exemple de script suivant. Le script affiche la valeur attribuée àMWAA_AIRFLOW_COMPONENT. Cette variable d'environnement identifie chaque composant Apache Airflow sur lequel le script s'exécute.

Copiez le code et enregistrez-le localement sous le nomstartup.sh.

#!/bin/sh ​ echo "Printing Apache Airflow component" echo $MWAA_AIRFLOW_COMPONENT

Ensuite, téléchargez le script dans votre compartiment Amazon S3.

AWS Management Console
Pour télécharger un script shell (console)
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à l’adresse https://console.aws.amazon.com/s3/.

  2. Dans la liste des compartiments, choisissez le nom du compartiment associé à votre environnement.

  3. Dans l'onglet Objets, choisissez Upload (Charger).

  4. Sur la page de téléchargement, glissez et déposez le script shell que vous avez créé.

  5. Sélectionnez Charger.

Le script apparaît dans la liste des objets. Amazon S3 crée un nouvel ID de version pour le fichier. Si vous mettez à jour le script et que vous le chargez à nouveau sous le même nom de fichier, un nouvel ID de version est attribué au fichier.

AWS CLI
Pour créer et télécharger un script shell (CLI)
  1. Ouvrez une nouvelle invite de commande et exécutez la ls commande Amazon S3 pour répertorier et identifier le compartiment associé à votre environnement.

    $ aws s3 ls
  2. Accédez au dossier dans lequel vous avez enregistré le script shell. cpUtilisez-le dans une nouvelle fenêtre d'invite pour télécharger le script dans votre compartiment. Remplacez your-s3-bucket par vos informations.

    $ aws s3 cp startup.sh s3://your-s3-bucket/startup.sh

    En cas de succès, Amazon S3 affiche le chemin URL de l'objet :

    upload: ./startup.sh to s3://your-s3-bucket/startup.sh
  3. Utilisez la commande suivante pour récupérer le dernier ID de version du script.

    $ aws s3api list-object-versions --bucket your-s3-bucket --prefix startup --query 'Versions[?IsLatest].[VersionId]' --output text
    BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

Vous spécifiez cet ID de version lorsque vous associez le script à un environnement.

Associez maintenant le script à votre environnement.

AWS Management Console
Pour associer le script à un environnement (console)
  1. Ouvrez la page Environnements sur la console Amazon MWAA.

  2. Sélectionnez la ligne correspondant à l'environnement que vous souhaitez mettre à jour, puis choisissez Modifier.

  3. Sur la page Spécifier les détails, pour Fichier de script de démarrage - facultatif, entrez l'URL Amazon S3 du script, par exemple :s3://your-mwaa-bucket/startup-sh..

  4. Choisissez la dernière version dans la liste déroulante ou naviguez S3 pour trouver le script.

  5. Choisissez Suivant, puis passez à la page Réviser et enregistrer.

  6. Passez en revue les modifications, puis choisissez Enregistrer.

Les mises à jour de l'environnement peuvent prendre entre 10 et 30 minutes. Amazon MWAA exécute le script de démarrage lorsque chaque composant de votre environnement redémarre.

AWS CLI
Pour associer le script à un environnement (CLI)
  • Ouvrez une invite de commande et update-environment utilisez-la pour spécifier l'URL Amazon S3 et l'ID de version du script.

    $ aws mwaa update-environment \ --name your-mwaa-environment \ --startup-script-s3-path startup.sh \ --startup-script-s3-object-version BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

    En cas de succès, Amazon MWAA renvoie le nom de ressource Amazon (ARN) pour l'environnement :

    arn:aws::airflow:us-west-2:123456789012:environment/your-mwaa-environment 

La mise à jour de l'environnement peut prendre entre 10 et 30 minutes. Amazon MWAA exécute le script de démarrage lorsque chaque composant de votre environnement redémarre.

Enfin, récupérez les événements du journal pour vérifier que le script fonctionne comme prévu. Lorsque vous activez la journalisation pour chaque composant Apache Airflow, Amazon MWAA crée un nouveau groupe de journaux et un nouveau flux de journaux. Pour plus d'informations, consultez la section Types de journaux Apache Airflow.

AWS Management Console
Pour consulter le flux de log d'Apache Airflow (console)
  1. Ouvrez la page Environnements sur la console Amazon MWAA.

  2. Choisissez votre environnement.

  3. Dans le volet Surveillance, choisissez le groupe de journaux pour lequel vous souhaitez afficher les journaux, par exemple le groupe de journaux du planificateur Airflow.

  4. Dans la CloudWatch console, dans la liste Log streams, choisissez un flux avec le préfixe suivant :startup_script_exection_ip.

  5. Dans le volet Journaliser les événements, vous verrez le résultat de la commande imprimant la valeur deMWAA_AIRFLOW_COMPONENT. Par exemple, pour les journaux du planificateur, vous obtiendrez ce qui suit :

    Printing Apache Airflow component
    scheduler
    Finished running startup script. Execution time: 0.004s.
    Running verification
    Verification completed

Vous pouvez répéter les étapes précédentes pour consulter les journaux des utilisateurs et des serveurs Web.

Installation des environnements d'exécution Linux à l'aide d'un script de démarrage

Utilisez un script de démarrage pour mettre à jour le système d'exploitation d'un composant Apache Airflow et installez des bibliothèques d'exécution supplémentaires à utiliser avec vos flux de travail. Par exemple, le script suivant s'exécute yum update pour mettre à jour le système d'exploitation.

Lorsque vous exécutez yum update un script de démarrage, vous devez exclure Python --exclude=python* comme indiqué dans l'exemple. Pour que votre environnement fonctionne, Amazon MWAA installe une version spécifique de Python compatible avec votre environnement. Par conséquent, vous ne pouvez pas mettre à jour la version Python de l'environnement à l'aide d'un script de démarrage.

#!/bin/sh echo "Updating operating system" sudo yum update -y --exclude=python*

Pour installer des environnements d'exécution sur un composant Apache Airflow spécifique, utilisez les instructions MWAA_AIRFLOW_COMPONENT if et fi conditionnelles. Cet exemple exécute une seule commande pour installer la libaio bibliothèque sur le planificateur et le programme de travail, mais pas sur le serveur Web.

Important
  • Si vous avez configuré un serveur Web privé, vous devez soit utiliser la condition suivante, soit fournir tous les fichiers d'installation localement afin d'éviter les délais d'installation.

  • sudoÀ utiliser pour exécuter des opérations nécessitant des privilèges administratifs.

#!/bin/sh if [[ "${MWAA_AIRFLOW_COMPONENT}" != "webserver" ]] then sudo yum -y install libaio fi

Vous pouvez utiliser un script de démarrage pour vérifier la version de Python.

#!/bin/sh export PYTHON_VERSION_CHECK=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'` echo "Python version is $PYTHON_VERSION_CHECK"

Amazon MWAA ne prend pas en charge le remplacement de la version par défaut de Python, car cela peut entraîner des incompatibilités avec les bibliothèques Apache Airflow installées.

Définissez des variables d'environnement à l'aide d'un script de démarrage

Utilisez des scripts de démarrage pour définir des variables d'environnement et modifier les configurations d'Apache Airflow. Ce qui suit définit une nouvelle variable,ENVIRONMENT_STAGE. Vous pouvez référencer cette variable dans un DAG ou dans vos modules personnalisés.

#!/bin/sh export ENVIRONMENT_STAGE="development" echo "$ENVIRONMENT_STAGE"

Utilisez des scripts de démarrage pour remplacer les variables système ou Apache Airflow courantes. Par exemple, vous devez indiquer LD_LIBRARY_PATH à Python de rechercher des fichiers binaires dans le chemin que vous spécifiez. Cela vous permet de fournir des fichiers binaires personnalisés pour vos flux de travail à l'aide de plugins :

#!/bin/sh export LD_LIBRARY_PATH=/usr/local/airflow/plugins/your-custom-binary

Variables d’environnement réservées

Amazon MWAA réserve un ensemble de variables d'environnement critiques. Si vous remplacez une variable réservée, Amazon MWAA rétablit sa valeur par défaut. La liste suivante répertorie les variables réservées :

  • MWAA__AIRFLOW__COMPONENT— Utilisé pour identifier le composant Apache Airflow avec l'une des valeurs suivantes : schedulerworker, ouwebserver.

  • AIRFLOW__WEBSERVER__SECRET_KEY— La clé secrète utilisée pour signer en toute sécurité les cookies de session sur le serveur Web Apache Airflow.

  • AIRFLOW__CORE__FERNET_KEY— La clé utilisée pour le chiffrement et le déchiffrement des données sensibles stockées dans la base de métadonnées, par exemple les mots de passe de connexion.

  • AIRFLOW_HOME— Le chemin d'accès au répertoire de base d'Apache Airflow où les fichiers de configuration et les fichiers DAG sont stockés localement.

  • AIRFLOW__CELERY__BROKER_URL— URL du courtier de messages utilisé pour la communication entre le planificateur Apache Airflow et les nœuds de travail Celery.

  • AIRFLOW__CELERY__RESULT_BACKEND— URL de la base de données utilisée pour stocker les résultats des tâches Celery.

  • AIRFLOW__CORE__EXECUTOR— La classe d'exécuteur qu'Apache Airflow doit utiliser. Dans Amazon MWAA, il s'agit d'un CeleryExecutor

  • AIRFLOW__CORE__LOAD_EXAMPLES— Utilisé pour activer ou désactiver le chargement d'exemples de DAG.

  • AIRFLOW__METRICS__METRICS_BLOCK_LIST— Utilisé pour gérer les métriques Apache Airflow émises et capturées par Amazon MWAA dans. CloudWatch

  • SQL_ALCHEMY_CONN— Chaîne de connexion pour la base de données RDS pour PostgreSQL utilisée pour stocker les métadonnées Apache Airflow dans Amazon MWAA.

  • AIRFLOW__CORE__SQL_ALCHEMY_CONN— Utilisé dans le même but queSQL_ALCHEMY_CONN, mais conformément à la nouvelle convention de dénomination d'Apache Airflow.

  • AIRFLOW__CELERY__DEFAULT_QUEUE— La file d'attente par défaut pour les tâches Celery dans Apache Airflow.

  • AIRFLOW__OPERATORS__DEFAULT_QUEUE— La file d'attente par défaut pour les tâches utilisant des opérateurs Apache Airflow spécifiques.

  • AIRFLOW_VERSION— La version d'Apache Airflow installée dans l'environnement Amazon MWAA.

  • AIRFLOW_CONN_AWS_DEFAULT— Les AWS informations d'identification par défaut utilisées pour intégrer d'autres AWS services dans.

  • AWS_DEFAULT_REGION— Définit la AWS région par défaut utilisée avec les informations d'identification par défaut pour l'intégration à d'autres AWS services.

  • AWS_REGION— Si elle est définie, cette variable d'environnement remplace les valeurs de la variable d'environnement AWS_DEFAULT_REGION et de la région de définition du profil.

  • PYTHONUNBUFFERED— Utilisé pour envoyer stdout et diffuser stderr des journaux de conteneurs.

  • AIRFLOW__METRICS__STATSD_ALLOW_LIST— Utilisé pour configurer une liste d'autorisation de préfixes séparés par des virgules afin d'envoyer les métriques commençant par les éléments de la liste.

  • AIRFLOW__METRICS__STATSD_ON— Active l'envoi de métriques àStatsD.

  • AIRFLOW__METRICS__STATSD_HOST— Utilisé pour se connecter au StatSD daemon.

  • AIRFLOW__METRICS__STATSD_PORT— Utilisé pour se connecter au StatSD daemon.

  • AIRFLOW__METRICS__STATSD_PREFIX— Utilisé pour se connecter au StatSD daemon.

  • AIRFLOW__CELERY__WORKER_AUTOSCALE— Définit le maximum et le minimum de simultanéité.

  • AIRFLOW__CORE__DAG_CONCURRENCY— Définit le nombre d'instances de tâches pouvant être exécutées simultanément par le planificateur dans un DAG.

  • AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG— Définit le nombre maximum de tâches actives par DAG.

  • AIRFLOW__CORE__PARALLELISM— Définit le nombre maximum d'instances de tâches pouvant être exécutées simultanément.

  • AIRFLOW__SCHEDULER__PARSING_PROCESSES— Définit le nombre maximum de processus analysés par le planificateur pour planifier les DAG.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__VISIBILITY_TIMEOUT— Définit le nombre de secondes pendant lesquelles un collaborateur attend pour accuser réception de la tâche avant que le message ne soit remis à un autre collaborateur.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__REGION— Définit la AWS région pour le transport Celery sous-jacent.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__PREDEFINED_QUEUES— Définit la file d'attente pour le transport Celery sous-jacent.

  • AIRFLOW_SCHEDULER_ALLOWED_RUN_ID_PATTERN— Utilisé pour vérifier la validité de votre entrée pour le run_id paramètre lors du déclenchement d'un DAG.

  • AIRFLOW__WEBSERVER__BASE_URL— URL du serveur Web utilisé pour héberger l'interface utilisateur d'Apache Airflow.

Variables d’environnement non réservées

Vous pouvez utiliser un script de démarrage pour remplacer les variables d'environnement non réservées. Voici une liste de certaines de ces variables courantes :

  • PATH— Spécifie une liste de répertoires dans lesquels le système d'exploitation recherche les fichiers exécutables et les scripts. Lorsqu'une commande est exécutée dans la ligne de commande, le système vérifie les répertoires PATH afin de trouver et d'exécuter la commande. Lorsque vous créez des opérateurs ou des tâches personnalisés dans Apache Airflow, vous devrez peut-être vous appuyer sur des scripts ou des exécutables externes. Si les répertoires contenant ces fichiers ne se trouvent pas dans les répertoires spécifiés dans la PATH variable, les tâches ne s'exécutent pas lorsque le système ne parvient pas à les localiser. En ajoutant les répertoires appropriésPATH, les tâches Apache Airflow peuvent trouver et exécuter les exécutables requis.

  • PYTHONPATH— Utilisé par l'interpréteur Python pour déterminer dans quels répertoires rechercher les modules et packages importés. Il s'agit d'une liste de répertoires que vous pouvez ajouter au chemin de recherche par défaut. Cela permet à l'interpréteur de rechercher et de charger des bibliothèques Python non incluses dans la bibliothèque standard ou installées dans les répertoires du système. Utilisez cette variable pour ajouter vos modules et vos packages Python personnalisés et utilisez-les avec vos DAG.

  • LD_LIBRARY_PATH— Variable d'environnement utilisée par l'éditeur de liens et le chargeur dynamiques sous Linux pour rechercher et charger des bibliothèques partagées. Il spécifie une liste de répertoires contenant des bibliothèques partagées, qui sont recherchés avant les répertoires des bibliothèques système par défaut. Utilisez cette variable pour spécifier vos fichiers binaires personnalisés.

  • CLASSPATH— Utilisé par l'environnement d'exécution Java (JRE) et le kit de développement Java (JDK) pour localiser et charger des classes, des bibliothèques et des ressources Java lors de l'exécution. Il s'agit d'une liste de répertoires, de fichiers JAR et d'archives ZIP contenant du code Java compilé.