Ошибка лямбда-функции AWS - невозможно импортировать модуль 'index': ошибка - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь создать лямбду в nodejs.Следуя документации, я создал zip-файл с лямбда-функцией, node_modules и package.json.Структура моего лямбда-zip-файла выглядит следующим образом:

my-lambda-function/
|
|---util/
|     |
|     |--util-1.js
|     |--util-2.js
|---api/
|     |
|     |--api-call-1.js
|     |--api-call-2.js    
|
|---config
|     |
|     |--env/
|     | |--env-file-1.js
|     |
|     |--config-file-1.js
|     |--config-file-2.js
|
|---node_modules/
|     |
|     |--module-1/
|     |--module-2/
|---index.js
|---package.json

Для создания этого zip-файла я использую задание gulp,

gulp.task('zip', ['test'], () => {
 const buildArtifact = ['index.js', 'package.json', 'util/**', 
 'config/**', 'api/**'];
 Object.keys(pjson.dependencies).forEach((dep) => {
  buildArtifact.push(`node_modules/${dep}/**/*`);
 });
 const zipFile = `${pjson.name}.zip`;
 return gulp.src(buildArtifact, { base: '.' })
   .pipe(zip(zipFile))
   .pipe(gulp.dest('build'));
});

Эта лямбда работает локально с lambda-местный.Но во время тестирования эта лямбда выдает ошибку

Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/var/task/node_modules/ioredis/built/utils/lodash.js:2:19)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)

Текущая ошибка указывает на модуль ioredis (который доступен в папке node_modues), но если я уберу использование ioredis из кода (удалив импорт дляioredis) затем ошибка изменится на другой узел модуля.

Кажется, моя лямбда-функция не может загрузить / найти node_modules.Это из-за того, что лямбда не может установить npm?

Любые указатели, которые помогут решить эту проблему, будут полезны, так как мы боремся с этим в течение нескольких дней

Спасибо

Подробнее

  1. Мы можем воспроизвести ошибку, удалив папку node_modules и затем запустив лямбду локально
  2. Если я удалю все мои зависимости, будет работать тривиальный оператор ведения журнала.
  3. Лямбда использует узел 8.10 в aws

Ответ (@Kannaiyan)

Изменение задания zip на:

gulp.task('npm-install', () => gulp.src('./package.json')
  .pipe(gulp.dest('build/'))
  .pipe(install({ production: true })));

работает для меня.

1 Ответ

0 голосов
/ 12 сентября 2018

Невозможно импортировать модуль 'index': Ошибка

Похоже, что некоторые ваши зависимости установлены / не упакованы правильно.Удалите каталог node_modules и переустановите модуль с помощью npm install, чтобы устранить проблему.

Убедитесь, что ваша функция упакована, как указано в документе https://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

Если ваш пакет пропустилnode_module, то это приведет к этой ошибке.

EDIT1:

У вас проблема с упаковкой gulp.

В следующем примере завершеноДокументация для упаковки лямбда с глотком.

https://medium.com/@AdamRNeary/a-gulp-workflow-for-amazon-lambda-61c2afd723b6

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...