Bird
Raised Fist0
Apache Airflowdevops~10 mins

Multi-environment deployment (dev, staging, prod) in Apache Airflow - Commands & Configuration

Choose your learning style10 modes available
Introduction
When you build workflows with Airflow, you often want to run the same workflows in different environments like development, staging, and production. This helps you test changes safely before using them for real work.
When you want to test new workflow changes without affecting real data processing.
When you need to have a safe place to try fixes before applying them to production.
When your team wants to review workflows in a staging environment before going live.
When you want to run different versions of the same workflow for different purposes.
When you want to separate logs and data for development and production to avoid confusion.
Config File - airflow.cfg
airflow.cfg
[core]
# The home folder for airflow, default is ~/airflow
airflow_home = /usr/local/airflow

[logging]
# Base log folder
base_log_folder = /usr/local/airflow/logs

[secrets]
# Use environment variables to set connections and variables
backend = env

[webserver]
# Webserver port
web_server_port = 8080

[environment]
environment = dev

This airflow.cfg file sets the base Airflow home directory and log folder. The environment key is a custom setting to specify which environment Airflow is running in (dev, staging, or prod). You can create separate airflow.cfg files for each environment with different values.

Using environment variables for secrets keeps sensitive data safe and environment-specific.

Commands
Set the Airflow home directory for the development environment to keep files separate from other environments.
Terminal
export AIRFLOW_HOME=/usr/local/airflow_dev
Expected OutputExpected
No output (command runs silently)
Initialize the Airflow database for the development environment. This sets up the metadata database Airflow needs to track workflows.
Terminal
airflow db init
Expected OutputExpected
INFO [alembic.runtime.migration] Context impl PostgresImpl. INFO [alembic.runtime.migration] Will assume transactional DDL. INFO [alembic.runtime.migration] Running upgrade head INFO [alembic.runtime.migration] Upgrade successful
Start the Airflow webserver on port 8081 for the development environment so you can access the UI separately from other environments.
Terminal
airflow webserver -p 8081
Expected OutputExpected
[2024-06-01 12:00:00,000] {webserver.py:123} INFO - Starting web server on port 8081 [2024-06-01 12:00:00,500] {webserver.py:456} INFO - Web server started
→
-p - Specify the port number for the webserver
Start the Airflow scheduler to run workflows in the development environment.
Terminal
airflow scheduler
Expected OutputExpected
[2024-06-01 12:00:01,000] {scheduler.py:789} INFO - Starting scheduler [2024-06-01 12:00:01,500] {scheduler.py:790} INFO - Scheduler started
List all workflows (DAGs) available in the current environment to verify they are loaded correctly.
Terminal
airflow dags list
Expected OutputExpected
dag_id example_dag my_data_pipeline
Key Concept

If you remember nothing else from this pattern, remember: keep each environment's Airflow files, databases, and ports separate to avoid conflicts and safely test changes.

Common Mistakes
Using the same AIRFLOW_HOME directory for dev, staging, and prod environments.
This causes workflows and logs to mix, leading to confusion and possible data loss or errors.
Set a unique AIRFLOW_HOME for each environment to isolate files and data.
Running multiple Airflow webservers on the same port.
Only one process can listen on a port, so others will fail to start.
Assign different ports for each environment's webserver using the -p flag.
Not initializing the Airflow database separately for each environment.
Workflows may not run correctly because the metadata database is shared or missing.
Run 'airflow db init' in each environment's AIRFLOW_HOME before starting Airflow.
Summary
Set a unique AIRFLOW_HOME directory for each environment to keep files separate.
Initialize the Airflow database in each environment with 'airflow db init'.
Start the webserver and scheduler with different ports and settings per environment.
Use 'airflow dags list' to verify workflows are loaded in the correct environment.

Practice

(1/5)
1. What is the main reason to use separate environments like dev, staging, and prod in Airflow deployment?
easy
A. To run all tasks faster by using multiple servers
B. To reduce the number of DAGs needed
C. To keep development, testing, and production work isolated and safe
D. To share the same database for all environments

Solution

  1. Step 1: Understand environment separation purpose

    Separate environments prevent changes in development or testing from affecting production stability.
  2. Step 2: Identify the correct purpose in options

    Only To keep development, testing, and production work isolated and safe mentions isolation and safety, which matches the main reason.
  3. Final Answer:

    To keep development, testing, and production work isolated and safe -> Option C
  4. Quick Check:

    Environment isolation = Safety [OK]
Hint: Remember: separate environments protect production [OK]
Common Mistakes:
  • Thinking all environments share the same database
  • Believing environments speed up task execution
  • Assuming fewer DAGs are needed with multiple environments
2. Which of the following is the correct way to specify different Airflow configurations for dev and prod environments?
easy
A. Set environment variables like AIRFLOW__CORE__SQL_ALCHEMY_CONN differently per environment
B. Run Airflow without any configuration files
C. Use the same airflow.cfg file for all environments
D. Use a single database for all environments

Solution

  1. Step 1: Understand configuration methods in Airflow

    Airflow supports environment variables to override settings per environment.
  2. Step 2: Identify the correct method for environment-specific configs

    Set environment variables like AIRFLOW__CORE__SQL_ALCHEMY_CONN differently per environment correctly uses environment variables to set different database connections per environment.
  3. Final Answer:

    Set environment variables like AIRFLOW__CORE__SQL_ALCHEMY_CONN differently per environment -> Option A
  4. Quick Check:

    Env vars = environment-specific config [OK]
Hint: Use env vars to separate configs per environment [OK]
Common Mistakes:
  • Using the same config file for all environments
  • Not setting database connections separately
  • Ignoring environment variables for configs
3. Given this command to start Airflow in the staging environment:
export AIRFLOW_HOME=/opt/airflow_staging
export AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://user:pass@staging-db:5432/airflow
airflow webserver

What will happen when you run this command?
medium
A. Airflow will start using the staging database and configs in /opt/airflow_staging
B. Airflow will start using the production database and default configs
C. Airflow will fail because environment variables cannot be set this way
D. Airflow will start but ignore the SQL connection string

Solution

  1. Step 1: Analyze environment variables set before starting Airflow

    Setting AIRFLOW_HOME changes the config directory; setting AIRFLOW__CORE__SQL_ALCHEMY_CONN changes the database connection.
  2. Step 2: Understand Airflow behavior on startup

    Airflow uses these environment variables to load configs and connect to the specified database.
  3. Final Answer:

    Airflow will start using the staging database and configs in /opt/airflow_staging -> Option A
  4. Quick Check:

    Env vars control config and DB connection [OK]
Hint: Env vars before airflow start set environment [OK]
Common Mistakes:
  • Assuming Airflow ignores env vars
  • Thinking Airflow uses production DB by default
  • Believing env vars cannot be set inline
4. You deployed Airflow for prod but accidentally used the dev database connection string in the config. What is the best way to fix this?
medium
A. Change the airflow.cfg file in the dev environment
B. Delete all DAGs and restart Airflow
C. Run Airflow without any environment variables
D. Change the AIRFLOW__CORE__SQL_ALCHEMY_CONN environment variable to the production database and restart Airflow

Solution

  1. Step 1: Identify the incorrect database connection setting

    The problem is the wrong database connection string used in production.
  2. Step 2: Correct the environment variable and restart Airflow

    Updating AIRFLOW__CORE__SQL_ALCHEMY_CONN to the correct production DB and restarting applies the fix.
  3. Final Answer:

    Change the AIRFLOW__CORE__SQL_ALCHEMY_CONN environment variable to the production database and restart Airflow -> Option D
  4. Quick Check:

    Fix DB connection env var and restart [OK]
Hint: Fix DB env var, then restart Airflow [OK]
Common Mistakes:
  • Deleting DAGs unnecessarily
  • Ignoring environment variables
  • Changing dev configs instead of prod
5. You want to deploy Airflow for dev, staging, and prod on the same server. Which approach ensures proper isolation and avoids conflicts?
hard
A. Run one Airflow instance and switch configs manually before each run
B. Run three separate Airflow instances with different AIRFLOW_HOME and database connections
C. Use the same database but different DAG folders for each environment
D. Run Airflow only in production mode and test DAGs there

Solution

  1. Step 1: Understand isolation needs for multiple environments on one server

    Each environment needs its own config directory and database to avoid conflicts.
  2. Step 2: Identify the correct deployment approach

    Running separate Airflow instances with distinct AIRFLOW_HOME and DB connections ensures isolation.
  3. Final Answer:

    Run three separate Airflow instances with different AIRFLOW_HOME and database connections -> Option B
  4. Quick Check:

    Separate instances + configs = isolation [OK]
Hint: Use separate AIRFLOW_HOME and DB per instance [OK]
Common Mistakes:
  • Switching configs manually risks errors
  • Sharing one database causes conflicts
  • Running only production ignores testing needs
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard