我使用lambda函数为REST提供服务。在一个端点中,我得到了打印到cloudwatch日志中的“身体大小太长”。
我从函数中得到的响应是状态代码502,响应体{ "message":“内部服务器错误”}。如果我调用同一个端点,但使用了一个过滤器,那么响应体大小为2.26MB,并且可以工作。这就排除了我遇到异步响应体限制的可能性。
错误时响应体大小为5622338字节(5.36MB)。
我是这样计算响应大小的(python2.7):
import urllib2
...
out = {}
resp = urllib2.urlopen(req)
out.statusCode = resp.getcode()
out.body = resp.read()
print("num bytes: " + str(len(bytearray(out.body, 'utf-8'))))所公布的用于同步调用的最大响应体大小为6MB。据我所知,我不应该收到这个错误。https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
其他信息:
持续时间: 22809.11毫秒记帐持续时间: 22810毫秒内存大小:使用138MB最大内存: 129兆比特持续时间: 1322.71毫秒
任何帮助都将不胜感激。
更新4/22/21
经过进一步的研究,我发现如果响应的大小是1,048,574字节(0.999998 MB)或更多,lambda函数就会出错。
如果响应为1,048,573字节(0.999997 MB)或更少,它就能工作。
我就是这样回复的。我硬编码视图函数以返回特定大小的字节数组。例如。
return bytearray(1048573)我打开了我正在使用的AWS网关阶段的日志记录,下面的错误被写入日志。这意味着该函数正在出错。不是调用函数: Lambda执行失败,状态200由于客户函数错误:主体大小太长。
据我理解,AWS Lambda函数的最大响应大小为6MB,AWS网关的最大响应大小为10 6MB。
AWS :调用有效负载响应https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
API网关:用于配置和运行REST ->有效负载大小https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html的API网关配额
我是不是误解了限制?
发布于 2021-05-10 20:25:47
我为python3.7创建了一个新的lambda函数,发现它返回了一个更具描述性的错误。我能够确定在lambda函数离开lambda函数后,lambda函数在响应的大小上增加了大约1MB,这解释了为什么它在lambda函数中出错,而不是在端点代码中。在一种情况下,它添加了.82MB,而另一种情况则添加了.98MB。这似乎是基于反应的大小。我怀疑响应是得到base64编码、URL编码或类似的东西。我没有找到能够回答这个问题的文档,并且在接收端没有以任何方式编码响应。
用python3.7:构建lambda函数返回的错误消息
响应有效负载大小(8198440字节)超过了允许的最大有效负载大小(6291556字节)。
Lambda函数代码:
import requests, base64, json
def lambda_handler(event, context):
headers = {...}
url = ...
response = requests.get(url, headers=headers)
print (len(response.content))
print (len(response.content.decode("utf-8")))
return response.content.decode('UTF-8')下面是在lambda函数中打印响应的大小,以及由lambda在错误消息中确定的响应大小。
我使用这两个print语句来确定响应的大小,这两个print语句总是返回相同的长度。Response.content是一个字节数组,所以我的想法是,获取它的长度将返回响应中的字节数: print (len(response.content) print (len(response.content.decode(“utf-8”)
Ex 1.
在lambda函数中打印时的大小:
7,165,488 (6.8335 MB)
大小,如错误消息中定义的:
8,198,440 (7.8186 MB)
额外:
1,032,952 (0.9851 MB)
错误信息:
响应有效负载大小(8198440字节)超过了允许的最大有效负载大小(6291556字节)。
ex2.lambda函数内打印时的大小:
5,622,338 (5.3619 MB)
大小,如错误消息中定义的:
6,482,232 (6.1819 MB)
额外:
859,894 (0.820059 MB)
错误信息:
响应有效负载大小(6482232字节)超过了允许的最大有效负载大小(6291556字节)。
我决定将端点代码中的软限制再降低1MB (4.7MB),以防止在lambda函数中达到限制。
发布于 2021-07-26 17:34:44
在金刚也试过了。events.APIGatewayV2HTTPResponse.Body可以是~5.300.000字节(没有测试确切的限制)。值在lambda函数(len(resp.Body))内测量。
https://stackoverflow.com/questions/66971400
复制相似问题