Google Cloud Composer中Airflow调用新冠API任务失败求助
Google Cloud Composer 任务失败排查方案
优先操作:查看任务报错日志
直接进入Airflow UI,找到失败的api_covid任务,点击「Log」按钮查看完整执行日志,优先定位报错类型,再针对性解决。以下是该场景下的高频故障原因和修复方案:
网络连通性问题
第一个汇率API可正常访问不代表所有公网域名都可连通,大概率是以下两种情况:
- Composer所在VPC的防火墙规则、Cloud NAT配置限制了该泰国API域名的公网访问
- 该API的服务端封禁了Composer工作节点的出口公网IP
可在covid_api函数中增加异常捕获和日志打印,确认请求状态:
def covid_api(): import traceback try: url = "https://covid19.th-stat.com/json/covid19v2/getTimeline.json" # 增加超时配置,避免请求无限挂起 response = requests.get(url, timeout=30) print(f"API请求返回状态码:{response.status_code}") # 校验请求是否成功,非200状态直接抛出异常 response.raise_for_status() df = response.json() df = pd.DataFrame.from_dict(df['Data']) df['Date'] = pd.to_datetime(df['Date']).dt.date df.to_csv("/home/airflow/gcs/data/result.csv", index=False) except Exception as e: print(f"报错详情:{str(e)}") print(f"错误调用栈:{traceback.format_exc()}") raise修改后重新运行任务,即可在日志中看到请求状态码和报错详情,确认是否为网络层面的问题。
依赖包版本兼容问题
本地Jupyter环境的
pandas、requests包版本和Composer运行环境的版本不一致,可能导致JSON解析、日期处理逻辑报错。
可先在本地Jupyter执行pip list | grep -E "pandas|requests"查看本地版本号,再到Google Cloud Composer的环境配置页面,在PYPI依赖包配置中指定和本地一致的版本安装即可。API返回结构异常问题
该API可能针对不同地区IP的请求返回不同结构的响应,或临时返回非JSON格式的错误内容,导致代码中取
df['Data']时抛出KeyError,新增上述日志打印逻辑后即可确认返回内容是否符合预期。GCS路径写入问题
虽然第一个任务可正常写入GCS挂载路径,也可排查是否存在同名文件权限冲突、写入路径配置错误的问题,确认
/home/airflow/gcs/data/路径在当前Composer版本下是否为正确的GCS挂载路径。
内容的提问来源于stack exchange,提问作者Hect blunk
相关产品推荐
相关产品推荐

