谷歌云函数完成状态:'连接错误'。

7

我有一个HTTP云函数(Python 3.7),由Github webhook调用,当事件类型不是pull request时,它通常(但不总是)会出现连接错误,而当它不进入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. 你有任何想法这里发生了什么吗?谢谢 :)

谢谢,我可以重现这个问题。我现在来看一下。 - Dustin Ingram
你好,你的 Webhook 配置了哪种内容类型?是 application/x-www-form-urlencoded 还是 application/json?如果使用 application/json,错误是否仍然存在? - Dustin Ingram
它是 application/json。 - a_mazz
这似乎是GCP的间歇性内部问题,我们正在努力找到根本原因。感谢您的耐心等待。 - Dustin Ingram
1个回答

3

看起来你正在达到Cloud函数中未压缩的HTTP请求大小的最大限制,这个限制是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的限制,我也会感到惊讶它是否能够成功传递请求。 - a_mazz
好的,我改变了if else条件,并且如果是[Type 1],它会返回连接错误,无论它是什么。因此,似乎这不是Github负载本身的问题。我稍后会尝试GAE并查看那里会发生什么! - a_mazz
1
它似乎在GAE上运行良好,所以我将其标记为答案。谢谢! - a_mazz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接