最近,我发现aws-sdk
NPM模块已预先安装在AWS Lambda nodejs8.10中。而且我在互联网上找不到任何有关它的信息。
AWS Lambda中还预安装了哪些其他node.js模块?
答案 0 :(得分:3)
仅预安装了aws-sdk软件包。
其余所有内容都从“ node_modules”目录中加载。
您可以在此处找到有关它的信息:
https://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html
答案 1 :(得分:1)
我使用了“ https”和“ url”软件包,因此至少已预先安装了这些软件包。有很多标准的node.js模块需要一个本机层。
很明显,AWS模块在其中,用于与AWS服务进行通信。例如,我使用过SQS。
还没有尝试过“ fs”,但是由于它需要一个本机层,因此您可能想要做一些事情(例如,将内容持久保存到/ tmp)。
应该有一个清单。但是我找不到。猜猜您只需要尝试,如果 requires 失败,则需要在node_modules中放置一个模块,然后查看它是否需要依赖项。
答案 2 :(得分:-1)
我找不到正式名单,所以写了一个脚本来创建名单。 当前这些(不包括内置的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
的{{1}}文件夹一起压缩。