การใช้ฟังก์ชัน Lambda กับเหตุการณ์ตามกำหนดการ
เหตุการณ์ที่กำหนดไว้จะเกิดขึ้นในช่วงเวลาปกติตามชุดกฎ เหตุการณ์ตามกำหนดการใช้เพื่อเรียกใช้ฟังก์ชัน Lambda หลังจากช่วงเวลาที่กำหนดไว้ในบริการคลาวด์วอทช์ ใช้สำหรับการทำงานกับงาน cron ร่วมกับ AWS Lambda ได้ดีที่สุด บทนี้จะอธิบายด้วยตัวอย่างง่ายๆในการส่งอีเมลทุก ๆ 5 นาทีโดยใช้เหตุการณ์ตามกำหนดการและ AWS Lambda
ข้อกำหนด
ข้อกำหนดสำหรับการใช้ฟังก์ชัน Lambda กับเหตุการณ์ตามกำหนดการมีดังนี้ -
- ยืนยันรหัสอีเมลโดยใช้ AWS SES
- สร้างบทบาทเพื่อใช้ AWS SES, Cloudwatch และ AWS Lambda
- สร้าง Lambda Function เพื่อส่งอีเมล
- เพิ่มกฎสำหรับเหตุการณ์ตามกำหนดการจาก AWS CloudWatch
ตัวอย่าง
ตัวอย่างที่เราจะพิจารณาจะเพิ่มเหตุการณ์ CloudWatch ในฟังก์ชัน AWS Lambda Cloudwatch จะเรียกใช้ AWS Lambda ตามรูปแบบเวลาที่แนบมา ตัวอย่างเช่นในตัวอย่างด้านล่างเราใช้เวลา 5 นาทีเป็นตัวกระตุ้น หมายความว่าทุกๆ 5 นาที AWS Lambda จะถูกทริกเกอร์และ AWS Lambda จะส่งอีเมลเมื่อใดก็ตามที่ถูกทริกเกอร์
แผนภาพบล็อกพื้นฐานสำหรับสิ่งเดียวกันแสดงอยู่ด้านล่าง -
ยืนยันรหัสอีเมลโดยใช้ AWS SES
เข้าสู่ระบบ AWS และไปที่บริการ AWS SES ดังที่แสดงด้านล่าง -
ตอนนี้คลิก Simple Email บริการตามรูป -
คลิก Email Addresses ด้านซ้ายตามภาพ -
จะแสดงปุ่ม Verify a New Email Address. คลิกเลย
ป้อน Email Addressคุณต้องการยืนยัน คลิกVerify This Email Addressปุ่ม. คุณจะได้รับอีเมลจาก AWS ในรหัสอีเมลนั้นพร้อมหัวเรื่องอีเมล: Amazon Web Services - คำขอยืนยันที่อยู่อีเมลในภูมิภาคสหรัฐอเมริกาฝั่งตะวันออก (เวอร์จิเนียเหนือ)
คลิกลิงก์ที่ให้ไว้ในอีเมลเพื่อยืนยันที่อยู่อีเมล เมื่อตรวจสอบแล้วจะแสดงรหัสอีเมลดังนี้ -
สร้างบทบาทเพื่อใช้ AWS SES, Cloudwatch และ AWS Lambda
คุณยังสามารถสร้างบทบาทที่ให้สิทธิ์ในการใช้บริการ สำหรับสิ่งนี้ไปที่ IAM แล้วเลือกบทบาท เพิ่มนโยบายที่จำเป็นและสร้างบทบาท สังเกตว่าบทบาทที่สร้างขึ้นนี้คือevents with lambda.
สร้างฟังก์ชัน Lambda เพื่อส่งอีเมล
คุณจะต้องทำตามขั้นตอนเพื่อสร้างฟังก์ชัน Lambda โดยใช้รันไทม์เป็น nodejs
ตอนนี้เพิ่มทริกเกอร์ให้กับ Lambda ตามที่แสดง -
เพิ่มรายละเอียดไปที่ CloudWatch Events Trigger ดังแสดงด้านล่าง -
โปรดทราบว่าเหตุการณ์จะถูกทริกเกอร์หลังจากทุกๆ 5 นาทีตามทริกเกอร์กฎที่สร้างขึ้น
รหัสแลมด้าสำหรับส่งอีเมลมีให้ด้านล่าง -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
ตอนนี้เราต้องการบริการ AWS SES คุณสามารถเพิ่มสิ่งนี้โดยใช้รหัสที่แสดงดังนี้ -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
ในการส่งจดหมายจาก nodejsเราได้สร้าง eParams วัตถุที่มีรายละเอียดเช่นไฟล์ example mail, to mail id และ the body with message ดังต่อไปนี้ -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
รหัสแลมด้าสำหรับส่งอีเมลมีดังนี้ -
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
ตอนนี้ให้เราบันทึกฟังก์ชัน Lambda นี้และตรวจสอบรหัสอีเมลสำหรับอีเมล ภาพหน้าจอที่แสดงด้านล่างแสดงว่าอีเมลถูกส่งจาก AWS Lambda ทุก ๆ 5 นาที