AWS ALB->Lambda 502

AWS ALB->Lambda 502

He buscado por todas partes pero no he encontrado mucho sobre esto. Los documentos/depuración en ALB parecen bastante pobres...

Recibo 502 de ALB por razones que no puedo discernir. Tengo un ALB con objetivo Lambda. Mi Lambda envía esto al ALB:

{\n statusCode: 200,\n body: 'Root...',\n multiValueHeaders: {\n
'x-powered-by': [ 'Express' ],\n 'access-control-allow-origin' : [ '*' ],\n 'tipo de contenido': [ 'text/html; charset=utf-8' ],\n
'content-length': [ '7' ],\n etag: [ 'W/"7-bEyWHAj7Nx3j68RN5+dEhPIpvp0"' ]\n },\n isBase64Encoded: false,\ n estadoDescripción: '200 OK'\n}`

Obtengo lo siguiente en los registros de Cloudwatch:

h2 2021-01-10T18:48:47.956319Z app/api-dev/955d2b8cbf36b4d0 73.231.54.75:32892 - 0.005 0.029 0.000 502 - 19 594 "OBTENERhttps://api.dev.co:443/docsHTTP/2.0" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/87.0.4280.88 Safari/537.36" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing: us-west-2:025080367422:targetgroup/api-dev/106c350fe23bff29 "Root=1-5ffb4c0f-103216757067a60b58ecf857" "api.dev.co" "arn:aws:acm:us-west-2:025080367422:certificado /0a6623b2- 85e8-4d31-889e-9cc0354d74ec" 0 2021-01-10T18:48:47.921000Z "adelante" "-" "LambdaUnhandled" "-" "-" "-" "-"

AFAICT, estoy enviando la respuesta correcta, ¿no?


Según mi comentario a continuación, falla en un punto final que devuelve 'texto/html'. Y el punto final que devuelve 'aplicación/json' funciona; falla lo siguiente:

{\n statusCode: 200,\n body: 'AAABAAEAIB4AA[...]//8=',\n multiValueHeaders: {\n 'x-powered-by': [ 'Express' ],\n
'acceso- control-allow-origin': [ '*' ],\n 'aceptar-rangos': [ 'bytes' ],\n 'cache-control': [ 'público, edad máxima=0' ],\n
' última modificación': [ 'domingo, 10 de enero de 2021 18:57:00 GMT' ],\n etag: [ 'W/"fb6-176eda8a060"' ],\n 'tipo de contenido': [ 'image/x -icon' ],\n
'longitud del contenido': [ 4022 ]\n },\n isBase64Encoded: verdadero,\n statusDescription: '200 OK'\n}

Respuesta1

¿Se supone que la respuesta debe estar en formato JSON? Si ese es el caso, debes entrecomillar todos los nombres de los atributos, es decir, en lugar de...

{ statusCode: 200, body: 'Root...', ... }

debería ser:

{ "statusCode": 200, "body": "Root...", ... }

Respuesta2

¿Podría darse el caso de que la carga útil devuelta sea> 1 MB? "El objetivo es una función Lambda y el cuerpo de la respuesta supera 1 MB". ->https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html

Respuesta3

Bueno. Fijado. No estoy seguro de dónde estaba en el remolino cuando publiqué esta pregunta, pero se debió a un encabezado HTTP incorrecto. En realidad, parecía ser un encabezado no permitido (no está mal). Terminé rompiendo serverless-express y simplificándolo a lo siguiente:

https://gist.github.com/alsonkemp/cd133900bbc664095ee852cd20a5e9f5

No se pudo encontrar ninguna documentación sobre esto...

Ipensarfue el encabezado 'aceptar rangos' lo que lo estropeó.

información relacionada