Airflow Deployment
==================
This page outlines the deployment of Airflow infrastructure and services.
.. image:: /_static/images/airflow_services.png
:alt: Airflow Deployment Architecture
Docker Image
------------
A single docker image with Airflow and other dependencies, such as gunicorn, flower, and celery, is built from the `Dockerfile` in the root of the directory.
What service is actually run is determined from the command passed to the container.
- `webserver` will run the Airflow UI
- `scheduler` will run the task scheduler
- `worker` will run a celery worker
- `flower` will run the flower UI for monitoring celery
Persistance
-----------
There are three methods of persistance used by Airflow and its services:
Postgres via `RDS `_
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Postgres stores history about dags, tasks, task runs, and so on.
The Airflow datamodel is well documented `here `_.
Redis via `Elasticache `_
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Redis is used as a broker for a `Celery `_ task queue.
When the web ui or scheduler needs to run a job, it places the job on the Redis queue for future consumption by Celery executors running in the `worker` containers.
`S3 `_
++++++++++++++++++++++++++++++++++
S3 is used to store task logs.
Because tasks are run on worker containers that may be added or removed at any time, the logs need a persistant place to be stored.
After a task runs, its logs will be uploaded to S3 where the Airflow webserver will be able to retrieve and display them in the UI for debugging.
Deployment
----------
ECS Tasks
+++++++++
There are three `ECS Tasks `_ defined for the Airflow deployment.
- `airflow` with the webserver and scheduler container running
- `worker` with celery executor container running
- `flower` with the flower ui container running
Having each of these three seperate definitions allows us to scale each independently as they are under their own `Target Group `_.
Eg: the workers will need to scale up when many tasks are being run, but the web server will not.
CI/CD
+++++
The CI/CD strategy follows the `Kids First process `_ and is the same as any other code repository.
Care needs to be taken as the webserver and workers may have brief periods where they are out of sync during a deployment and so the code executed on a worker may not be what's displayed in the UI.