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

如何解决AWS MWAA调用Cloudera CDP脚本的SSH依赖缺失问题?

解决MWAA中airflow.providers.ssh模块找不到的问题

核心问题分析

你的MWAA环境为私有VPC+私有Web服务器,导致依赖安装时无法访问公网资源(如PyPI、Airflow约束文件的公网地址),这是安装失败的根本原因;同时直接通过plugin.zip上传.whl包的方式不符合MWAA对官方Provider插件的加载逻辑。

分步解决方案

1. 解决VPC网络访问限制

MWAA在私有VPC环境下安装依赖需要访问外部资源,需做以下配置:

  • 为MWAA执行角色添加S3存储桶的读写权限,确保能读取存储桶内的依赖文件
  • 在VPC中配置NAT网关,让MWAA环境可通过NAT访问公网;或配置对应VPC端点:
    • 添加PyPI相关的VPC端点(若使用AWS Marketplace提供的PyPI镜像)
    • 添加S3的VPC端点,保障存储桶资源的访问
    • 添加CloudWatch Logs的VPC端点,便于查看依赖安装日志

2. 正确配置requirements.txt

放弃公网约束文件链接,改用本地预下载依赖的方式:

  • 在本地Python3.11环境中,下载符合Airflow2.10.1约束的apache-airflow-providers-ssh及所有依赖:
    pip download apache-airflow-providers-ssh -c https://raw.githubusercontent.com/apache/airflow/constraints-2.10.1/constraints-3.11.txt -d ./deps
    
  • 将下载的所有.whl文件上传至MWAA存储桶的requirements目录(示例路径:s3://你的MWAA存储桶/requirements/)
  • 修改requirements.txt内容,直接引用存储桶内的依赖包:
    --find-links s3://你的MWAA存储桶/requirements/
    apache-airflow-providers-ssh
    
    注意替换为你的实际存储桶路径

3. 修正SSHOperator代码导入逻辑

确保代码导入正确的模块,避免隐性加载错误:

from airflow.providers.ssh.operators.ssh import SSHOperator

# 从Secrets Manager获取hostname、username、password的逻辑省略
run_script = SSHOperator(
    task_id="run_test_script",
    ssh_conn_id=None,
    command="sudo -u etl_app bash /path/to/test.sh",
    remote_host=hostname,
    username=username,
    password=password,
    dag=dag,
)

4. 验证安装与DAG加载

  • 更新MWAA环境,触发依赖重新安装流程
  • 查看CloudWatch Logs中的mwaa-environment-update日志,确认依赖安装成功
  • 上传DAG文件至MWAA的DAG存储路径,检查是否能正常加载

额外注意事项

  • 不要通过plugin.zip上传官方Provider包:MWAA的插件机制用于自定义Operator/Hook,官方Providers必须通过requirements.txt安装
  • 确保MWAA执行角色权限充足:需包含Secrets Manager读取权限、S3存储桶权限、VPC资源访问权限

内容的提问来源于stack exchange,提问作者Sunil Rastogi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:18:27