DurandA - я считаю, что вы абсолютно правы: упрощенный подход интеграции Lambda Proxy основан на том, что вы перехватываете исключения и возвращаете стандартизированный формат:
def lambda_handler(event, context):
return {
'statusCode': 400,
'body': json.dumps('This is a bad request!')
}
Упрощенная функция интеграции Lambda Proxy была объявлена в Сообщение в блоге за сентябрь 2016 года , но один из приведенных вами примеров был опубликован ранее, в сообщении в блоге за июнь 2016 года , когда более сложный метод Integration Response был единственным способом. Возможно, вы наткнулись на устаревший пример.
Вы также разместили ссылку на документацию по продукту для обработки ошибок в верхней части раздела, посвященного функции интеграции прокси-серверов Lambda. говорит:
С интеграцией прокси-сервера Lambda Lambda должна возвращать вывод следующего формата:
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
Вот рабочий пример, который возвращает HTTP 400 с сообщением "Это исключение!" использование интеграции лямбда-прокси.
import json
def exception_handler(e):
# exception to status code mapping goes here...
status_code = 400
return {
'statusCode': status_code,
'body': json.dumps(str(e))
}
def lambda_handler(event, context):
try:
raise Exception('This is an exception!')
return {
'statusCode': 200,
'body': json.dumps('This is a good request!')
}
except Exception as e:
return exception_handler(e)
Вывод из вышеизложенного:
$ http https://**********.execute-api.us-east-2.amazonaws.com/test
HTTP/1.1 400 Bad Request
Connection: keep-alive
Content-Length: 23
Content-Type: application/json
Date: Sun, 23 Feb 2020 05:06:59 GMT
X-Amzn-Trace-Id: Root=1-********-************************;Sampled=0
x-amz-apigw-id: ****************
x-amzn-RequestId: ********-****-****-****-************
"This is an exception!"
Я понимаю ваше разочарование тем, что вы не хотите создавать пользовательский обработчик исключений. К счастью, вам нужно создать только один обработчик, упаковывающий вашу функцию lambda_handler. Желаю вам всего наилучшего!