【问题标题】:AWS Lambda :: How to test my code on my local ubuntu machine?AWS Lambda :: 如何在我的本地 ubuntu 机器上测试我的代码?
【发布时间】:2019-03-06 09:59:04
【问题描述】:

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

Lambda 还将发送一封 SES 电子邮件。有没有办法可以在我的本地 Ubuntu 上进行测试,而不是总是使用 AWS Web 控制台? 任何帮助表示赞赏。

这是我的 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);
        });


    };

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 大多数人是如何开发 Lambda 的?他们是否使用 AWS Web 控制台?还是他们使用无服务器?我只是想知道每个人是怎么做到的。我发现在普通的 AWS Web 控制台上开发很容易进行测试等。唯一的问题是我不知道如何管理我的代码/版本的 lambda。
  • 无服务器框架非常适合开发基于 aws lambda 的生产项目。
  • 我也喜欢无服务器。如果你有SLS的经验,能否举一个使用sls的“SQS触发Lambda”开发和部署的例子?我一直坚持部署到不同的环境(staging 和 prod)以及环境变量,并模拟 Lambda 的 SQS 触发
【解决方案2】:

您一定要看看 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 工具在本地运行函数时设置的环境变量。

祝你好运!

【讨论】:

  • 您好,非常感谢您的回答。我在我的 ubuntu 上安装了 SAM。在这个命令中,sam local invoke --event event.json,你能给我内容 event.json 吗?
  • 理论上你可以放置任何有效的 json 对象。如果您的函数部署在 API 网关之后,那么您将需要具有本教程中所述的特殊格式 docs.aws.amazon.com/apigateway/latest/developerguide/…
  • 感谢您的回复。现在我意识到我应该使用无服务器平台来开发和部署:)。尝试在本地调试时,我现在面临另一个错误。它说“”对于调试日志,设置“SLS_DEBUG=*”环境变量后再次运行。“”不确定在哪里设置。我现在有一个由“$serverless create -t​​ aws-nodejs”创建的 serverless.yml
  • 你知道我的本地SAM上可以执行多少AWS服务吗?
  • 如果您有一个模板文件,该文件使用 API 网关定义了多个 lambda,您可以执行“sam local start-api”,这将显示您的所有功能
猜你喜欢
  • 2018-06-27
  • 2016-02-26
  • 1970-01-01
  • 2020-08-10
  • 2017-01-26
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多