Невозможно импортировать лямбда-функцию модуля обработчика модуля aws в nodejs
Я продолжаю получать эту ошибку, и я не знаю, что ее вызывает.
У меня API, который на основе условия будет публиковать в другом API, но я получаю эту ошибку в своем API-интерфейсе.
Вот код...
handler.js
'use strict';
const axios = require('axios');
module.exports.thumbnailWrapperAPI = (event, context, callback) => {
const incomingData = JSON.parse(event.body);
if(incomingData.source.includes('png') || incomingData.source.includes('jpg')){
const newLocal = 'some endpoint...';
// call image resizing API...
axios.post(newLocal,{
source: incomingData.source,
target: incomingData.target,
width: incomingData.width
})
.then(response => callback(null,response))
.catch(error => callback(error))
} else if(incomingData.source.includes('html')) {
// handle HTML
} else {
//...
};
};
serverless.yaml
service: thumbnailWrapperAPI
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
functions:
thumbnailWrapperAPI:
handler: handler.thumbnailWrapperAPI
events:
- http:
path: generatethumbnail/
method: post
cors: true
Любой совет будет принят во внимание.
СООБЩЕНИЕ ОБ ОШИБКЕ:
Unable to import module 'handler': 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/handler.js:2:15)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
1 ответ
Хорошо, я решил это, удалив мой package.json, затем добавив его снова и установив НЕ как dev-зависимости мои пакеты, и это сработало.
Сообщение об ошибке не слишком помогает, но я обнаружил, что это сообщение часто вызывается потерянным пакетом npm. Если вы протестируете лямбду в консоли AWS, вы сможете увидеть конкретные детали.
В моем случае оказалось, что я использовал как python, так и nodejs для своих лямбда-выражений, но не установил среду выполнения лямбда-функции nodejs как nodejs. Раньше мой serverless.yml выглядел примерно так:
provider:
name: aws
runtime: python3.7
stage: dev
region: eu-west-1
profile: my-profile
functions:
nodejs-func:
handler: nodejs_func.handler
events:
- websocket:
route: nodejs-func
python-func:
handler: python_func.handler
events:
- websocket:
route: python-func
Просто дайте среду выполнения для лямбда-выражения nodejs, чтобы решить эту проблему:
provider:
name: aws
runtime: python3.7
stage: dev
region: eu-west-1
profile: my-profile
functions:
nodejs-func:
handler: nodejs_func.handler
runtime: nodejs10.x # Provide the runtime environment for lambda func
events:
- websocket:
route: nodejs-func
python-func:
handler: python_func.handler
events:
- websocket:
route: python-func
Вы также получите эту ошибку, когда вам потребуется модуль или файл, используя неверный путь. Другими словами, требуется модуль / файл, который не существует.
Это может быть пользовательский модуль или npm.
Пожалуйста, проверьте все пути импорта вашего модуля и убедитесь, что они точные.