我有一个非常简单的函数(py3.6),我正在sam-local
通过它运行它start-api
,我正在使用一个充满curl
帖子的 shell 脚本进行测试:
lambda_handler(event, context):
try:
json_body = event["body"]
if not validate_json(json_body):
raise Exception("Bad JSON")
post_to_dynamo_db_local(json_body)
except Exception as err:
return {
'statusCode': 999,
'headers': {"x-custom-header": "my custom header value"},
'body': "\nException! " + str(err)
}
return {
'statusCode': 200,
'headers': {"x-custom-header": "my custom header value"},
'body': "hello world"
}
validate_json
该测试在大约 95% 的时间在正确的用例中运行良好,但在引发 anException
尽管被捕获,或者当post_to_dynamo_db_local
短路并提前返回(对象已经在 DB 中,返回)时失败(不一致)。
*我说正确的用例在大约 95% 的情况下都有效,因为有时我触摸东西但它失败了,但我触摸东西很可能是原因。虽然未经证实!
根据sam-local
控制台,该函数似乎正确返回:
START RequestId: 8c7cf7ce-2926-4ce4-ba3c-0fac95a810b0 Version: $LATEST
END RequestId: 8c7cf7ce-2926-4ce4-ba3c-0fac95a810b0
REPORT RequestId: 8c7cf7ce-2926-4ce4-ba3c-0fac95a810b0 Duration: 162 ms
Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 24 MB
但是curl
直到请求超时才收到响应:
{ "message": "Internal server error" }
大约在同一时间sam-local
控制台响应:
Error invoking python 3.6 runtime: io: read/write on closed pipe
有任何想法吗?对于这样一个简单的任务,函数运行时间似乎异常高,我认为这里的内存不应该是一个问题......
失败案例流程:
开始->检查输入(字符串)->引发异常->捕获异常->返回响应(字符串)
补充:有几件事有帮助:
- 在卷发之间睡觉(最多尝试 10 秒,但偶尔仍会出错
- 不缓存对表的引用(因此现在应该很快收集它们