与Google BigQuery连线时遇到麻烦

时间:2020-08-22 09:36:58

标签: python google-app-engine google-bigquery

我一直在Google App Engine上使用flask创建api,并且在部署后从浏览器向该应用发送请求时,出现502错误。我确定此错误是由“ gcloud应用程序日志尾巴测试”的GCP凭证引起的,但是凭证Json文件和文件名的路径似乎还可以。我已经用谷歌搜索过,并且尝试了所有我在那找到的但无法解决的文章。 我已经导出了GOOGLE_APPLICATION_CREDENTIALS =“ / home / user / secret_key / bq.json” 谁能告诉我解决方案? 如果缺少任何信息,请告诉我。谢谢。

此外,我的api函数正在通过http请求获取luid参数,并使用该luid运行SQL,并且如果luid的行在BigQuery的cv_date列中包含数据,则它将True返回给客户端。

【The result of "gcloud app logs tail -s test"】

File "/env/lib/python3.7/site-packages/google/auth/_default.py", line 97, in load_credentials_from_file      "File {} was not found.".format(filename)  google.auth.exceptions.DefaultCredentialsError: File /home/user/secret_key/bq.json was not found.
【/home/user/api_dev/main.py】

from flask import Flask,request
from google.cloud import bigquery
import os

credentials_json = '/home/user/secret_key/bq.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json
client = bigquery.Client()

app = Flask(__name__)

@app.route('/')
def get_request():
    request_luid = request.args.get('luid') or ''
    query = """
    SELECT EXISTS(SELECT cv_date FROM `test-266110.conversion_log.conversion_log_202008*` t WHERE request_luid = p.luid)
    """
    query_res = client.query(query)

    return query_res


if __name__ == "__main__":
    app.run()
【Remove the codes for BigQuery except import library and variables】
*This code works well and returns luid you input on url parameter 

from flask import Flask, request
from google.cloud import bigquery
import os

credentials_json = '/home/user/secret_key/bq.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json


app = Flask(__name__)

@app.route('/')
def get_request():
    request_luid = request.args.get('luid') or ''
    
    return request_luid


if __name__ == "__main__":
    app.run()

1 个答案:

答案 0 :(得分:1)

我建议您仔细阅读auth文档。

https://cloud.google.com/docs/authentication/production更详细地讨论了服务帐户的交互。您可能不需要在实时应用中传递凭据。在本地运行时,您只需设置GOOGLE_APPLICATION_CREDENTIALS即可使用凭据,但无需在生产环境中进行设置。

问题在于,您指定的路径(/home/user/secret_key/bq.json仅对您的开发环境有效,或者根本不包含在生产部署中,或者所部署的应用程序中文件的绝对路径是不同。