Невозможно загрузить зависимости npm на лямбда-слой AWS - PullRequest
0 голосов
/ 02 мая 2019

У меня есть файл .zip, который содержит node_modules и папки utils,
Я загружаю .zip на AWS Lambda Layer, но не могу получить все зависимости от функции AWS Lambda,

Я полагаю, что проблемы могут быть связаны с package.json, но
Я попытался удалить node_modules, package-lock.json и переустановить зависимости с помощью команды npm install.
Кажется, что зависимости загружаются на локальном компьютере, но когда я загружаю их на слои, они просто исчезают.

Корневая папка - enter image description here

Подкаталоги в папке слоев - enter image description here

node_modules - enter image description here

package.json-

{
  "name": "serverless-currency",
  "version": "1.0.0",
  "description": "Lambda APIs for G2G Currency Module",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "debug": "SLS_DEBUG=* sls offline start"
  },
  "author": "Aniruddha Raje",
  "license": "ISC",
  "dependencies": {
    "async": "^2.6.2",
    "aws-sdk": "^2.447.0",
    "axios": "^0.18.0",
    "cryptr": "^4.0.2",
    "jsonwebtoken": "^8.5.1",
    "moment": "^2.24.0",
    "serverless-offline": "^4.9.4",
    "util": "^0.12.0"
  }
}

Лямбда-код AWS -

var fs = require('fs');
var async = require('async');

exports.handler = async (event) => {

    const testFolder = '/opt/layer/node_modules';

    fs.readdirSync(testFolder).forEach(file => {
  console.log(file);
});
};

Лямбда-ошибка -

{
  "errorMessage": "Cannot find module 'async'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:474:25)",
    "Module.require (module.js:596:17)",
    "require (internal/module.js:11:18)",
    "Object.<anonymous> (/var/task/index.js:2:13)",
    "Module._compile (module.js:652:30)",
    "Object.Module._extensions..js (module.js:663:10)",
    "Module.load (module.js:565:32)",
    "tryModuleLoad (module.js:505:12)",
    "Function.Module._load (module.js:497:3)"
  ]
}

Ссылка -
https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e

Обязательно ли указывать корневую папку как nodejs, чтобы к библиотекам node_module можно было напрямую обращаться с помощью let async = require('async') import,
Так что в коде не нужно указывать путь / opt / node_modules / async?
Код выполнялся без ошибок при указании абсолютного пути.

1 Ответ

0 голосов
/ 02 мая 2019

Вы не правы в своей структуре каталогов.В официальном документе ( здесь ) вам нужен каталог со структурой, такой как layer/nodejs/node_modules, имя каталога nodejs не является случайным и должно быть nodejs

layer
|
|__nodejs
     |
     |__node_modules
            |
            |__node_module1
            |
            |__async

Сейчасвам нужно сжать каталог nodejs до nodejs.zip (или что угодно, что вам нужно) и использовать этот файл для создания вашего слоя.

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