การใช้ฟังก์ชัน Lambda กับ Amazon DynamoDB
DynamoDB สามารถทริกเกอร์ AWS Lambda เมื่อมีการเพิ่มข้อมูลลงในตารางอัปเดตหรือลบ ในบทนี้เราจะพูดถึงตัวอย่างง่ายๆที่จะเพิ่มรายการลงในตาราง DynamoDB และ AWS Lambda ซึ่งจะอ่านข้อมูลและส่งเมลพร้อมกับข้อมูลที่เพิ่มเข้าไป
ข้อกำหนด
ในการใช้ Amazon DB และ AWS Lambda เราจำเป็นต้องทำตามขั้นตอนดังที่แสดงด้านล่าง -
สร้างตารางใน DynamoDB ด้วยคีย์หลัก
สร้างบทบาทที่จะได้รับอนุญาตให้ทำงานกับ DynamoDB และ AWS Lambda
สร้างฟังก์ชันใน AWS Lambda
AWS Lambda Trigger เพื่อส่งอีเมล
เพิ่มข้อมูลใน DynamoDB
ให้เราคุยรายละเอียดแต่ละขั้นตอนนี้
ตัวอย่าง
เราจะหาตัวอย่างต่อไปนี้ซึ่งแสดงการโต้ตอบพื้นฐานระหว่าง DynamoDB และ AWS Lambda ตัวอย่างนี้จะช่วยให้คุณเข้าใจการดำเนินการต่อไปนี้ -
การสร้างตารางที่เรียกว่าลูกค้าในตาราง Dynamodb และวิธีการป้อนข้อมูลในตารางนั้น
ทริกเกอร์ฟังก์ชัน AWS Lambda เมื่อป้อนข้อมูลและส่งอีเมลโดยใช้บริการ Amazon SES
แผนภาพบล็อกพื้นฐานที่อธิบายการไหลของตัวอย่างดังแสดงด้านล่าง -
สร้างตารางใน DynamoDB ด้วยคีย์หลัก
ลงชื่อเข้าใช้คอนโซล AWS ไปที่ AWS Services แล้วเลือก DynamoDB ดังที่แสดงด้านล่าง เลือก DynamoDB
DynamoDB แสดงตัวเลือกดังที่แสดงด้านล่าง -
ตอนนี้คลิก Create tableเพื่อสร้างตารางดังที่แสดง เราได้ตั้งชื่อตารางเป็นcustomer ด้วยคีย์หลักสำหรับตารางนั้นเป็น cust_id. คลิกที่Create ปุ่มเพื่อเพิ่มตารางลงใน dynamodb
ตารางที่สร้างขึ้นดังแสดงด้านล่าง -
เราสามารถเพิ่มรายการในตารางที่สร้างขึ้นได้ดังนี้ -
คลิก Items แล้วคลิก Create item ปุ่มดังรูป -
การสร้างบทบาทพร้อมสิทธิ์ในการทำงานกับ DynamoDB และ AWS Lambda
ในการสร้างบทบาทไปที่บริการของ AWS แล้วคลิก IAM
ให้เราสร้างนโยบายที่จะใช้สำหรับตาราง DynamoDB ที่สร้างไว้ก่อนหน้านี้ -
ตอนนี้เลือกไฟล์ Service. สังเกตว่าบริการที่เราเลือกคือDynamoDB. สำหรับActions เราได้ดำเนินการทั้งหมด Dynamodbการกระทำเช่นการเข้าถึงรายการอ่านและเขียน สำหรับresourcesเราจะเลือกการดำเนินการประเภททรัพยากรตาราง เมื่อคุณคลิกคุณจะเห็นหน้าจอดังนี้ -
ตอนนี้เลือก table และ Add ARNไปตามที่แสดง เราจะได้รับARN รายละเอียดจาก customer table สร้างขึ้นตามที่แสดงด้านล่าง -
ป้อน arn รายละเอียดที่นี่ -
คลิก Addเพื่อบันทึกการเปลี่ยนแปลง เมื่อทำเสร็จแล้วClick on Review policy. ป้อนชื่อนโยบายคำอธิบาย ฯลฯ ตามที่แสดงด้านล่าง -
คลิกที่ create policyเพื่อบันทึก เพิ่มนโยบายในบทบาทที่จะสร้าง เลือกRole จากด้านซ้ายและป้อนรายละเอียด
สังเกตว่านโยบายที่เพิ่มเข้ามาคือ newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess และ amazonsesfullaccess. เพิ่มบทบาทและจะใช้ขณะสร้างฟังก์ชัน AWS Lambda
สร้างฟังก์ชันใน AWS Lambda
ดังนั้นเราจึงสร้างฟังก์ชันแลมด้าที่เรียกว่า newlambdafordynamodb ตามที่ปรากฏ.
ตอนนี้ให้เราเพิ่ม DynamodDB trigger ไปที่ AWS Lambda ที่สร้างขึ้น รันไทม์ที่เราจะใช้คือ Node.js
คุณสามารถดูรายละเอียดต่อไปนี้ใน Dynamodb trigger ที่จะกำหนดค่าสำหรับ AWS Lambda -
ตอนนี้เพียงแค่คลิก Add เพื่อเพิ่มทริกเกอร์ใน AWS Lambda
AWS Lambda Trigger เพื่อส่งเมล
AWS Lambda จะถูกทริกเกอร์เมื่อข้อมูลถูกแทรกลงใน AWS Lambda พารามิเตอร์เหตุการณ์จะมีการแทรกข้อมูล dynamodb สิ่งนี้จะอ่านข้อมูลจากเหตุการณ์และส่งอีเมล
การส่งอีเมล
ในการส่งอีเมลคุณต้องทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1
ไปที่บริการ AWS แล้วเลือก SES (บริการอีเมลธรรมดา) ตรวจสอบอีเมลที่เราต้องการส่งอีเมลตามที่แสดง -
ขั้นตอนที่ 2
คลิกปุ่ม Verify a New Email Address เพื่อเพิ่มที่อยู่อีเมล
ขั้นตอนที่ 3
ป้อนที่อยู่อีเมลเพื่อยืนยัน ที่อยู่อีเมลจะรับและเปิดใช้งานเมลจาก Amazon ซึ่งต้องคลิก เมื่อการเปิดใช้งานเสร็จสิ้นรหัสอีเมลจะได้รับการยืนยันและสามารถใช้กับบริการของ AWS ได้
ขั้นตอนที่ 4
รหัส AWS Lambda ซึ่งอ่านข้อมูลจากเหตุการณ์และส่งอีเมลมีให้ด้านล่าง -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
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");
}
});
}
ตอนนี้บันทึกฟังก์ชันแลมบ์ดาและข้อมูลในตาราง DynamoDB
เพิ่มข้อมูลใน DynamoDB
ใช้ลำดับต่อไปนี้เพื่อเพิ่มข้อมูลใน DynamoDB
ขั้นตอนที่ 1
ไปที่โต๊ะ customer สร้างใน Dynamodb
ขั้นตอนที่ 2
คลิก Create item.
ขั้นตอนที่ 3
คลิก Save และตรวจสอบรหัสอีเมลที่ให้ไว้ใน AWS Lambda เพื่อดูว่า AWS Lambda ส่งอีเมลหรือไม่