AWS Lambda ::如何在本地ubuntu计算机上测试我的代码?

时间:2018-10-01 09:56:24

标签: node.js amazon-web-services aws-lambda amazon-ses

我有此Lambda函数代码,由SQS调用。 SQS触发我的Lambda函数(在nodeJS中)。

Lambda还将发送SES电子邮件。有没有一种方法可以在本地Ubuntu上进行测试,而不是始终使用AWS Web Console? 任何帮助表示赞赏。

这是我的Lambda NodeJS代码:此代码仅适用于AWS Lambda。当我跑步 $ node index.js,它不会发送SES电子邮件。

    var aws = require("aws-sdk");
    var nodemailer = require("nodemailer");

    aws.config.loadFromPath('aws_config.json');


    var ses = new aws.SES();
    var s3 = new aws.S3();

    // Set the region
    aws.config.update({region: 'us-west-2'});

    exports.handler = function (event, context, callback) {
            const response = {
            statusCode: 200,
            body: JSON.stringify({
                message: 'SQS event processed.',
                input: event,
            }),
        };

        console.log('event: ', JSON.stringify(event.Records));
        result = JSON.stringify(event.Records)
        result = result.replace(/(^\[)/, '');
        result =  result.replace(/(\]$)/, '');    
        var resultObj = JSON.parse(result);
        var idCustomer = resultObj.body;


        console.log('===SENDING EMAIL====');

    // Create sendEmail paramssd
    var params = {
        Destination: {
            /* required */
            CcAddresses: [
                'XXXXX@gmail.com',
                /* more items */
            ]
        },
        Message: {
            /* required s*/ 
            Body: {
                /* required */
                Html: {
                    Charset: "UTF-8",
                    Data: "BODY:" 
                },
                Text: {
                    Charset: "UTF-8",
                    Data: "TEXT_FORMAT_BODY"
                }
            },
            Subject: {
                Charset: 'UTF-8',
                Data: idCustomer
            }
        },
        Source: 'xxxx@eeeee.com', /* required */
        ReplyToAddresses: [
            'wwwwww@wwwwwwwww.com',
            /* more items */
        ],
    };

        // Create the promise and SES service object
        var sendPromise = new aws.SES({apiVersion: '2010-12-01'}).sendEmail(params).promise();

    // Handle promise's fulfilled/rejected states s
    sendPromise.then(
        function (data) {
            console.log("Successfully sent using SES");
            console.log(data.MessageId);
        }).catch(
        function (err) {
            console.log("An Error occured while senting using using SES");
            console.error(err, err.stack);
        });


    };

2 个答案:

答案 0 :(得分:1)

您应该彻底了解SAM LOCAL。它是由AWS团队开发的专门用于测试lambda的工具。

https://github.com/awslabs/aws-sam-cli

  

从以下版本的当前快照发布函数的版本   $最新。也就是说,AWS Lambda拍摄功能代码的快照,然后   $ LATEST中的配置信息并发布新版本。   发布后无法修改代码和配置。对于   有关版本控制功能的信息,请参见

易于使用,只需键入

sam local invoke --event event.json 

在后台,它将为您的lambda运行一个docker cotnainer并将其命名。

关于您的SES,您应该在代码中放置一个小的if(SAM_LOCAL)条件,并且仅当不在本地模式下时才调用实数。请注意,在本地运行函数时,SAM_LOCAL是SAM LOCAL工具设置的环境变量。

祝你好运!

答案 1 :(得分:0)

如果您想使用aws作为后端-无服务器框架可能就是您想要的https://serverless.com/如果要测试代码而不在aws后端上执行lambda,请查看localastack框架https://github.com/localstack/localstack