AWS ALB->Lambda 502

AWS ALB->Lambda 502

Procurei por tudo, mas não encontrei muito sobre isso. A documentação/depuração no ALB parece muito pobre...

Estou recebendo 502 da ALB por motivos que não consigo discernir. Eu tenho um ALB com alvo Lambda. Meu Lambda envia isso para o ALB:

{\n statusCode: 200,\n corpo: 'Root...',\n multiValueHeaders: {\n
'x-powered-by': [ 'Express' ],\n 'access-control-allow-origin' : [ '*' ],\n 'tipo de conteúdo': [ 'texto/html; charset=utf-8' ],\n
'comprimento do conteúdo': [ '7' ],\n etag: [ 'W/"7-bEyWHAj7Nx3j68RN5+dEhPIpvp0"' ]\n },\n isBase64Encoded: false,\ n statusDescrição: '200 OK'\n}`

Recebo o seguinte nos logs do 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 "OBTERhttps://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:certificate/ 0a6623b2- 85e8-4d31-889e-9cc0354d74ec" 0 2021-01-10T18:48:47.921000Z "encaminhar" "-" "LambdaUnhandled" "-" "-" "-" "-"

AFAICT, estou enviando a resposta correta, não?


De acordo com meu comentário abaixo, falha em um endpoint que retorna 'text/html'. E o endpoint que retorna 'application/json' funciona; o seguinte falha:

{\n statusCode: 200,\n corpo: 'AAABAAEAIB4AA[...]//8=',\n multiValueHeaders: {\n 'x-powered-by': [ 'Express' ],\n
'acesso- control-allow-origin': [ '*' ],\n 'accept-ranges': [ 'bytes' ],\n 'cache-control': [ 'public, max-age=0' ],\n
' última modificação': [ 'Dom, 10 de janeiro de 2021 18:57:00 GMT' ],\n etag: [ 'W/"fb6-176eda8a060"' ],\n 'tipo de conteúdo': [ 'imagem/x -icon' ],\n
'comprimento do conteúdo': [ 4022 ]\n },\n isBase64Encoded: true,\n statusDescription: '200 OK'\n}

Responder1

A resposta deveria estar no formato JSON? Se for esse o caso, você deve colocar aspas duplas em todos os nomes de atributos, ou seja, em vez de...

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

deveria ser:

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

Responder2

Será que a carga retornada é> 1 MB? "O destino é uma função Lambda e o corpo da resposta excede 1 MB." ->https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html

Responder3

OK. Fixo. Não tenho certeza de onde eu estava quando postei esta pergunta, mas ela se resumia a um cabeçalho HTTP incorreto. Na verdade, parecia ser um cabeçalho não permitido (nada ruim). Acabei rasgando o serverless-express e simplificando-o para o seguinte:

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

Não foi possível encontrar nenhuma documentação sobre isso ...

EUpensarfoi o cabeçalho 'accept-ranges' que funcionou.

informação relacionada