Google Cloud Shell中Dataflow管道CERTIFICATE_VERIFY_FAILED错误修复
SSLHandshakeError When Running Dataflow Pipeline from Google Cloud Shell
看起来你遇到的问题是Cloud Shell环境下的SSL证书验证异常,而本地运行正常——这种情况通常和Cloud Shell的Python环境CA证书配置有关,下面是具体的分析和修复建议:
问题原因
Cloud Shell作为容器化环境,其Python默认的SSL证书路径可能没被Apache Beam SDK正确识别,导致连接GCS(Google Cloud Storage)时无法验证服务器证书,从而抛出SSL: CERTIFICATE_VERIFY_FAILED错误。而本地机器的Python环境通常已正确配置系统CA证书,所以不会出现这个问题。
修复方案
1. 临时指定SSL证书路径运行
直接在启动命令中指定系统CA证书的路径,Cloud Shell的默认CA证书文件通常在/etc/ssl/certs/ca-certificates.crt:
SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt python -m simple_pipeline --runner DataflowRunner --project myproject --staging_location gs://bucket/staging --temp_location gs://bucket/temp
或者也可以在Python代码开头添加环境变量设置:
from __future__ import print_function import os os.environ['SSL_CERT_FILE'] = '/etc/ssl/certs/ca-certificates.crt' import apache_beam as beam from apache_beam.options.pipeline_options import PipelineOptions # 后续代码保持不变 with beam.Pipeline(options=PipelineOptions()) as p: lines = p | 'Read' >> beam.io.ReadFromText('test.csv') lines | 'Write' >> beam.io.WriteToText('gs://bucket/output_20193003', file_name_suffix='.csv') result = p.run() result.wait_until_finish()
2. 更新Cloud Shell的CA证书
有时候Cloud Shell的CA证书可能过期,执行以下命令更新:
sudo update-ca-certificates
更新完成后再重新运行管道命令。
3. 切换到Python3环境(推荐)
你当前使用的Python2.7已停止官方维护,Apache Beam对Python2.7的支持也早已终止,Cloud Shell的Python3环境配置更完善,建议切换到Python3:
- 创建并激活Python3虚拟环境:
python3 -m venv beam-env3 source beam-env3/bin/activate - 安装适配Python3的Beam SDK:
pip install apache-beam[gcp] - 用Python3运行你的管道:
python3 -m simple_pipeline --runner DataflowRunner --project myproject --staging_location gs://bucket/staging --temp_location gs://bucket/temp
验证
完成上述任一操作后,重新运行Dataflow管道,应该就能正常连接GCS并完成读写操作了。
内容的提问来源于stack exchange,提问作者Jaison
相关产品推荐
相关产品推荐

