web-dev-qa-db-ja.com

AWS Lambda実行環境にプリインストールされているNPMモジュールはどれですか?

最近aws-sdk NPMモジュールはAWS Lambda nodejs8.10にプリインストールされています。そして、私はそれについてインターネットでどんな情報も見つけることができません。

AWS Lambdaにプリインストールされている他のnode.jsモジュールはどれですか?

8
Vasyl Boroviak

Aws-sdkパッケージのみがプリインストールされています。

残りはすべて「node_modules」ディレクトリからロードされます。

あなたはそれについてここで情報を見つけることができます:

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

8
Mazki516

私は「https」と「url」パッケージを使用したので、少なくともそれらはプリインストールされています。ネイティブレイヤーを必要とするかなりの数の標準node.jsモジュールがあります。

AWSサービスと通信するために、明らかにAWSモジュールがそこにあります。たとえば、SQSを使用しました。

「fs」をまだ試していませんが、ネイティブレイヤーが必要であり、実行したい場合があるため(たとえば、/ tmpに永続化する)、そこにあると想定しています。

どこかにリストがあるはずです。しかし、私はそれを見つけることができません。試してみなければならないことを推測し、requiresが失敗した場合は、node_modulesにモジュールを配置し、依存関係が必要かどうかを確認してください。

3
Cobalt Chicken

公式リストが見つからなかったので、リストを作成するスクリプトを作成しました。現在これらは(もちろん利用可能な組み込みの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;
};

これをラムダで実行するには、node_modulesを含むread-package-treeフォルダーと一緒にZipする必要があります。

1
spmdc