Eu queria que um erro do Lambda fosse o próprio erro 500, depois de fazer muita pesquisa, descobri o seguinte, que funciona:
Em LAMBDA
Para uma boa resposta, estou retornando como abaixo:
exports.handler = (event, context, callback) => {
// ..
var someData1 = {
data: {
httpStatusCode: 200,
details: [
{
prodId: "123",
prodName: "Product 1"
},
{
"more": "213",
"moreDetails": "Product 2"
}
]
}
};
return callback(null, someData1);
}
Para uma resposta ruim, retornando como abaixo
exports.handler = (event, context, callback) => {
// ..
var someError1 = {
error: {
httpStatusCode: 500,
details: [
{
code: "ProductNotFound",
message: "Product not found in Cart",
description: "Product should be present after checkout, but not found in Cart",
source: "/data/attributes/product"
},
{
code: "PasswordConfirmPasswordDoesntMatch",
message: "Password and password confirmation do not match.",
description: "Password and password confirmation must match for registration to succeed.",
source: "/data/attributes/password",
}
]
}
};
return callback(new Error(JSON.stringify(someError1)));
}
Em API Gateway
Para um GET METHOD, diga GET of / res1 / service1:
Through Method Response > Add Response, added 3 responses:
- 200
- 300
- 400
Então,
Through 'Integration Response' > 'Add integration response', create a Regex for 400 errors (client error):
Lambda Error Regex .*"httpStatusCode":.*4.*
'Body Mapping Templates' > Add mapping template as:
Content-Type application/json
Template text box* $input.path('$.errorMessage')
Similarly, create a Regex for 500 errors (server error):
Lambda Error Regex .*"httpStatusCode":.*5.*
'Body Mapping Templates' > Add mapping template as:
Content-Type application/json
Template text box* $input.path('$.errorMessage')
Agora, publique / res1 / serviço1, acesse o URL publicado, que está conectado ao lambda acima
Utilizado o plugin do cliente REST avançado (ou Postman) do cromo, você verá os códigos http adequados, como erro do servidor (500) ou 400, em vez do código de resposta 200 http para todas as solicitações fornecidas em "httpStatusCode".
No 'Dashboard' da API, no API Gateway, podemos ver os códigos de status http como abaixo: