0
votes

I run docker container with apache airflow

If I set executor = LocalExecutor, everything works fine, however, if I set executor = CeleryExecutor and run a DAG I get the following exception printed

[2020-07-13 04:17:41,065] {{celery_executor.py:266}} ERROR - Error fetching Celery task state, ignoring it:OperationalError('(psycopg2.OperationalError) FATAL:  password authentication failed for user "airflow"\n')

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/executors/celery_executor.py", line 108, in fetch_celery_task_state


I provide however the following ENV variables in docker run call

docker run --name test -it  \
  -p 8000:80 -p 5555:5555 -p 8080:8080 \
  -v `pwd`:/app \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_DEFAULT_REGION \
  -e PYTHONPATH=/app \
  -e ENVIRONMENT=local \
  -e XCOMMAND \
  -e POSTGRES_PORT=5432 \
  -e POSTGRES_HOST=postgres \
  -e POSTGRES_USER=project_user \
  -e POSTGRES_PASSWORD=password \
  -e DJANGO_SETTINGS_MODULE=config.settings.local \
  -e AIRFLOW_DB_NAME=project_airflow_dev \
  -e AIRFLOW_ADMIN_USER=project_user \
  -e [email protected] \
  -e AIRFLOW_ADMIN_PASSWORD=password \
  -e AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://project_user:password@postgres:5432/project_airflow_dev \
  -e AIRFLOW__CORE__EXECUTOR=CeleryExecutor \
  -e AIRFLOW__CELERY__BROKER_URL=redis://redis:6379/1 \
  --network="project-network" \
  --link project_cassandra_1:cassandra \
  --link project_postgres_1:postgres \
  --link project_redis_1:redis \
    registry.dkr.ecr.us-east-2.amazonaws.com/airflow:v1.0

In LocalExecutor - everything is fine, so I can login into admin UI and trigger the dag and get successful results, it's just that when I switch to CeleryExecutor - I get a weird error about "airflow" user, as if AIRFLOW__CORE__SQL_ALCHEMY_CONN env var is not visible or used at all.

Any ideas?

1

1 Answers

0
votes

solution:

Adding AIRFLOW__CELERY__RESULT_BACKEND env var fixed the issue.

...
-e AIRFLOW__CELERY__RESULT_BACKEND=db+postgresql+psycopg2://project_user:password@postgres:5432/project_airflow_dev \
...

or edit airflow.cfg

[celery]
result_backend = db+postgresql://airflow:airflow@postgres/airflow