Apache Beam Dataflow作业中TLS CA证书路径无效问题排查
问题分析与解决
核心问题
你指定的证书路径/extra_files/cert.pem是错误的:--extraFilesToStage参数会将GCS中的文件下载到Dataflow Worker的任务执行工作目录(而非你假设的/extra_files目录),因此硬编码这个路径会导致文件找不到。
另外,你的代码里存在拼写错误:beaders应改为headers,虽然这不是当前报错的直接原因,但会导致请求头无法正常传递。
解决方案
方案一:使用相对路径/动态获取工作目录路径
直接使用证书文件名(文件已被同步到Worker的工作目录),或者通过os模块动态拼接路径,确保路径正确:
import os import requests # 方法1:直接使用文件名(简单直接) resp = requests.get(url, verify='cert.pem', headers=headers, timeout=120) # 方法2:动态获取当前工作目录,路径更稳妥 cert_path = os.path.join(os.getcwd(), 'cert.pem') resp = requests.get(url, verify=cert_path, headers=headers, timeout=120)
方案二:通过Beam FileSystems直接读取GCS证书
无需依赖--extraFilesToStage参数,直接用Beam的文件系统API从GCS读取证书内容,传给requests的verify参数(该参数支持接收证书字节内容):
import requests from apache_beam.io.filesystems import FileSystems # 从GCS读取证书内容 with FileSystems.open('gs://bucket/cert.pem') as cert_file: cert_content = cert_file.read() resp = requests.get(url, verify=cert_content, headers=headers, timeout=120)
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

