AWS ALB->Lambda 502

AWS ALB->Lambda 502

Ich habe überall gesucht, aber nicht viel darüber gefunden. Die Dokumentation/Debugging-Funktionen von ALB scheinen ziemlich dürftig zu sein ...

Ich bekomme 502s von ALB aus Gründen, die ich nicht erkennen kann. Ich habe ein ALB mit einem Lambda-Ziel. Mein Lambda sendet dies an das ALB:

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

Ich erhalte Folgendes in den Cloudwatch-Protokollen:

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 (KHTML, wie 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 "weiter" "-" "LambdaUnhandled" "-" "-" "-" "-"

Soweit ich weiß, sende ich die richtige Antwort, oder?


Gemäß meinem Kommentar unten schlägt dies an einem Endpunkt fehl, der „text/html“ zurückgibt. Und ein Endpunkt, der „application/json“ zurückgibt, funktioniert; Folgendes schlägt fehl:

{\n statusCode: 200,\n body: ‚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‘: [ ‚Sonntag, 10. Januar 2021 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}

Antwort1

Soll die Antwort im JSON-Format vorliegen? In diesem Fall müssen Sie alle Attributnamen in doppelte Anführungszeichen setzen, also statt ...

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

es sollte sein:

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

Antwort2

Könnte es sein, dass die zurückgegebene Nutzlast > 1 MB ist? „Das Ziel ist eine Lambda-Funktion und der Antworttext überschreitet 1 MB.“ ->https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html

Antwort3

Okay. Behoben. Ich bin mir nicht sicher, wo ich in dem Wirbel war, als ich diese Frage stellte, aber es lief auf einen fehlerhaften HTTP-Header hinaus. Tatsächlich sah es aus wie ein nicht erlaubter (aber kein fehlerhafter) Header. Ich habe schließlich serverless-express auseinandergenommen und es wie folgt vereinfacht:

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

Konnte keine Dokumentation dazu finden ...

ICHdenkenes war der Header „accept-ranges“, der das Problem verursacht hat.

verwandte Informationen