AWS ALB->람다 502

AWS ALB->람다 502

나는 온통 살펴봤지만 이것에 대해 많은 것을 발견하지 못했습니다. ALB의 문서/디버깅은 꽤 형편없어 보입니다...

알 수 없는 이유로 ALB로부터 502를 받고 있습니다. Lambda 대상이 있는 ALB가 있습니다. 내 Lambda는 이를 ALB로 보냅니다.

{\n statusCode: 200,\n 본문: '루트...',\n multiValueHeaders: {\n
'x-powered-by': [ 'Express' ],\n 'access-control-allow-origin' : [ '*' ],\n '콘텐츠 유형': [ 'text/html; charset=utf-8' ],\n
'content-length': [ '7' ],\n etag: [ 'W/"7-bEyWHAj7Nx3j68RN5+dEhPIpvp0"' ]\n },\n isBase64Encoded: false,\ n 상태설명: '200 OK'\n}`

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 "GEThttps://api.dev.co:443/docsHTTP/2.0" "Mozilla/5.0(X11; Linux x86_64) AppleWebKit/537.36(Gecko와 같은 KHTML) 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/0a662 3b2- 85e8-4d31-889e-9cc0354d74ec" 0 2021-01-10T18:48:47.921000Z "전달" "-" "LambdaUnhandled" "-" "-" "-" "-"

AFAICT, 제가 올바른 응답을 보내고 있는 거죠, 그렇죠?


아래 내 의견에 따르면 'text/html'을 반환하는 끝점에서는 실패합니다. 그리고 'application/json'을 반환하는 엔드포인트가 작동합니다. 다음은 실패합니다.

{\n statusCode: 200,\n 본문: 'AAABAAEAIB4AA[...]//8=',\n multiValueHeaders: {\n 'x-powered-by': [ 'Express' ],\n
'access- control-allow-origin': [ '*' ],\n 'accept-ranges': [ 'bytes' ],\n 'cache-control': [ 'public, max-age=0' ],\n
' last-modified': [ '일, 2021년 1월 10일 18:57:00 GMT' ],\n etag: [ 'W/"fb6-176eda8a060"' ],\n 'content-type': [ 'image/x -icon' ],\n
'content-length': [ 4022 ]\n },\n isBase64Encoded: true,\n statusDescription: '200 OK'\n}

답변1

응답은 JSON 형식이어야 합니까? 그런 경우에는 모든 속성 이름을 큰따옴표로 묶어야 합니다. 즉...

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

그것은해야한다:

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

답변2

반환된 페이로드가 1MB를 초과하는 경우가 있을 수 있나요? "대상은 Lambda 함수이고 응답 본문이 1MB를 초과합니다." ->https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html

답변3

좋아요. 결정된. 이 질문을 게시했을 때 내가 소용돌이 속에서 어디에 있었는지 잘 모르겠지만 잘못된 HTTP 헤더로 귀결되었습니다. 실제로는 허용되지 않는(나쁜 것이 아닌) 헤더인 것처럼 보였습니다. 저는 Serverless-Express를 해체하고 다음과 같이 단순화했습니다.

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

이에 대한 문서를 찾을 수 없습니다 ...

생각하다그것을 지루하게 만든 것은 'accept-ranges' 헤더였습니다.

관련 정보