Google Cloud Run:错误:HTTP / 2框架层中的流错误

时间:2019-12-15 18:32:28

标签: google-cloud-platform google-cloud-run

我使用https://www.starlette.io/和docker image python:3.7-slim-stretch创建了一个API,并且在本地以及在AWS ECS上部署时,一切运行良好。

但是,当我尝试在Google Cloud Run上部署相同的应用程序时,无法收到任何请求。 我可以使用根域/上的浏览器访问服务器,但是当我尝试访问/prediction-url时,出现诸如Error: Stream error in the HTTP/2 framing layerService unavailable之类的响应错误。尝试使用Insomnia,javascript请求以及curl请求访问API。 奇怪的是,一切都可以在AWS ECS上100%正常运行,但是我无法在Googl Cloud Run上正常运行。 部署到Google Cloud Run时,有什么要考虑的具体问题?

请求路由定义:

@app.route("/classify-url", methods=["GET"])
@requires("authenticated")
async def classify_url(request):
    img_bytes = await get_bytes(request.query_params["url"])
    return await predict_image_from_bytes(img_bytes)

服务器启动命令:

if __name__ == "__main__":
    if "serve" in sys.argv:
        # int(os.environ.get('PORT', 8080))
        uvicorn.run(app, host="0.0.0.0", port=8080, log_level="info")

dockerfile:

FROM python:3.7-slim-stretch

RUN apt-get update && apt-get install -y git python3-dev gcc \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

RUN pip install --upgrade -r requirements.txt

COPY . .

EXPOSE 8080
EXPOSE 8000
EXPOSE 80
ENV LISTEN_PORT=8080

# Start the server
CMD ["gunicorn", "-w 1", "-k uvicorn.workers.UvicornWorker", "-b 0.0.0.0:8080", "-t 8", "main:app"]

1 个答案:

答案 0 :(得分:3)

您可以在known issues中看到,完全托管的Cloud Run不支持HTTP流。团队正在努力,但暂时不可用,也没有宣布发布日期。

如果要使用流技术,则可以在GKE上使用Cloud Run,但是管理和成本并不相同。