AWS Lambda - ฟังก์ชันใน NODEJS
Nodejs เป็นหนึ่งในภาษาที่รองรับฟังก์ชัน AWS Lambda เวอร์ชันที่รองรับกับ nodejs คือ v6.10 และ v8.10 ในบทนี้เราจะเรียนรู้เกี่ยวกับฟังก์ชันต่างๆของฟังก์ชัน AWS Lambda ใน NODEJS โดยละเอียด
ตัวจัดการใน NodeJS
ในการเขียนฟังก์ชันAWS Lambda ใน nodejs อันดับแรกเราควรประกาศตัวจัดการก่อน ตัวจัดการใน nodejs คือชื่อของไฟล์และชื่อของฟังก์ชันการส่งออก ตัวอย่างเช่นชื่อของไฟล์คือindex.js และชื่อฟังก์ชันการส่งออกคือ lambda handlerดังนั้นตัวจัดการที่สอดคล้องกันคือ index.lambdahandler
สังเกตตัวจัดการตัวอย่างที่แสดงที่นี่ -
exports.lambdahandler = function(event, context, callback) { //code goes here}
Params ถึง Handler
Handler เป็นแกนหลักในการสร้างฟังก์ชัน Lambda ตัวจัดการใช้เวลาสามพารามิเตอร์:event, context และ callback.
พารามิเตอร์เหตุการณ์
มีรายละเอียดทั้งหมดของเหตุการณ์ที่ทริกเกอร์ ตัวอย่างเช่นหากเราใช้ฟังก์ชัน Lambda เพื่อเรียกใช้บน S3 เหตุการณ์จะมีรายละเอียดของวัตถุ S3
พารามิเตอร์บริบท
มีรายละเอียดของบริบทเช่นคุณสมบัติและรายละเอียดการกำหนดค่าของฟังก์ชัน Lambda
ฟังก์ชันโทรกลับ
ช่วยในการให้รายละเอียดกลับไปยังผู้โทร โครงสร้างของการโทรกลับมีลักษณะดังนี้ -
callback(error, result);
พารามิเตอร์ของฟังก์ชันการโทรกลับอธิบายไว้ด้านล่าง -
Error −สิ่งนี้จะมีรายละเอียดหากมีข้อผิดพลาดเกิดขึ้นระหว่างการเรียกใช้ฟังก์ชัน Lambda ถ้าฟังก์ชัน Lambda สำเร็จnull สามารถส่งผ่านเป็นพารามิเตอร์แรกสำหรับฟังก์ชันเรียกกลับ
Result −สิ่งนี้จะให้รายละเอียดของการทำงานของฟังก์ชันแลมด้าที่ประสบความสำเร็จ หากเกิดข้อผิดพลาดพารามิเตอร์ผลลัพธ์จะถูกละเว้น
Note −ไม่บังคับให้ใช้ฟังก์ชันเรียกกลับใน AWS Lambda ในกรณีที่ไม่มีฟังก์ชันเรียกกลับตัวจัดการจะคืนค่าเป็นโมฆะ
ลายเซ็นติดต่อกลับที่ถูกต้องมีให้ด้านล่าง -
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
เมื่อใดก็ตามที่ AWS Lambda ดำเนินการรายละเอียดการเรียกกลับเช่นข้อผิดพลาดหรือความสำเร็จจะถูกบันทึกใน AWS CloudWatch พร้อมกับข้อความคอนโซลหากมี
การทำงานกับ AWS Lambda ใน Nodejs8.10
ให้เราเข้าใจวิธีการทำงานกับ AWS Lambda ใน nodejs8.10 และเรียกใช้ฟังก์ชันในลักษณะซิงค์และไม่ซิงค์
เรียกใช้ฟังก์ชัน Lambda ด้วยวิธี Sync
ตัวอย่างต่อไปนี้ให้แนวคิดเกี่ยวกับการเรียกใช้ฟังก์ชัน Lambda ด้วยวิธีการซิงค์ -
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
โปรดทราบว่าผลลัพธ์จากโค้ดด้านบนเป็นวัตถุสัญญา ไม่ให้การนับเนื่องจากการนับจะเพิ่มขึ้นภายใน setTimeout และการเรียกใช้ฟังก์ชันไม่รอการดำเนินการภายใน setTimeout และส่งคืนวัตถุสัญญา
ถ้าเรามี async/await บนฟังก์ชันตัวจัดการจะได้รับเอาต์พุตที่แน่นอนจากฟังก์ชันแลมบ์ดา
การเรียกใช้ Handler ด้วยวิธี Async
ตัวอย่างต่อไปนี้ให้แนวคิดเกี่ยวกับการเรียกใช้ฟังก์ชัน Lambda ด้วยวิธี async -
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
เราได้เพิ่ม async และ awaitในโค้ดด้านบน เมื่อเราใช้awaitข้างการเรียกใช้ฟังก์ชันการดำเนินการจะหยุดชั่วคราวจนกว่าสัญญาภายในฟังก์ชันจะได้รับการแก้ไข โปรดทราบว่าawait ใช้ได้เฉพาะสำหรับ async ฟังก์ชั่น.
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
ContextDetails ใน NodeJS
วัตถุบริบทให้รายละเอียดเช่นชื่อของฟังก์ชัน Lambda เวลาที่เหลือเป็นมิลลิวินาทีรหัสคำขอชื่อกลุ่ม cloudwatch รายละเอียดการหมดเวลาเป็นต้น
ตารางต่อไปนี้แสดงรายการวิธีการและแอตทริบิวต์ที่พร้อมใช้งานกับวัตถุบริบท -
วิธีที่ใช้ได้สำหรับวัตถุบริบท
ซีเนียร์ No | ชื่อวิธีการและคำอธิบาย |
---|---|
1 | getRemainingTimeInMillis() วิธีนี้ให้เวลาที่เหลืออยู่ในหน่วยมิลลิวินาทีจนกว่าฟังก์ชันแลมด้าจะยุติฟังก์ชัน |
แอตทริบิวต์ที่พร้อมใช้งานสำหรับวัตถุบริบท
ซีเนียร์ No | ชื่อแอตทริบิวต์และคำอธิบาย |
---|---|
1 | functionName สิ่งนี้ให้ชื่อฟังก์ชัน AWS Lambda |
2 | functionVersion สิ่งนี้ทำให้เวอร์ชันของฟังก์ชัน AWS Lambda ดำเนินการ |
3 | nvokedFunctionArn สิ่งนี้จะให้รายละเอียด ARN |
4 | memoryLimitInMB แสดงขีด จำกัด หน่วยความจำที่เพิ่มในขณะที่สร้างฟังก์ชัน Lambda |
5 | awsRequestId สิ่งนี้ให้รหัสคำขอ AWS |
6 | logGroupName ซึ่งจะทำให้ชื่อของกลุ่ม cloudwatch |
7 | logStreamName สิ่งนี้จะให้ชื่อสตรีมบันทึกของ cloudwatch ที่มีการเขียนบันทึก |
8 | identity สิ่งนี้จะให้รายละเอียดเกี่ยวกับ amazon cognito identity provider เมื่อใช้กับ aws mobile sdk รายละเอียดมีดังนี้ -
|
9 | clientContext นี่จะแสดงรายละเอียดของแอปพลิเคชันไคลเอนต์เมื่อใช้กับ sdk มือถือ aws รายละเอียดที่ได้รับมีดังนี้ -
|
ดูตัวอย่างต่อไปนี้เพื่อรับแนวคิดที่ดีขึ้นเกี่ยวกับวัตถุบริบท -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
คุณสามารถสังเกตเอาต์พุตบันทึกต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
เข้าสู่ระบบ NodeJS
เราสามารถใช้ console.log เพื่อเข้าสู่ระบบ NodeJS รายละเอียดบันทึกสามารถดึงข้อมูลจากบริการ CloudWatch เทียบกับฟังก์ชัน Lambda
ดูตัวอย่างต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
คุณสามารถสังเกตภาพหน้าจอต่อไปนี้จาก CloudWatch -
การจัดการข้อผิดพลาดใน NodeJS
ให้เราเข้าใจวิธีการแจ้งข้อผิดพลาดใน NodeJS สังเกตรหัสต่อไปนี้ -
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
คุณสามารถสังเกตสิ่งต่อไปนี้ในเอาต์พุตบันทึก -
รายละเอียดข้อผิดพลาดระบุไว้ในการติดต่อกลับดังนี้ -
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}