跨AWS EC2实例:Airflow触发Ni-Fi流水线失败求助
排查Airflow触发Ni-Fi任务连接拒绝问题的步骤
1. 先从Airflow实例做基础网络连通性测试
在Airflow所在的EC2实例上,用命令直接测试Ni-Fi实例的8443端口:
- 私网IP测试:
telnet <Ni-Fi私网IP> 8443或curl -vk https://<Ni-Fi私网IP>:8443/nifi-api - 公网IP测试:
telnet <Ni-Fi公网IP> 8443
如果这一步失败,说明问题出在网络层面:
- 检查Ni-Fi实例的本地防火墙:Ubuntu默认用ufw,执行
sudo ufw status确认是否允许8443端口入站,未开启则添加规则:sudo ufw allow 8443 - 重新核对安全组规则:确保Ni-Fi实例的安全组入站规则,源是Airflow实例的私网IP/IP段或Airflow的安全组ID,协议为TCP,端口8443,方向为入站。
2. 检查Ni-Fi的API监听配置
Ni-Fi默认可能仅监听localhost,导致外部无法访问API。打开Ni-Fi配置文件/opt/nifi/conf/nifi.properties:
- 确认
nifi.web.https.host设置为0.0.0.0或Ni-Fi实例的私网IP,而非localhost/127.0.0.1 - 确认
nifi.web.https.port值为8443,与代码中使用的端口一致
修改后重启Ni-Fi:sudo systemctl restart nifi(若用systemd管理)
3. 验证Ni-Fi API本地可用性
在Ni-Fi实例本地执行curl -vk https://localhost:8443/nifi-api,查看是否返回正常JSON响应。若本地正常但Airflow实例访问失败,回到网络层面排查。
4. 核对Airflow代码细节
- 确认请求用HTTPS:Ni-Fi 1.18.0默认启用HTTPS,8443是HTTPS端口,代码中不能写
http://xxx:8443 - 确认
processor_id正确性:必须是GenerateFlowFile处理器的ID,从Ni-Fi界面处理器详情页复制,勿用流程组或其他组件ID - 验证登录凭证:在Airflow实例上用curl测试登录:
curl -vk -X POST https://<Ni-Fi-IP>:8443/nifi-api/access/token -H "Content-Type: application/x-www-form-urlencoded" -d "username=<你的账号>&password=<你的密码>"
能返回token则凭证正常,返回401则账号密码错误。
5. 检查Airflow执行环境
- 若用CeleryExecutor,确认worker节点的安全组是否被允许访问Ni-Fi的8443端口(worker可能和webserver不在同一实例)
- 查看Airflow任务日志,若有SSL证书验证报错,可在代码中临时添加
verify=False(仅测试用,生产环境建议配置可信证书)
内容的提问来源于stack exchange,提问作者Berni Hacker
相关产品推荐
相关产品推荐

