1

我有一个非常简单的函数(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 秒,但偶尔仍会出错
  • 不缓存对表的引用(因此现在应该很快收集它们
4

0 回答 0