You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Airflow Scheduler部署至AWS EC2?寻求部署相关实操建议

我来分享下把Airflow调度器部署到EC2的实操建议,刚好我之前帮团队做过类似的迁移,结合你的S3数据抓取+EMR Spark处理的场景,给你梳理清楚各个环节的要点:

一、EC2实例规格选型建议

针对你当前的简单数据管道场景,不用一开始就选高配实例,按需起步后续扩容即可:

  • 基础起步款:推荐t3.medium(2核vCPU + 4GB内存),足够支撑每日少量DAG的调度需求,性价比很高。
  • 扩容方向:如果后续DAG数量增加、任务并行度提高,可以升级到t3.large(2核+8GB)或者m5.xlarge(4核+16GB),这类通用型实例对Airflow的调度和Web服务负载适配性很好。
  • 存储配置:根卷选gp3类型,至少分配30GB空间(Airflow会存储日志、临时文件,后续扩容也方便);如果日志存本地的话可以再加大,但更推荐把日志存到S3,这样本地存储压力小。
  • IAM角色配置:必须给EC2实例绑定一个具备以下权限的IAM角色,避免硬编码密钥:
    • S3读写权限(对应你的数据存储桶)
    • EMR集群操作权限(创建/提交Spark任务、监控集群状态)
    • CloudWatch日志写入权限(如果把Airflow日志同步到CloudWatch)
    • RDS访问权限(如果用外部数据库替代默认的SQLite)
二、分步部署流程

我以Amazon Linux 2为例(Ubuntu流程类似,只是包管理命令换成apt):

  1. 初始化EC2实例
    • 选择Amazon Linux 2 AMI,绑定上面提到的IAM角色
    • 安全组配置:只开放SSH(22端口,限制你的IP访问)、Airflow Webserver(8080端口,同样限制可信IP或者通过VPN访问)
  2. 安装依赖环境
    # 更新系统包
    sudo yum update -y
    # 安装Python3和pip
    sudo yum install python3 python3-pip -y
    # 安装Airflow依赖的系统库(比如Postgres驱动、编译工具)
    sudo yum install gcc postgresql-devel -y
    
  3. 创建虚拟环境并安装Airflow
    强烈建议用虚拟环境隔离依赖,避免系统包冲突:
    # 创建虚拟环境
    python3 -m venv airflow-env
    # 激活虚拟环境
    source airflow-env/bin/activate
    # 设置Airflow版本(推荐2.x稳定版,比如2.8.x)
    AIRFLOW_VERSION=2.8.3
    PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
    CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
    # 安装Airflow核心包+必要provider(比如S3、EMR)
    pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
    pip install apache-airflow-providers-amazon
    
  4. 配置Airflow核心参数
    • 先设置AIRFLOW_HOME环境变量(比如export AIRFLOW_HOME=~/airflow),然后编辑$AIRFLOW_HOME/airflow.cfg:
      • 替换默认的SQLite数据库:把sql_alchemy_conn改成RDS Postgres/MySQL的连接字符串(比如postgresql+psycopg2://username:password@rds-endpoint:5432/airflow_db)
      • 配置日志存储:开启远程日志,设置remote_logging = True,remote_log_conn_id = aws_default,remote_base_log_folder = s3://your-bucket/airflow-logs/
      • 设置Executor:如果是简单场景,先用SequentialExecutor;如果后续需要并行任务,换成CeleryExecutor(需要额外配置Redis/RabbitMQ作为消息队列)
  5. 初始化Airflow并启动服务
    # 初始化数据库
    airflow db init
    # 创建管理员用户(用于登录Web UI)
    airflow users create --username admin --firstname Admin --lastname User --role Admin --email your-email@example.com
    # 启动调度器(后台运行可以加&或者用systemd管理)
    airflow scheduler &
    # 启动Webserver
    airflow webserver -p 8080 &
    
    为了让服务稳定运行,推荐用systemd配置成守护进程:
    • 创建/etc/systemd/system/airflow-scheduler.service和/etc/systemd/system/airflow-webserver.service,配置好虚拟环境路径和启动命令,然后执行sudo systemctl daemon-reload && sudo systemctl enable --now airflow-scheduler airflow-webserver
  6. 迁移DAG文件
    把本地的DAG文件复制到EC2的$AIRFLOW_HOME/dags目录下,Airflow会自动扫描加载,大概1-2分钟后就能在Web UI看到。
三、生产环境实用优化建议
  • 数据库必换:绝对不要用默认的SQLite,它不支持多进程并发,调度器处理并行任务时会出现锁表、任务延迟的问题,一定要换成RDS的Postgres或者MySQL,数据持久化也更可靠。
  • 日志托管到S3/CloudWatch:不要把日志存在EC2本地,一旦实例损坏日志就丢了,配置远程日志后,所有任务日志都会同步到S3,方便排查问题。
  • 监控告警:用CloudWatch监控EC2的CPU、内存使用率,设置告警阈值(比如CPU超过80%告警);同时把Airflow的metrics推到CloudWatch,可以通过airflow metrics配置,实时掌握调度器状态。
  • 安全加固:
    • 不要把Airflow Webserver的8080端口开放到公网,用VPN、AWS Systems Manager Session Manager或者ALB+Cognito认证来访问UI
    • 安全组严格限制入站规则,只允许可信IP访问SSH和8080端口
    • 定期更新Airflow版本和系统包,修复安全漏洞
  • 自动化部署:把DAG文件、Airflow配置放到Git仓库,用AWS CodePipeline+CodeBuild做CI/CD,每次提交代码自动同步到EC2的dags目录,避免手动操作出错。

内容的提问来源于stack exchange,提问作者Alessandro Messori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:47:52