如何在AWS MWAA中使用自定义constraints.txt(无需外部托管)?
MWAA 自定义Python依赖约束文件相关问题解答
问题背景
当前使用AWS Managed Workflows for Apache Airflow(MWAA,版本2.10.1,Python 3.11),现有requirements.txt内容如下:
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.1/constraints-3.11.txt" apache-airflow-providers-snowflake==5.7.0 apache-airflow-providers-mysql==5.7.0 soda-core==3.5.2 soda-core-redshift==3.5.2 pymssql==2.3.1 pymongo pymongo[aws]
希望创建自定义约束文件,但不想依赖外部托管(如GitHub、S3、HTTP端点),提出以下问题:
- 是否可以在MWAA中不依赖外部托管使用自定义约束文件?
- 若不可行,应用MWAA依赖自定义约束的推荐方式是什么?
- 将约束文件中的所有固定版本直接内联到requirements.txt是唯一可行的解决方案吗?
问题解答
1. 是否可以不依赖外部托管使用自定义约束文件?
不行。MWAA处理requirements.txt时,--constraint参数仅支持指向HTTP/HTTPS端点或S3对象URL的约束文件,无法直接引用MWAA环境内部或本地文件(包括DAG包中的约束文件),必须依赖外部托管地址。
2. MWAA依赖自定义约束的推荐方式
最推荐的方案是将自定义约束文件上传到与MWAA环境关联的S3桶中,然后在requirements.txt中使用S3对象URL作为约束地址:
--constraint "s3://<你的MWAA关联桶路径>/constraints-custom.txt" apache-airflow-providers-snowflake==5.7.0 apache-airflow-providers-mysql==5.7.0 soda-core==3.5.2 soda-core-redshift==3.5.2 pymssql==2.3.1 pymongo pymongo[aws]
需确保MWAA的执行角色拥有该S3对象的s3:GetObject权限,这种方式安全可控,能通过IAM精细管控权限,避免外部托管的可用性风险。
3. 内联版本是否是唯一可行方案?
不是唯一方案。除了内联版本到requirements.txt,还有两种可行方式:
- 采用上述推荐的S3托管约束文件方案
- 将约束文件托管到MWAA所在VPC可访问的内部HTTP服务器(如企业内部PyPI镜像、文件服务器)
内联版本虽可行,但会让requirements.txt冗长,维护成本高,尤其是依赖包数量较多时,S3托管或内部HTTP托管的方式更便于版本管理和维护。
内容的提问来源于stack exchange,提问作者powerofthunder
相关产品推荐
相关产品推荐

