Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Solución de problemas: DAG, operadores, conexiones y otros problemas
En los temas de esta página, se describen las soluciones a las dependencias de Python de Apache Airflow v2 y v3, los complementos personalizados, los DAG, los operadores, las conexiones, las tareas y los problemas del servidor web que pueden surgir en un entorno de Amazon Managed Workflows para Apache Airflow.
Contenido
Conexiones
En el siguiente tema se describen los errores que puede recibir al usar una conexión Apache Airflow o usar otra AWS base de datos.
No puedo conectarme a Secrets Manager
Recomendamos los siguientes pasos:
-
Aprenda a crear claves secretas para su conexión y variables de Apache Airflow en Configuración de una conexión Apache Airflow mediante un AWS Secrets Manager secreta.
-
Aprenda a usar la clave secreta para una variable de Apache Airflow (
test-variable) en Uso de una clave secreta en AWS Secrets Manager para una variable de Apache Airflow. -
Aprenda a usar la clave secreta para una conexión de Apache Airflow (
myconn) en Uso de una clave secreta en AWS Secrets Manager para una conexión de Apache Airflow.
¿Cómo configuro las condiciones del administrador de > secretos secretsmanager:ResourceTag/<tag-key o una restricción de recursos en mi política de funciones de ejecución?
nota
Se aplica a la versión 2.0 y anteriores de Apache Airflow.
Actualmente no puede limitar el acceso a la información secreta de Secrets Manager mediante claves de condición u otras restricciones de recursos en el rol de ejecución de su entorno, debido a un problema conocido en Apache Airflow.
No puedo conectarme a Snowflake
Recomendamos los siguientes pasos:
-
Pruebe sus DAG, complementos personalizados y dependencias de Python de forma local con aws-mwaa-docker-images on. https://github.com/aws/amazon-mwaa-docker-images
GitHub -
Agregue las siguientes entradas al archivo requirements.txt de su entorno.
apache-airflow-providers-snowflake==1.3.0 -
Añada las siguientes importaciones al DAG:
from airflow.providers.snowflake.operators.snowflake import SnowflakeOperator
Asegúrese de que el objeto de conexión de Apache Airflow incluya los siguientes pares clave-valor:
-
ID de conexión: snowflake_conn
-
Tipo de conexión: Snowflake
-
Host: <my account> <my region if not us-west-2>.snowflakecomputing.com
-
Esquema: <my schema>
-
Inicio de sesión: <my user name>
-
Contraseña: ********
-
Puerto: <port, if any>
-
Extra:
{ "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }
Por ejemplo:
>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='123456789012.us-east-1.snowflakecomputing.com', ... schema='YOUR_SCHEMA', ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT', ... extra=json.dumps(dict(account='123456789012', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='us-east-1')), ... )
No veo mi conexión en la UI de Airflow
Apache Airflow proporciona plantillas de conexión en la interfaz de usuario de Apache Airflow. Lo usa para generar la cadena URI de conexión, independientemente del tipo de conexión. Si no hay ninguna plantilla de conexión disponible en la interfaz de usuario de Apache Airflow, se puede utilizar una plantilla de conexión alternativa para generar una cadena URI de conexión, por ejemplo, mediante la plantilla de conexión HTTP.
Recomendamos los siguientes pasos:
-
Consulte los tipos de conexión que proporciona Amazon MWAA en la UI de Apache Airflow en Paquetes de proveedores de Apache Airflow instalados en entornos Amazon MWAA.
-
Consulte los comandos para crear una conexión de Apache Airflow en la CLI de Referencia de los comandos de la CLI de Apache Airflow.
-
Aprenda a utilizar las plantillas de conexión de la interfaz de usuario de Apache Airflow indistintamente para los tipos de conexión que no están disponibles en la interfaz de usuario de Apache Airflow en Amazon MWAA de Información general sobre los tipos de conexión.
Servidor web
En el siguiente tema, se describen los errores que puede encontrar en su servidor web de Apache Airflow en Amazon MWAA.
Aparece el error 5xx al acceder al servidor web
Recomendamos los siguientes pasos:
-
Compruebe las opciones de configuración de Apache Airflow. Verifique que los pares clave-valor que especificó como una opción de configuración de Apache Airflow, por ejemplo, estén configurados correctamente. AWS Secrets Manager Consulte No puedo conectarme a Secrets Manager para obtener más información.
-
Compruebe los
requirements.txt. Compruebe que el paquete “extras” de Airflow y las demás bibliotecas que figuran en surequirements.txtsean compatibles con su versión de Apache Airflow. -
Considere otras formas de especificar las dependencias de Python en un archivo
requirements.txt, que se detallan en Administración de las dependencias de Python en requirements.txt.
Aparece un error de «El programador no parece estar ejecutándose»
Si parece que el programador no está funcionando o si la última señal se recibió hace varias horas, es posible que sus DAG no aparezcan en Apache Airflow y no se programen nuevas tareas.
Recomendamos los siguientes pasos:
-
Confirme que su grupo de seguridad de VPC permita el acceso entrante al puerto
5432. Este puerto es necesario para conectarse a la base de datos de metadatos de PostgreSQL de Amazon Aurora de su entorno. Tras añadir esta regla, dé unos minutos a Amazon MWAA y el error desaparecerá. Consulte Seguridad en la VPC en Amazon MWAA para obtener más información.nota
-
La base de metadatos de Aurora PostgreSQL forma parte de la arquitectura de servicios de Amazon MWAA y no está disponible en su. Cuenta de AWS
-
Database-related Los errores suelen ser un síntoma de un error del programador y no la causa principal.
-
-
Si el programador no se está ejecutando, podría deberse a varios factores, como errores en la instalación de las dependencias o a una sobrecarga del programador. Confirme que sus DAG, complementos y requisitos funcionan correctamente accediendo a los grupos de registros correspondientes en CloudWatch los registros. Consulte Monitorización y métricas de Amazon Managed Workflows para Apache Airflow para obtener más información.
Tareas
En el siguiente tema, se describen los errores que puede encontrar al realizar tareas de Apache Airflow en un entorno.
Veo que mis tareas están bloqueadas o no terminan
Si sus tareas de Apache Airflow están “bloqueadas” o no se completan, le recomendamos que siga los siguientes pasos:
-
Es posible que haya definido una gran cantidad de DAG. Reduzca el número de DAG y actualice el entorno (por ejemplo, cambiando el nivel de registro) para forzar un restablecimiento.
-
Airflow analiza los DAG independientemente de si están activados o no. Si usa más del 50 % de la capacidad de su entorno, puede que el programador de Apache Airflow empiece a sobrecargarse. Esto se traduce en un tiempo total de análisis elevado en CloudWatch las métricas o en tiempos prolongados de procesamiento de los DAG en CloudWatch los registros. Hay otras formas de optimizar las configuraciones de Apache Airflow que no se tratan en esta guía.
-
Para obtener más información sobre las prácticas recomendadas para ajustar el rendimiento de su entorno, consulte Ajuste del desempeño de Apache Airflow en Amazon MWAA.
-
-
Es posible que haya una gran cantidad de tareas en la cola. Esto suele mostrarse como un número elevado (y creciente) de tareas en el
Noneestado, o como un número elevado en un país.Queued Tasksand/orTasks PendingCloudWatch Esto puede producirse por varias razones:-
Si hay más tareas que ejecutar de las que el entorno tiene la capacidad de ejecutar, and/or una gran cantidad de tareas que estaban en cola antes del escalado automático tienen tiempo de detectar las tareas e implementar más trabajadores.
-
Si hay más tareas que ejecutar de las que puede ejecutar un entorno, recomendamos reducir la cantidad de tareas que los DAG ejecutan simultáneamente y and/or aumentar el número mínimo de trabajadores de Apache Airflow.
-
Si hay una gran cantidad de tareas en cola antes de que el ajuste de escala automático haya podido detectar e implementar más trabajadores, recomendamos escalonar el despliegue de las tareas y and/or aumentar el número mínimo de trabajadores de Apache Airflow.
-
Puedes usar el comando update-environment de AWS Command Line Interface (AWS CLI) para cambiar el número mínimo o máximo de trabajadores que se ejecutan en tu entorno.
aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10 -
Para obtener más información sobre las prácticas recomendadas para ajustar el rendimiento de su entorno, consulte Ajuste del desempeño de Apache Airflow en Amazon MWAA.
-
-
Si sus tareas están bloqueadas en el estado “en ejecución”, también puede borrarlas o marcarlas como ejecutadas o fallidas. Esto permite que el componente de escalado automático de su entorno reduzca verticalmente la cantidad de procesos de trabajo que trabajan en su entorno. En la siguiente imagen, se muestra un ejemplo de tarea pendiente.
-
Elija el círculo para la tarea pendiente y, a continuación, seleccione Borrar como se muestra. Esto permite a Amazon MWAA reducir verticalmente el número de procesos de trabajo; de lo contrario, Amazon MWAA no puede determinar qué DAG están activados o desactivados, ni puede reducirlos verticalmente si todavía hay tareas pendientes.
-
-
Para más información sobre el ciclo de vida de las tareas de Apache Airflow en Conceptos
, consulte la guía de referencia de Apache Airflow.
Recibo errores en las tareas sin registros en Airflow v3
Si sus tareas de Apache Airflow 3 generarn errores sin registros, siga los siguientes pasos:
-
Si los registros de procesos de trabajo presentan un error, como
Task handler raised error: WorkerLostError('Worker exited prematurely: exitcode 15 Job: 12.'), cuando no se completó la tarea, esto indica que es probable que el proceso de trabajo bifurcado asignado a la tarea haya finalizado inesperadamente.Para solucionar este problema, considere la posibilidad de configurar celery.worker_autoscale con los mismos valores mínimos y máximos. Por ejemplo:
celery.worker_autoscale=5,5 # for mw1.small celery.worker_autoscale=10,10 # for mw1.medium celery.worker_autoscale=20,20 # for mw1.largeEsto garantiza que el tamaño del grupo de procesos de trabajo permanezca fijo, lo que evita la finalización inesperada de procesos de trabajo.
CLI
En el siguiente tema, se describen los errores que puede haber al ejecutar los comandos de la CLI de Airflow en la AWS Command Line Interface.
Me sale el error 503 al activar un DAG en la CLI
La CLI de Airflow se ejecuta en el servidor web de Apache Airflow, que tiene una simultaneidad limitada. Por lo general, se pueden ejecutar un máximo de 4 comandos de CLI simultáneamente.
¿Por qué falla el comando dags backfill de la CLI de Apache Airflow? ¿Qué solución hay?
nota
Lo siguiente solo se aplica a los entornos Apache Airflow v2.0.2.
El comando backfill, como otros comandos de la CLI de Apache Airflow, analiza todos los DAG localmente antes procesar ningún DAG, independientemente del DAG al que se aplique la operación de la CLI. En los entornos de Amazon MWAA que usan Apache Airflow v2.0.2, como los complementos y los requisitos aún no están instalados en el servidor web cuando se ejecuta el comando de la CLI, se produce un error en la operación de análisis y no se invoca la operación backfill. Si no tuviera ningún requisito ni complemento en su entorno, la operación backfill se realizaría correctamente.
Para poder ejecutar el comando backfill de la CLI, recomendamos invocarlo en un operador de bash. En un operador bash, backfill se inicia desde el servidor de trabajo, lo que permite que los DAG se analicen correctamente, ya que todos los complementos y requisitos necesarios están disponibles e instalados. En el ejemplo siguiente, se muestra cómo crear un DAG con un BashOperator para ejecutar backfill.
from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago with DAG(dag_id="backfill_dag", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="airflow dags backfill my_dag_id" )
Operadores
En el siguiente tema, se describen los errores que se pueden producir al usar operadores.
Recibí el siguiente error PermissionError: [Errno 13] Permiso denegado con el operador S3Transform
Siga estos pasos si está intentando ejecutar un script de shell con el operador S3Transform y recibe un mensaje de error PermissionError: [Errno 13] Permission denied. En los pasos siguientes se supone que ya tiene un archivo plugins.zip. Si va a crear un nuevo plugins.zip, consulte Instalación de complementos personalizados.
-
Pon a prueba tus DAG, complementos personalizados y dependencias de Python de forma local con aws-mwaa-docker-images on. https://github.com/aws/amazon-mwaa-docker-images
GitHub -
Cree su script de transformación.
#!/bin/bash cp $1 $2 -
(Opcional) Es posible que los usuarios de macOS y Linux tengan que ejecutar el comando siguiente para asegurarse de que el script sea ejecutable.
chmod 777 transform_test.sh -
Añada el script a su plugins.zip.
zip plugins.zip transform_test.sh -
Siga los pasos que se indican en Carga del archivo plugins.zip a Amazon S3.
-
Siga los pasos que se indican en Especificación de la versión de plugins.zip en la consola de Amazon MWAA.
-
Utilice los siguientes DAG.
from airflow import DAG from airflow.providers.amazon.aws.operators.s3_file_transform import S3FileTransformOperator from airflow.utils.dates import days_ago import os DAG_ID = os.path.basename(__file__).replace(".py", "") with DAG (dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: file_transform = S3FileTransformOperator( task_id='file_transform', transform_script='/usr/local/airflow/plugins/transform_test.sh', source_s3_key='s3://amzn-s3-demo-bucket/files/input.txt', dest_s3_key='s3://amzn-s3-demo-bucket/files/output.txt' ) -
Siga los pasos que se indican en Carga del código del DAG a Amazon S3.