os @DAG no se pueden hacer clic en el servidor web de Google Cloud Composer, pero funcionan bien en un Airflow local

Estoy usandoGoogle Cloud Composer (flujo de aire administrado en Google Cloud Platform) con la versión de imagencomposer-0.5.3-airflow-1.9.0 y Python 2.7, y me enfrento a un problema extraño: después de importar mis DAG, sonno se puede hacer clic en desde la Web UI (y no hay botones "Trigger DAG", "Graph view", ...), mientras que todo funciona perfectamente cuando se ejecuta un flujo de aire local.

Incluso si no se puede usar desde el servidor web en Composer, mis DAG aún existen. Puedo enumerarlos usando CLI list_dags), describelos list_tasks) e incluso activarlos trigger_dag).

Ejemplo mínimo que reproduce el problema

A continuación se muestra un ejemplo mínimo que utilicé para reproducir el problema. Usando un gancho (aquí,GoogleCloudStorageHook) es muy importante, ya que el error en Composer ocurre cuando se usa un gancho. Inicialmente, estaba usando un enlace personalizado (en un complemento personalizado) y estaba enfrentando el mismo problema.

ásicamente aquí, el ejemplo enumera todas las entradas en un depósito de GCS my-bucket) y generar un DAG para cada entrada que comience conmy_dag.

import datetime

from airflow import DAG
from airflow.contrib.hooks.gcs_hook import GoogleCloudStorageHook
from airflow.operators.bash_operator import BashOperator

google_conn_id = 'google_cloud_default'

gcs_conn = GoogleCloudStorageHook(google_conn_id)

bucket = 'my-bucket'
prefix = 'my_dag'

entries = gcs_conn.list(bucket, prefix=prefix)

for entry in entries:
    dag_id = str(entry)

    dag = DAG(
        dag_id=dag_id,
        start_date=datetime.datetime.today(),
        schedule_interval='0 0 1 * *'
    )

    op = BashOperator(
        task_id='test',
        bash_command='exit 0',
        dag=dag
    )

    globals()[dag_id] = dag
Resultados en Cloud Composer

Después de importar este archivo a Composer, este es el resultado (tengo 4 archivos que comienzan conmy_dag inmy-bucket):

Como expliqué, no se puede hacer clic en los DAG y las columnas "Tareas recientes" y "Ejecuciones de DAG" se cargan para siempre. La marca "info" al lado de cada nombre de DAG dice:This DAG isn't available in the webserver DagBag object. It shows up in this list because the scheduler marked it as active in the metadata database.

Por supuesto, la actualización no es útil, y al acceder a la Vista de gráfico DAG por la URL directa https://****.appspot.com/admin/airflow/graph?dag_id=my_dag_1), muestra un error:DAG "my_dag_1" seems to be missing.

Resultados en el flujo de aire local

Al importar el script en un flujo de aire local, el servidor web funciona bien:

Algunas pruebas

Si reemplazo la líneaentries = gcs_conn.list(bucket, prefix=prefix) con valores codificados comoentries = [u'my_dag_1', u'my_dag_2', u'my_dag_3', u'my_dag_4'], luego se puede hacer clic en los DAG en la interfaz de usuario web de Composer (y aparecen todos los botones en las columnas de "enlaces"). Parece que, de otras pruebas que hice en mi problema inicial, llamando a un método desde un gancho (no solo inicializando el enlace) causa el problema. Por supuesto, los DAG en Composer funcionan normalmente en ejemplos simples (no hay llamadas de método de ganchos involucrados).

No tengo idea de por qué sucedió esto, también he inspeccionado los registros (estableciendologging_level = DEBUG inairflow.cfg) pero no pude ver algo mal. Sospecho que hay un error en el servidor web, pero no puedo obtener un seguimiento significativo de la pila. Los registros del servidor web de Composer (alojados en App Engine) no están disponibles, o al menos no encontré una manera de acceder a ellos.

¿Alguien experimentó el mismo problema o problemas similares con Composer Web UI? Creo que el problema proviene del uso de ganchos, pero puedo estar equivocado. Puede ser solo un efecto secundario. Para ser honesto, estoy perdido después de probar tantas cosas. Me alegraría si alguien me puede ayudar. ¡Gracias

Actualiza

Al implementar un servidor web autogestionado en Kubernetes siguiendo esta guía:https: //cloud.google.com/composer/docs/how-to/managing/deploy-webserve, se puede hacer clic en mis DAG desde este servidor web autogestionado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta