Airflow 1.9.0中S3KeySensor模板化bucket_key遇bucket_name缺失报错
Airflow 1.9.0 S3KeySensor 结合XCom传bucket_key且设bucket_name=None时报错的问题分析
这确实是Airflow 1.9.0版本的一个已知Bug,完全不是你的用法问题。
问题本质
S3KeySensor的初始化逻辑设计有缺陷:它会在模板渲染之前就对传入的bucket_key做URL解析,而你这里的bucket_key是一个Jinja模板字符串{{ ti.xcom_pull(task_ids="run_query",key="query_result_loc") }},此时还没被渲染成实际的S3路径,解析出来的结果自然没有有效的bucket信息。再加上你设置了bucket_name=None,代码就会因为找不到bucket信息而抛出缺失错误。
为什么你的临时修复有效
你提到的几个调整方式正好命中了问题的核心:
- 注释初始化阶段的解析逻辑:让URL解析延迟到模板渲染完成之后,此时
bucket_key已经是真实的S3路径,能正确解析出bucket; - 移除
if parsed_url.netloc == ''判断:避免未渲染的模板字符串触发错误分支; - 指定
bucket_name:直接跳过自动解析逻辑,用你提供的合法bucket值覆盖,自然不会报错。
长期解决方案
如果条件允许,升级到Airflow 1.10及以上版本是最优解——后续版本已经修复了模板渲染时序不匹配的问题,这类提前解析模板字符串的Bug被彻底解决了。
内容的提问来源于stack exchange,提问作者GuSuku
相关产品推荐
相关产品推荐

