谷歌云功能完成状态:“连接错误”

Posted

技术标签:

【中文标题】谷歌云功能完成状态:“连接错误”【英文标题】:Google Cloud Function finished with status: 'connection error' 【发布时间】:2020-05-11 00:49:11 【问题描述】:

我有一个由 Github webhook 调用的 HTTP 云函数 (Python 3.7),当事件类型不是拉取请求时,它通常(但不总是)以连接错误退出。当它没有进入 if 块时,它总是干净地退出。

函数如下:

def my_func(request):
    event = request.headers.get("X-GitHub-Event", "unknown")
    if event != "pull_request":
        print("This is not a pull request")
        return "This is not a pull request", 200
    return "OK", 200

在日志中显示为:

"This is not a pull request"
"Function execution took 11 ms, finished with status: 'connection error'" 

在 Github 端,响应是 HTTP/500 错误,消息为“错误:无法处理请求”。

我已将它重新部署为不同项目中的新功能,并且发生了同样的事情。有时,一个函数会返回 200,而另一个函数会为同一事件返回 500。知道这里发生了什么吗?谢谢:)

【问题讨论】:

谢谢,我可以重现这个。现在看看。 您好,您为 webhook 配置了哪种内容类型?是application/x-www-form-urlencoded 还是application/json?如果您使用application/json,错误是否仍然存在? 是应用程序/json 这似乎是 GCP 的间歇性内部问题,我们正在尝试找出根本原因。感谢您的耐心等待。 【参考方案1】:

您似乎达到了Max uncompressed HTTP request size in Cloud functions 的限制,即 10MB。这可能就是为什么有些请求可以,有些则不行的原因。

您可能需要考虑使用 Google App Engine 或以某种方式限制来自 Github 的请求/响应的大小。

更新

唯一值得测试的另一件事是尝试为几种请求类型设置 if else 条件,以消除那里出现问题的可能性。

例如:

def my_func(request):
    event = request.headers.get("X-GitHub-Event", "unknown")
    if event == "[Type1]":
        print("This is [Type1]")
        return "This is not a pull request", 200
    elif event == "[Type2]":
        print("This is [Type2]")
    return "OK", 200

如果使用 GAE 而不是 Cloud Functions,看看完全相同的代码是否可以工作会很有趣

否则,这将是 webhook 的特定问题,需要在 Github webhook 处理程序的 Github 存储库或最适合的地方报告。

【讨论】:

这是一个很好的答案,但不是这里的问题——我现在让它从请求标头中打印 Content-Length 并且我有一个以连接错误结束的 0.03 MB。如果它超过了 GCP 的限制,我也会感到惊讶的是它完全发送了请求。 好调用,我更改了 if else 条件,如果它是[Type 1],它会返回连接错误,不管它是什么。所以这似乎不是 Github 有效负载本身的问题。我稍后会尝试 GAE,看看会发生什么! 它似乎在 GAE 上运行良好,所以我将其标记为答案。谢谢!!

以上是关于谷歌云功能完成状态:“连接错误”的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云功能连接到云 sql (postgreSQL)

谷歌云功能在访问实时数据库时返回 204 状态

连接到谷歌云消息云连接服务器的身份验证错误

写入谷歌云 postgresql 数据库的连接网络错误

谷歌云功能 - Sendgrid 443 错误 [重复]

谷歌云存储功能在订阅者连接时发送已发送的消息