我编写了一个小型lambda函数,并将其连接到API网关。我添加了一个错误regex来匹配API网关中的.*Error.*
和返回状态400。我面临的问题是,正则表达式似乎只有在lambda失败时才匹配,正如本线程所建议的那样。
我的lambda函数:
import logging
import boto3
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
if int(event['event_id']) == 1:
return {
'statusCode': 200,
"status": "success"
}
elif int(event['event_id']) == 2:
return {
'statusCode': 400,
"status": "Error"
}
else:
raise Exception("Error")
看起来情况1运行良好,默认情况下返回状态200。对于event_id=3
,它从API网关返回状态400(数据中包含堆栈跟踪,我希望避免(,但对于event_id=2,它返回状态200,数据中包含Error
字符串。
如何在不引发异常的情况下将lambda标记为失败?
失败的Lambda意味着Lambda函数中有一些代码段无法执行。在当前代码中,只有第三个路径具有这样的代码段(人为生成的Exception(。
不可能在Lambda中执行所有代码段,但仍然失败。
若您想通过程序处理API网关返回状态代码,您必须使用Lambda集成。使用Lambda集成,您可能会返回如下响应:
{
"statusCode": "400",
body: json.dumps({ "error": "you messed up!" }),
headers: {
"Content-Type": "application/json",
}
}
你会得到400的API响应。