В итоге я определил, что тип «интеграции», который вы используете, имеет значение.Есть пара, включающая lambda
, aws-proxy
и lambda-proxy
.По умолчанию это lambda-proxy
, что означает, что все запросы передаются в функцию напрямую, без каких-либо карт интеграции или шаблонов.Для этого вам нужно lambda
.
Правильный ответ и то, что кажется общепринятой практикой, - всегда отправлять ошибки как nil
и устанавливать код состояния и ответ в качестве ответного сообщения.Если вы отправляете сообщение об ошибке и возвращаете ошибку, Lambda всегда возвращает внутреннюю ошибку с 502.
Это также означает, что ведение журнала и отслеживание ошибок полностью за вами.В некоторых случаях это лучший подход, если вы идете по пути интеграции lambda
, вам нужно будет определить заголовки, принятое тело и правильно использовать процесс «отображения интеграции».
Вы должны принять решениекакой путь вы хотите использовать с лямбдой.
Для полной ясности вы ВСЕГДА отправляете events.APIGatewayProxyResponse назад и nil в качестве второго параметра из вашего обработчика.Таким образом, успешным ответом будет:
return Response{
Body: body,
StatusCode: 200,
Headers: map[string]string{
"Content-Type": "application/json",
},
}, nil
И ответом об ошибке будет просто та же структура ответа, но с изменениями значений StatusCode и Body в соответствии с вашими потребностями ответа.
Извлеченный урок: -р