AWS Lambda event.body parsing error in production

1k views Asked by At

I am using https://github.com/ARautio/aws-lambda-pdf-generator-puppeteer to create pdfs serverlessly. I have made some changes to get html to process as POST data.

I ran command: yarn deploy:prod to deploy it on aws lambda.

After deploying, when i tried to hit the server, it gave me 500 error.

Code:

  console.log("Data", event.body)
  const { apiKey = '', html = '', pageConfig = {}, name, customPageConfig = false } = JSON.parse(event.body)

On local, it's working fine, but when I deploy it, it is showing me error:

Data eyJhcGlLZXkiOiAiYXNkc2FkYXNkZWVycnJycnIiLCAiaHRtbCI6ICJcbjxodG1sPjxoZWFkPjxzdHlsZT5cbiAgIC5wYWdlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcbiAgICB9XG5cblxuICAgIEBwYWdlIHtcbiAgICAgIFxuICAgICAgQHRvcC1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChoZWFkZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgICAgQGJvdHRvbS1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChmb290ZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgIH1cbiAgIFxuICBcbiAgIFxuICBcbiAgIFxuICAuYmlzaHVMaW5lIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgIFxuICBcbiAgIFxuICAgIC5oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoaGVhZGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIFxuICAgXG4gICAgLmNvbmRpdGlvbmFsIHtcbiAgICAgICAgZGlzcGxheSA6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgIFxuICBcbiAgIFxuICAuaW5zZXJ0ZWQtaW1hZ2V7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG4gICBcblxuICAgIC5mb290ZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoZm9vdGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgXG4gICAgICAgICAgICAucGFnZWYxM2ExY2E4OTA2NTRhYzY5MTg1NDM3YTgzNWIxMWM0eyAgXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTBpbjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87IFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgPC9zdHlsZT48L2hlYWQ==

Logs from production server:

2020-07-06T10:28:03.350Z    d1c38673-19f0-47ef-a748-cf8912e9cc82    INFO    
03:58:03 pm
2020-07-06T10:28:03.352Z    d1c38673-19f0-47ef-a748-cf8912e9cc82    ERROR   SyntaxError: Unexpected token e in JSON at position 0
    at JSON.parse (<anonymous>)
    at module.exports.pdf (/var/task/pdf.js:17:92)
    at Runtime.handler (/var/task/serverless_sdk/index.js:9:131855)
    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)
03:58:03 pm
2020-07-06T10:28:03.410Z    d1c38673-19f0-47ef-a748-cf8912e9cc82    ERROR   Invoke Error    {
    "errorType": "SyntaxError",
    "errorMessage": "Unexpected token e in JSON at position 0",
    "stack": [
        "SyntaxError: Unexpected token e in JSON at position 0",
        "    at JSON.parse (<anonymous>)",
        "    at module.exports.pdf (/var/task/pdf.js:17:92)",
        "    at Runtime.handler (/var/task/serverless_sdk/index.js:9:131855)",
        "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
    ]
}
03:58:03 pm

I am sending:

 {
   "apiKey": "asd",
   "html": "<h1>Hello</h1>",
   "pageConfig": {
      "size": "A4"
    }
 }
2

There are 2 answers

0
Chris Williams On BEST ANSWER

The payload you are parsing is base64 encoded.

Looks like you would need to decode it first before you can access it.

Ideally you should use base 64 encoded content in both environments, however if you want to control logic based on environment then use Lambda Environment Variables.

3
Marcin On

If you decode your payload (base64):

base64 -d <<< eyJhcGlLZXkiOiAiYXNkc2FkYXNkZWVycnJycnIiLCAiaHRtbCI6ICJcbjxodG1sPjxoZWFkPjxzdHlsZT5cbiAgIC5wYWdlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcbiAgICB9XG5cblxuICAgIEBwYWdlIHtcbiAgICAgIFxuICAgICAgQHRvcC1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChoZWFkZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgICAgQGJvdHRvbS1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChmb290ZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgIH1cbiAgIFxuICBcbiAgIFxuICBcbiAgIFxuICAuYmlzaHVMaW5lIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgIFxuICBcbiAgIFxuICAgIC5oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoaGVhZGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIFxuICAgXG4gICAgLmNvbmRpdGlvbmFsIHtcbiAgICAgICAgZGlzcGxheSA6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgIFxuICBcbiAgIFxuICAuaW5zZXJ0ZWQtaW1hZ2V7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG4gICBcblxuICAgIC5mb290ZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoZm9vdGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgXG4gICAgICAgICAgICAucGFnZWYxM2ExY2E4OTA2NTRhYzY5MTg1NDM3YTgzNWIxMWM0eyAgXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTBpbjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87IFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgPC9zdHlsZT48L2hlYWQ==

you will get:

{"apiKey": "asdsadasdeerrrrrr", "html": "\n<html><head><style>\n   .page {\n      position: relative;\n      page-break-after: always;\n    }\n\n\n    @page {\n      \n      @top-left {\n        content: element(headerRunning);\n      }\n\n      @bottom-left {\n        content: element(footerRunning);\n      }\n\n    }\n   \n  \n   \n  \n   \n  .bishuLine {\n    margin: 0;\n  }\n   \n  \n   \n    .header {\n      position: running(headerRunning);\n      width: 100%;\n    }\n  \n   \n    .conditional {\n        display : inline-block;\n    }\n\n   \n  \n   \n  .inserted-image{\n    display: inline-block;\n    max-width: 100%;\n    max-height: 100%;\n  }\n   \n\n    .footer {\n      position: running(footerRunning);\n      width: 100%;\n    }\n\n  \n            .pagef13a1ca890654ac69185437a835b11c4{  \n                min-height: 10in;\n                position: relative;\n                background-size: 100% auto; \n                background-image: none;\n                background-repeat: repeat;\n            \n          }\n        </style></headbase64: invalid input

So probably have to look at decoding it to use it in your function.