MWAA(Apache Airflow)中EcsCreateClusterOperator导入错误
MWAA中指定AWS Provider 5.0.0后仍加载旧版本导致EcsCreateClusterOperator导入失败
问题重现
本地环境安装apache-airflow-providers-amazon==5.0.0后可正常使用EcsCreateClusterOperator,但部署到运行Airflow 2.2.2的MWAA时:
- 已将
apache-airflow-providers-amazon==5.0.0加入requirements.txt - UI和更新日志均显示该版本已安装
- DAG启动时仍抛出导入错误:
ImportError: cannot import name 'EcsCreateClusterOperator' from 'airflow.providers.amazon.aws.operators.ecs' (/usr/local/lib/python3.7/site-packages/airflow/providers/amazon/aws/operators/ecs.py)
原因是MWAA默认预装的AWS Provider版本为2.4,且Airflow优先加载系统路径下的旧版本库,而非用户安装的5.0.0版本。
解决方案
1. 验证实际加载的Provider版本
先确认Airflow实际加载的AWS Provider版本,添加一个检查任务到DAG中:
from airflow.operators.python import PythonOperator import airflow.providers.amazon.aws def print_provider_version(): print(f"AWS Provider version in use: {airflow.providers.amazon.aws.__version__}") with DAG(...) as dag: check_version_task = PythonOperator( task_id="check_aws_provider_version", python_callable=print_provider_version )
执行后查看日志,确认是否为5.0.0。
2. 强制优先加载用户安装的包
MWAA会将用户通过requirements.txt安装的包放在/usr/local/airflow/.local/lib/python3.7/site-packages路径下,在DAG开头添加代码,将该路径加入sys.path最前端,确保优先加载用户版本:
import sys from pathlib import Path # 将用户安装包路径插入sys.path首位 user_package_path = str(Path.home() / ".local" / "lib" / "python3.7" / "site-packages") sys.path.insert(0, user_package_path) # 之后再导入目标Operator from airflow.providers.amazon.aws.operators.ecs import EcsCreateClusterOperator
3. 强制重新安装指定版本
在requirements.txt中添加pip参数,确保覆盖旧版本:
apache-airflow-providers-amazon==5.0.0 --force-reinstall --no-cache-dir
重新部署MWAA环境,让系统重新下载并安装指定版本,避免缓存或旧版本残留。
4. 确认版本兼容性
Airflow 2.2.2与apache-airflow-providers-amazon 5.0.0是兼容的(5.0.0要求Airflow≥2.2.0),无需担心版本冲突问题。
内容的提问来源于stack exchange,提问作者Armando Fa Menor
相关产品推荐
相关产品推荐

