Подтвердить что ты не робот

Aws-lambda Не удается найти модуль

Я продолжаю получать эту ошибку в консоли aws-lambda при загрузке кода из zip файла. Я попытался загрузить другие zip файлы, и они работают правильно. Файл .js называется "CreateThumbnail.js" в zip файле. Я считаю, что обработчик также правильно назван "CreateThumbnail.handler". также устанавливается подкаталог node_modules. У кого-нибудь есть идея?

{
  "errorMessage": "Cannot find module 'CreateThumbnail'",
  "errorType": "Error",
  "stackTrace": [
  "Function.Module._resolveFilename (module.js:338:15)",
  "Function.Module._load (module.js:280:25)",
  "Module.require (module.js:364:17)",
  "require (module.js:380:17)"
  ]
}
4b9b3361

Ответ 1

Как я мог заставить это работать:

  • Назовите файл export.js
  • Назовите обработчик в файле, export.handler
  • Установите обработчик в конфигурации ambda для export.handler
  • Закройте только содержимое папки, а не самой папки (как упоминалось выше) и переименуйте zip файл export.zip

Ответ 2

Хорошо, я сделал это сам, просто убедитесь, что вы делаете zip таким образом, чтобы файл .js не попадал в папку, поскольку AWS будет разархивировать загружаемый файл и пытается найти файл .js имя обработчика, которое вы дали, и если его внутри папки вам не поможет.

Ответ 3

Эта точная ошибка может появиться, если ваш zip файл не имеет разрешения на чтение по всему миру. (chmod -R ugo+r).

Проверьте права доступа к файлам до того, как они будут скопированы. Это не подчеркивается, к сожалению, AWS, и это вызвало много головных болей для многих.

Ответ 4

У меня была эта проблема на настраиваемом модуле, который я построил, который был в директории node_modules. Все прошло отлично в тестировании на моей машине Win10, но при загрузке я продолжал получать то же самое "Не могу найти ошибку модуля modulename".

Оказывается, у меня было несоответствие; здесь строка package.json из модуля не найдена:
"main": "./build/modulename.js",

и здесь фактическое имя файла:

Modulename.js

Чувствительный к регистру; Windows не является, Linux (и, следовательно, AWS).

Ответ 5

Некоторые файлы библиотеки могут не иметь глобального Read, поэтому lambda не сможет читать контент и создавать контент.

Убедитесь, что все файлы в node_modules доступны для чтения перед упаковкой:

chmod -R +r node_modules

Тогда архивируйте и загружайте.

Ответ 6

AWS Lambda использует имя файла и имя функции обработчика, поэтому, если вы определили свой обработчик следующим образом: exports.myHandler = function(event, context) в файле с именем index.js, ваш обработчик index.myHandler.

Ответ 7

Это оказалось для меня простым.

Я получаю, не могу создать индекс. в моем случае мой основной лямбда файл с export.handler in должен был называться index.js

Попробуйте вызвать основной файл CreateThumbnail.js

Ответ 8

Имя файла:
app.js
Функция лямбда в "app.js":
export.handler = function (событие, контекст)...
Лямбда-обработчик на консоли Amazon:
app.handler({app}.js + export. {handler} = app.handler)

При распаковке папки вы должны увидеть:
app.js
node_modules

Ответ 9

Учебник говорит вам включить следующие элементы в ваш zip файл:

CreateThumbnail.js
/Node_modules/г
/Node_modules/асинхронной

Что он не учитывает, так это то, что существуют зависимости двух пакетов (gm, async), которые также должны быть частью пакета.

Итак, что вы должны сделать:

  1. Перейдите в папку node_modules в папке вашего проекта и выполните команду " npm install gm async ". Это установит gm, async и все их зависимости в эту папку.
  2. Теперь упакуйте файл "CreateThumbnail.js" и полную папку "node_modules" в zip файл и загрузите его. Это должно работать сейчас.

Таким образом, ваш полный пакет должен выглядеть примерно так:

CreateThumbnail.js
/node_modules/.bin
/node_modules/array-parallel
/node_modules/array-series
/node_modules/async
/node_modules/cross-spawn
/node_modules/debug
/node_modules/gm
/node_modules/isexe
/node_modules/lodash
/node_modules/lru-cache
/node_modules/ms
/node_modules/pseudomap
/node_modules/which
/node_modules/yallist

Ответ 10

Это не связано, но Google привел меня сюда, так что:

AWS выдаст вам ошибку:

Unable to import module '<myfile>': Error

Что на самом деле происходило со мной, так это то, что требовался несуществующий файл JS. Ошибка немного вводит в заблуждение.

Ответ 11

Одной из возможных проблем является загрузка лямбды в виде zip файла, созданного с помощью PowerShell Compress-Archive. Compress-Archive есть ошибка, из-за которой AWS извлекает файлы в плоское дерево (без подкаталогов) с обратными слешами в именах файлов:

enter image description here

Ответ 12

Если вы используете AWS Lambda Layers, вам необходимо проверить, соответствует ли ваша структура каталогов структуре, необходимой для слоя:

Например, для модуля moment.js node.js вам нужна следующая структура:

aws-lambda-layer.zip
│ nodejs
│ nodejs/node_modules
└ nodejs/node_modules/moment

Таким образом, чтобы создать zip файл слоя с правильной структурой, мы можем использовать следующую команду в корне нашего проекта:

mkdir -p nodejs && cp -r node_modules nodejs/ && zip -r aws-lambda-layer.zip nodejs