You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署含BigQuery API的Dash应用至Cloud Run时出现503服务不可用错误

解决Cloud Run部署Dash应用后503服务不可用问题

问题背景

基于Flask的Dash应用本地运行正常,部署到Google Cloud Run后返回「Service Unavailable」(503错误),仅在官方快速入门项目基础上添加了BigQuery查询代码及相关依赖:

添加的代码:

from google.cloud import bigquery
client = bigquery.Client()  
query = "SELECT * from `sucombe.prestaProduit.prestaProd2024`  limit 5"
df=client.query(query).to_dataframe()
print(df[:5])

requirements.txt新增依赖:

pandas
google-cloud-bigquery

解决步骤

1. 配置Cloud Run服务账号权限

Cloud Run默认服务账号无BigQuery访问权限,需添加以下角色:

  • 进入Cloud Run控制台,找到目标服务的「权限」标签
  • 为默认服务账号(格式:[项目ID]@appspot.gserviceaccount.com)分配BigQuery Data Viewer和BigQuery Job User角色
  • 或部署时指定有权限的服务账号:
    gcloud run deploy [服务名] --service-account=[你的服务账号]@[项目ID].iam.gserviceaccount.com
    

2. 调整BigQuery代码执行时机

避免在应用全局作用域执行BigQuery查询,Cloud Run启动超时时间有限,初始化阶段的长耗时操作会导致启动失败:

  • 将查询代码移到请求处理逻辑内部(比如Flask路由或Dash回调函数):
    from google.cloud import bigquery
    import os
    import dash
    from dash import html, Input, Output
    
    app = dash.Dash(__name__)
    app.layout = html.Div([
        html.Button('加载数据', id='submit-btn', n_clicks=0),
        html.Div(id='data-container')
    ])
    
    @app.callback(Output('data-container', 'children'), Input('submit-btn', 'n_clicks'))
    def load_data(n_clicks):
        if not n_clicks:
            return ""
        client = bigquery.Client()  
        query = "SELECT * from `sucombe.prestaProduit.prestaProd2024` limit 5"
        df = client.query(query).to_dataframe()
        return html.Table([
            html.Thead(html.Tr([html.Th(col) for col in df.columns])),
            html.Tbody([html.Tr([html.Td(df.iloc[i][col]) for col in df.columns]) for i in range(len(df))])
        ])
    
    if __name__ == '__main__':
        app.run_server(host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
    

3. 完善依赖配置

确保requirements.txt包含完整依赖,添加google-cloud-bigquery-storage优化数据读取:

pandas
google-cloud-bigquery
google-cloud-bigquery-storage
flask
dash

部署时查看Cloud Build日志,确认所有依赖安装无报错。

4. 查看Cloud Run日志定位具体错误

进入Cloud Run控制台的「日志」标签,查看启动或请求阶段的错误日志,比如权限不足、查询超时、依赖缺失等,日志会直接指明问题根源。

5. 调整服务资源与超时配置

若BigQuery查询耗时较长,可增加启动超时时间和资源配置:

# 设置启动超时为5分钟
gcloud run deploy [服务名] --timeout=300s
# 增加CPU和内存
gcloud run deploy [服务名] --cpu=2 --memory=2Gi

内容的提问来源于stack exchange,提问作者Christophe Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:11:11