Какие модули NPM предустановлены в среде выполнения AWS Lambda? - PullRequest
0 голосов
/ 01 декабря 2018

Недавно я обнаружил, что aws-sdk модуль NPM предустановлен в AWS Lambda nodejs8.10.И я не могу найти в Интернете никакой информации об этом.

Какие другие модули node.js предустановлены в AWS Lambda?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Я использовал пакеты «https» и «url», так что, по крайней мере, они предустановлены.Существует довольно много стандартных модулей node.js, которым требуется собственный уровень.

Очевидно, что здесь есть модули AWS для связи со службами AWS.Я использовал SQS, например.

Еще не пробовал "fs", но так как он требует нативный слой, и это то, что вы можете захотеть сделать (например, сохранить материал в / tmp), я 'м, если он там есть.

Где-то должен быть список.Но я не могу найти один.Полагаю, вам просто нужно попробовать, и если требует сбоев, вам нужно поместить модуль в node_modules, а затем посмотреть, требует ли он зависимостей.

0 голосов
/ 18 июля 2019

Мне не удалось найти официальный список, поэтому я написал скрипт для создания списка.В настоящее время это (исключая встроенные модули nodejs, которые, конечно же, также доступны):

'awslambda',
'aws-sdk',
'base64-js',
'dynamodb-doc',
'ieee754',
'imagemagick',
'isarray',
'jmespath',
'lodash',
'sax',
'uuid',
'xml2js',
'xmlbuilder'

Код для создания этого списка:

function flatten(arrayOfArrays) {
    return Array.prototype.concat.apply([], arrayOfArrays)
}

function onlyUnique(value, index, self) {
    return self.indexOf(value) === index;
}

function extPackageNames(node) {
    if (!node.children) return [];
    const arrayOfArrays = node.children.map(c => [c.name].concat(extPackageNames(c)))
    const result = flatten(arrayOfArrays)
    return result
}

exports.handler = async (event) => {
    const rpt = require("read-package-tree")
    const module = require("module")

    const pathArg = process.env.NODE_PATH
    const allPaths = pathArg.split(":")

    // '/var/task' is this package on lambda
    const externalPaths = allPaths.filter(p => p !== "/var/task")

    // read all package data
    const ps = externalPaths.map((path) => rpt(path).catch(err => err))
    const rpts = await Promise.all(ps).catch(err => err)

    // extract the information we need
    const packagesPerPath = rpts.map(extPackageNames)
    const countPerPath = packagesPerPath.map(arr => arr.length)
    const packages = flatten(packagesPerPath)

    // remove duplicates
    const uniquePackages = packages.filter(onlyUnique)

    // remove node.js built-in modules
    const uniqueCustomPackages = uniquePackages.filter(p => !module.builtinModules.includes(p))

    const result = {
        node_path: pathArg,
        paths: externalPaths.map((e, i) => [e, countPerPath[i]]),
        uniqueCustomPackages
    }

    console.log(result)

    const response = {
        statusCode: 200,
        body: JSON.stringify(result)
    };
    return response;
};

Для запуска этого на lambda вам понадобитсясжать его вместе с папкой node_modules, содержащей read-package-tree.

0 голосов
/ 01 декабря 2018

Предустановлен только пакет aws-sdk.

Все остальное загружается из каталога "node_modules" ..

Вы можете найти информацию об этом здесь:

https://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

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