Skip to content Skip to sidebar Skip to footer

Aws Upload Object To S3 Bucket And Pass Details Of Data To Lambda

Working my way through tutorials for AWS...So ive created an S3 bucket which when a file is dropped into it calls my lambda 'testHelloWorld' which sends an email...this all works f

Solution 1:

You are declaring the var eParams within the callback of s3.getObject, but then you run the ses.sendMail outside of the callback. I think that's why!

You also need to move the ses.sendEmail to inside the callback of s3.getObject if you want to send the data from your object inside the email.

Try this:

s3.getObject(function(err, objectData) {
    if (err) {
        console.log('Could not fetch object data: ', err);
    } else {
        console.log('Data was successfully fetched from object');
        var eParams = {
            Destination: {
                ToAddresses: ["johnboy@hotmail.com"]
            },
            Message: {
                Body: {
                    Text: {
                        Data: objectData
                    }
                },
                Subject: {
                    Data: "Email Subject!!!"
                }
            },
            Source: "johnboy@hotmail.com"
        };

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

        var email = ses.sendEmail(eParams, function(err, emailResult) {
            if (err) console.log('Error while sending email', err);
            else {
                console.log("===EMAIL SENT===");
                console.log(objectData);
                console.log("EMAIL CODE END");
                console.log('EMAIL: ', emailResult);
                context.succeed(event);
            }
        });
    }
});

Solution 2:

You need to read on how Nodejs works. It is event based and depends on callbacks and promises. You should do -

 s3.getObject(params, function(err, data){
      //This is your callback for s3 API call. DO stuff hereif (err) {
       console.log('ERROR ' + err);
       exit(err);
     } else {
       testData = data;
        // Got your data. Send the mail here
     }
 }); 

I have added my comments in code above. Since Nodejs is single threaded it will make S3 api call and go ahead. When it is sending mail s3 api call is not complete so data is null. It is better to use promises here.

Anyway read up on callback and promises in nodejs and how it works. But hope this answers your logical error.

Post a Comment for "Aws Upload Object To S3 Bucket And Pass Details Of Data To Lambda"