This repo is highly inspired by another similar work done here. The only reason I re-attempted it, so that I can get the first hand experience and also resolve some difficulties I faced while using the above solution.
Build an Airflow pex by running:
./pants binary src/python/ariflow:airflow
This produces airflow.pex
, a single file that is analogous to a statically-lined binary. It's a self-contained,
runnable Airflow you can scp
to another machine and run. However, ideally you would zip this whole folder and scp
to remote machine.
You can then run Airflow commands, using airflow_cli
wrapper, which internally calls the airflow.pex
file. You can
also use this wrapper file to modify the Airflow config variables.
./airflow_cli version
[2019-09-16 22:52:23,399] {__init__.py:51} INFO - Using executor SequentialExecutor
____________ _____________
____ |__( )_________ __/__ /________ __
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /| / /
___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/ v1.10.5
To start the webserver
./airflow_cli webserver
To start the Scheduler
./airflow_cli scheduler
If you've noticed the dags and plugins folder are part of airflow_home
folder, but ideally they should be part of
the airflow.pex
itself. We can easily bundle dags and plugins as well in the airflow.pex
like we've bundled libs
folder, but unfortunately Airflow can't read them from airflow.pex/dags
or airflow.pex/plugins
directly, so you can
unzip the final PEX at the server and move them inside airflow_home
folder.