AWS Lambda :: Как проверить мой код на моей локальной машине с Ubuntu? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть этот лямбда-код функции, который вызывается SQS.SQS запускает мою функцию Lambda (в nodeJS).

Lambda также отправляет электронное письмо SES.Есть ли способ проверить это на моей локальной Ubuntu, а не использовать веб-консоль AWS?Любая помощь приветствуется.

Вот мой код 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 голосов
/ 01 октября 2018

Если вы хотите использовать aws в качестве бэкэнда - возможно, вам нужен безсерверный фреймворк https://serverless.com/ Если вы хотите протестировать свой код без выполнения лямбды в бэкэнде aws, взгляните на localastack framework https://github.com/localstack/localstack

0 голосов
/ 01 октября 2018

Вы должны определенно взглянуть на SAM LOCAL.Это инструмент, разработанный командой AWS специально для тестирования лямбд.

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

Публикует версию вашей функции из текущего снимка $ LATEST.То есть AWS Lambda делает снимок кода функции и информацию о конфигурации из $ LATEST и публикует новую версию.Код и конфигурация не могут быть изменены после публикации.Для получения информации о функции управления версиями см.

Это просто в использовании, вы просто набираете

sam local invoke --event event.json 

И за кулисами он запускает docker cotnainer для вашего lambda и вызываетit.

Что касается вашего SES, вы должны поместить в код небольшое условие if (SAM_LOCAL) и вызывать реальное, только если не в локальном режиме.Обратите внимание, что SAM_LOCAL - это переменная env, устанавливаемая инструментом SAM LOCAL при локальном запуске функции.

Удачи!

...