AWS Lambda + SES notification +S3 events
Hello Buddies.
Sometimes we want to get notifications when an event occurs in AWS S3 bucket like a file upload, deletion, etc.
For the same the event handling capability of AWS Lambda can come handy, and we will involve SES (Amazon Simple Email Service) in this demo.
To realize this, we will follow the following simple steps -
1. Have an S3 bucket in place -
It will look like as follows -
Here for example sake, we will use the bucket listed as ‘namit’.
2. Next comes the lambda function for playing its role, of an event listener -
Lambda --> New function
3. You can refer to the below code for replacing the Lambda template (Node js) -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-west-2'
});
const s3 = new aws.S3({
apiVersion: '2006-03-01'
});
exports.handler = function(event, context, callback) {
console.log("Incoming: ", event);
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const news = `Event took place in - ${bucket} -> ${key}`;
const params = {
Bucket: bucket,
Key: key,
};
var eParams = {
Destination: {
ToAddresses: ["testingxxxxx@gmail.com"]
},
Message: {
Body: {
Text: {
Data: `${news}`
}
},
Subject: {
Data: "Email Notification"
}
},
Source: "testingxxxxx@gmail.com"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
// console.log(data);
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
}
});
};
Make sure you replace the email id with the one you intent to use.
A brief look at the configuration and trigger for the lambda -
When enabled, Lambda function will start receiving the event notifications from the S3 it is bound too.
Alongwith the above code some policy and permission changes are required as well.
For the above sample, we can use the below policy structure, in IAM -
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
]
}
And make sure the email ID we are using should be verified first in SES -
Uploading a sample file in the S3 bucket 'namit' -> green.jpg
Check the cloudwatch and the email account used.
BINGO
We have got the mail with -
Subject : Email Notification
Body : Event took place in - namit -> green.jpg
Let’s disable the lambda function now, and give a new try with some different use case. :)
Happy Coding!!
Very informative blog and useful article thank you for sharing with us , keep posting learn more about aws with cloud computing
ReplyDeleteAWS Certification Training
AWS Online Training
It was so nice article. I was really satisfied by seeing this article.
ReplyDeleteAWS Training
AWS Online Training
Amazon Web Services Online Training
Nice Blog very use full inormation.AWS-certified experts help you develop a cloud strategy which aligns with your business transformation road map and implement cloud management solutions to harness the AWS Cloud Managed Services
ReplyDelete