0

I am writing a code which requires csv-parse on lambda. Runtime is node 12.x.

I installed following modules via npm 6.14.10 (node v12.20.1)

{
  "name": "data_analysis_node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.1282.0",
    "csv-parse": "^5.3.3",
    "fs": "0.0.1-security"
  }
}

Then I zipped a node_modules directory, upload it, attached it to a layer, applyed the layer to the function and wrote a following code.

index.js

const AWS = require('aws-sdk');
const parse = require('csv-parse/lib/sync'); 
const fs = require('fs');

exports.handler = async (event) => {
    console.log('fine')
};

but it has not been working and showing following errors.

2022-12-26T14:28:45.472Z    undefined   ERROR   Uncaught Exception  {
"errorType":"Runtime.ImportModuleError"
,"errorMessage":"Error: Cannot find module 'csv-parse/lib/sync'\nRequire 
stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js","stack":["Runtime.ImportModuleError: Error: Cannot find module 'csv-parse/lib/sync'","Require stack:","- /var/task/index.js","- /var/runtime/UserFunction.js","- 
/var/runtime/index.js","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:43:30)","    at Module._compile (internal/modules/cjs/loader.js:999:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)","    at Module.load (internal/modules/cjs/loader.js:863:32)","    at Function.Module._load (internal/modules/cjs/loader.js:708:14)","    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)","    at internal/main/run_main_module.js:17:47"]}

I re-checked the inside the node_modules, and I confirmed the path to csv-parse is correct.

enter image description here

I also commented out the line imports csv-parse, and it didn't output any errors and seemed importing other modules fine.

const AWS = require('aws-sdk');
//const parse = require('csv-parse/lib/sync'); 
const fs = require('fs');

exports.handler = async (event) => {
    console.log('fine')
};

I have been stacked 3 to 4 hours, so any suggestion are helpful.

2 Answers 2

1

When creating a Lambda layer for NodeJS, structure in your zip file should be nodejs/node_modules/ and not just node_modules/ Optionally, for multiple versions, you can put nodejs/nodeXY/node_modules/ You can read more about Lambda layers in the documentation

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for your suggestion! I tried your suggestion but it did not fix the problem...
0

Would something like this work?

const csvParse = require('csv-parse');
// do whatever with csvParse

It may be that there is a naming collision with the csv-parse API

EDIT

According to the docs you need to require the parse module from csv-parse/sync, not csv-parse/lib/sync

The following should work:

const parse = require('csv-parse/sync');

I received the same error you did when requiring from csv-parse/lib/sync and it worked fine when required from csv-parse/sync

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.