在Apache Airflow中运行DAG时如何设置代理环境变量?
Apache Airflow CeleryExecutor 全局代理变量配置方案
核心问题
CeleryExecutor模式下,DAG任务运行在Celery Worker进程中,该进程不会自动继承系统/etc/profile中的环境变量,且非AIRFLOW前缀的变量无法通过常规Airflow配置直接传递。
可行解决方案
方法1:修改Celery Worker的Systemd服务配置
如果用Systemd管理Airflow Worker服务:
- 编辑Worker的Systemd服务文件(通常路径为
/etc/systemd/system/airflow-worker.service) - 在
[Service]区块添加代理环境变量:Environment="http_proxy=http://your-proxy-addr:port" Environment="https_proxy=http://your-proxy-addr:port" Environment="no_proxy=localhost,127.0.0.1,internal-service-ip,internal-domain.com" - 重载Systemd配置并重启Worker:
sudo systemctl daemon-reload sudo systemctl restart airflow-worker
方法2:通过Airflow配置文件传递变量
Airflow 2.x支持在airflow.cfg中为Celery Worker指定环境变量:
- 打开
airflow.cfg,定位到[celery]段落 - 添加
env_vars配置项,填入代理变量:env_vars = http_proxy=http://your-proxy-addr:port,https_proxy=http://your-proxy-addr:port,no_proxy=localhost,127.0.0.1 - 重启Airflow Scheduler和Worker服务
方法3:手动启动Worker时注入变量
若手动启动Celery Worker,可在启动命令前直接指定环境变量:
http_proxy=http://your-proxy-addr:port https_proxy=http://your-proxy-addr:port no_proxy=localhost,127.0.0.1 airflow celery worker
也可将变量写入专属配置文件(如/etc/sysconfig/airflow-worker),让启动脚本自动加载该文件。
验证配置
创建测试DAG确认变量生效:
from airflow import DAG from airflow.operators.python import PythonOperator import os from datetime import datetime def verify_proxy(): print(f"http_proxy: {os.environ.get('http_proxy')}") print(f"https_proxy: {os.environ.get('https_proxy')}") print(f"no_proxy: {os.environ.get('no_proxy')}") with DAG( 'verify_proxy_env', start_date=datetime(2024, 1, 1), schedule_interval=None, catchup=False ) as dag: check_task = PythonOperator( task_id='check_proxy_vars', python_callable=verify_proxy )
内容的提问来源于stack exchange,提问作者Miguel Santana
相关产品推荐
相关产品推荐

