Passer au contenu

Comment puis-je résoudre l'erreur « psycopg2.OperationalError: SSL connection has been closed unexpectedly error » dans Amazon MWAA ?

Lecture de 7 minute(s)
0

Je souhaite résoudre l'erreur « psycopg2.OperationalError: Erreur « SSL connection has been closed unexpectedly » dans Amazon Managed Workflows pour Apache Airflow (Amazon MWAA).

Brève description

Lorsque vous exécutez votre code DAG (Directed Acyclic Graph) et qu'une tâche échoue, les messages d'erreur suivants peuvent s'afficher dans le journal de tâches :

  • « psycopg2.OperationalError: SSL connection has been closed unexpectedly ».
  • « sqlalchemy.exc.OperationalError: (psycopg2.errors.ConnectionException) Timed-out waiting to acquire database connection ».

Les messages d'erreur précédents apparaissent lorsque l’exécutant surcharge ou perd la connexion à la base de données de métadonnées, ou lorsque la tâche tente de réutiliser une connexion à la base de données fermée.

Pour résoudre ce problème, procédez comme suit :

  • Réduisez l'utilisation du processeur et de la mémoire.
  • Vérifiez les configurations de vos exécutants.
  • Utilisez des opérateurs déferrables.
  • Supprimez le code de niveau supérieur.
  • N'utilisez pas de variables Apache Airflow.
  • Simplifiez votre DAG.
  • Créez un fichier .airflowignore et ajoutez-le au dossier DAG principal d'Amazon Simple Storage Service (Amazon S3).

Résolution

Réduire l'utilisation du processeur et de la mémoire

Un planificateur, un exécutant ou un serveur Web surchargé peut ne pas être en mesure de maintenir des connexions actives à la base de données. Le délai d'inactivité par défaut pour les métadonnées Amazon Relational Database Service (Amazon RDS) pour Apache Airflow est de 30 minutes. Si une tâche ou un processus reste inactif ou ne répond pas pendant plus longtemps que cette période, la base de données peut fermer la connexion. Pour plus d'informations, consultez la section IdleClientTimeout.

Pour vérifier les métriques d'utilisation du processeur et de la mémoire, procédez comme suit :

  1. Ouvrez la console Amazon CloudWatch.
  2. Choisissez l'espace de noms AWS/MWAA.
  3. Dans l'onglet Toutes les métriques, sélectionnez Cluster.
  4. Choisissez CPUUtilization, puis Réaliser un graphique de tous les résultats de la recherche.
  5. Choisissez l’onglet Graphique des métriques pour consulter les métriques de performance.
  6. Répétez les étapes 1 à 3, puis choisissez MemoryUtilization.
  7. Choisissez Réaliser un graphique de tous les résultats de la recherche, puis l'onglet Graphique des métriques pour consulter les métriques de performance.
    Remarque : Vous devez sélectionner Maximum pour Statistique et 1 minute pour Période.

Pour plus d'informations, consultez la section Métriques de conteneur, de file d’attente et de base de données pour Amazon MWAA.

Si l'utilisation du processeur et de la mémoire de vos employés est constamment supérieure à 90 %, cela signifie que les employés sont surchargés ou que les tâches sont trop lourdes. Une utilisation intensive du processeur et de la mémoire peut entraîner des problèmes liés aux rapports d'état des tâches, à la communication de la base de données de métadonnées et aux nouvelles tâches.

Pour réduire l'utilisation du processeur et de la mémoire par les exécutants, procédez comme suit :

  • Étant donné que les exécutants nécessitent davantage de ressources pendant les phases initiales de création des tâches, étalez vos plannings de tâches.
  • Limitez vos importations aux seules tâches qui les nécessitent et supprimez les importations globales qui ne sont pas obligatoires.
  • Utilisez Apache Airflow et Amazon MWAA comme outils principaux. Planifiez les tâches restantes sur des services tels qu'Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS) ou AWS Glue.
    Remarque : Ne traitez pas de grands volumes de données sur les exécutants car ils disposent de ressources limitées. Utilisez des services conçus pour traiter de grands volumes de données.
  • Réduisez les données transmises entre les tâches. Dans la mesure du possible, fragmentez les données afin que les données en aval ne soient pas modifiées en raison de charges de travail Amazon MWAA surchargées.
    Remarque : Si vous devez transmettre de grands volumes de données entre des tâches, stockez-les en externe et importez-les si nécessaire. Certains opérateurs utilisent XComs. Pour plus d'informations, consultez la page XComs sur le site Web d'Apache Airflow.
  • Nettoyez régulièrement la base de métadonnées.
    Remarque : Une utilisation élevée du processeur ou une faible quantité de mémoire disponible peuvent entraîner l'échec des requêtes ou augmenter la latence, ce qui entraîne une erreur d'exception SSL.

Remarque : Si vous ne pouvez pas réduire le processeur, utilisez une classe d'environnement de plus grande taille comptant un plus grand nombre de ressources pour les exécutants ou ajustez davantage vos exécutants.

Vérifier les configurations de vos exécutants

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Chaque version d'Apache Airflow utilise des valeurs par défaut pour les configurations des exécutants. Cependant, il se peut que vous deviez personnaliser les configurations en fonction de vos besoins.

Définir vos configurations Apache Airflow

Utilisez la console Amazon MWAA, la commande update-environment de l'AWS CLI ou un appel d'API UpdateEnvironment pour personnaliser les configurations suivantes :

  • La configuration de celery.worker_autoscale contrôle le nombre maximal et minimal de tâches pouvant être exécutées simultanément sur un exécutant. Réduisez le nombre maximal de connexions à la base de données depuis l’exécutant. Puis, allouez plus de ressources pour chaque tâche pour un plus petit nombre de tâches utilisant les mêmes ressources d’exécutant.
  • Définissez core.execute_tasks_new_python_interpreter sur Vrai pour créer un nouvel interpréteur Python pour chaque tâche et isoler la connectivité de la base de données.
    Remarque : Définissez la configuration sur Vrai uniquement si l'erreur « psycopg2.OperationalError » se reproduit.
  • Utilisez la fonctionnalité d’autoscaling dans Amazon MWAA pour augmenter le nombre maximal d’exécutants.
    Remarque : Définissez les valeurs max-workers et celery.worker_autoscale en fonction de votre charge de travail.

Pour plus d'informations, consultez la section Utilisation des options de configuration d'Apache Airflow sur Amazon MWAA.

Vérifier vos journaux d’exécutants, de planificateur et de serveur Web

Dans les environnements de production, la journalisation détaillée utilise des ressources inutiles et augmente l'utilisation du processeur. Il est recommandé de configurer les journaux d’exécutants, du planificateur et du serveur Web sur au moins AVERTISSEMENT. Dans la plupart des cas, les journaux INFORMATIONS ne sont pas nécessaires.

Utiliser des opérateurs déferrables

Utilisez des opérateurs déferrables lorsque vos tâches soumettent des tâches à des systèmes ou services externes et attendent que des événements se produisent, tels que la création d'un cluster EMR. Les opérateurs déferrables libèrent des emplacements d’exécutant et augmentent la capacité de charge de travail. Pour plus d'informations, consultez la page Opérateurs et déclencheurs déferrables sur le site Web d'Apache Airflow.

Supprimer le code de niveau supérieur

Supprimez du planificateur le code de niveau supérieur qui utilise des ressources inutiles. Ajustez également la configuration dag_processor.min_file_process_interval en fonction de votre cas d'utilisation. Pour plus d'informations, consultez les pages min_file_process_interval et Bonnes pratiques sur le site Web d'Apache Airflow.

Ne pas utiliser les variables Apache Airflow

N'utilisez pas de variables Apache Airflow dans le code Python de niveau supérieur. Lorsque vous récupérez des variables, vous devez interroger la base de données et la requête est exécutée sur chaque boucle d'analyse.

Remarque : Si vous devez utiliser des variables, utilisez la mise en cache des variables. Pour plus d'informations, consultez la page use_cache sur le site Web d'Apache Airflow.

Simplifier son DAG

Simplifiez votre DAG et testez le code de votre DAG pour la version Python spécifique de votre environnement Amazon MWAA.

Utilisez le mappage dynamique des tâches si nécessaire. Pour plus d'informations, consultez la page Mappage dynamique des tâches sur le site Web d'Apache Airflow.

Créer un fichier .airflowignore et l’ajouter au dossier DAG principal d'Amazon S3

Le planificateur Apache Airflow synchronise le contenu du dossier DAG d'Amazon S3 avec chaque exécutant. Le planificateur analyse également de façon périodique les fichiers dans Amazon S3 pour mettre à jour l'interface utilisateur. Lors de l'analyse, le planificateur exécute les fichiers et génère les DAG.

Utilisez le fichier .airflowignore pour spécifier les dossiers et les fichiers du dossier DAG d'Amazon S3. Vous devez utiliser des modèles regex et glob. Ignorez les fichiers non DAG lors du processus d'analyse afin de réduire la charge du planificateur sur celui-ci et d'améliorer l'efficacité du DAG. Pour plus d'informations, consultez la page .airflowignore sur le site Web d'Apache Airflow.