如何在aws lambda函数中添加外部模块?

时间:2017-03-23 07:35:06

标签: amazon-web-services aws-lambda

我创建了一个AWS Lambda函数,将putItem放在带有API网关的dynamoDB表中。

在lambda函数中,我添加了一个用于创建userId的模块 UUID。我使用内联代码创建了Lambda函数。

现在我的问题是我收到了错误,"无法找到模块' uuid'"

因为它是一个外部模块。 所以,任何人都可以帮我解决这个问题。 我如何在lambda函数中添加此模块并使用它?

以下是我的lambda函数 -

'use strict';
const uuid = require('uuid');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();

exports.handler = function(event, context) {

    var tableName = "SiplAwsAPI_users";
    var datetime = new Date().getTime().toString();

    dynamodb.putItem({
        "TableName": tableName,
        "Item": {
            "userId": {"S": uuid.v1()}, 
            "timedate": {"S": datetime},
            "userName": {"S": event.userName},
            "userPassword": {"S": event.userPassword},
        }
    }, function(err, data) {
        if (err) {
            var response= {"response":"false",                                                        "message":JSON.stringify(err.message, null, '  '),"data":JSON.stringify(err.statusCode, null, '  ')};
            context.succeed(response);
        } else {
            //console.log('Dynamo Success: ' + JSON.stringify(data, null, '  '));
            var response= {"response":"true", "message":"Register Successfully","data":JSON.stringify(data, null, '  ')};
            context.succeed(response);
        }
    });

}

这是错误 -

{
"errorMessage": "Cannot find module 'uuid'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:276:25)",
"Module.require (module.js:353:17)",
"require (internal/module.js:12:17)",
"Object.<anonymous> (/var/task/index.js:3:14)",
"Module._compile (module.js:409:26)",
"Object.Module._extensions..js (module.js:416:10)",
"Module.load (module.js:343:32)",
"Function.Module._load (module.js:300:12)",
"Module.require (module.js:353:17)"
]
}

3 个答案:

答案 0 :(得分:2)

要包含NPM依赖项,您需要使用上传功能。为此,您需要创建一个目录并使用所有依赖项对其进行压缩。

要简化devOps的此过程,您可以考虑使用serverless framework

答案 1 :(得分:1)

上面的代码可以在Node.js 8.10中工作,而无需上传模块。

const uuidv4 = require('uuid/v4');
var userId = uuidv4();

答案 2 :(得分:0)

如果您的AWS Lambda运行时设置为Node.js 6.10,则无需上载.zip即可加载uuid模块。如果你的运行时是Node.js 4.3,你必须在你的zip中捆绑uuid并上传。