AWS Lambda - ฟังก์ชันใน Java
ในบทนี้ให้เราเข้าใจรายละเอียดเกี่ยวกับวิธีสร้างฟังก์ชัน AWS Lambda แบบง่ายใน Java โดยละเอียด
การสร้างไฟล์ JAR ใน Eclipse
ก่อนที่จะดำเนินการสร้างฟังก์ชันแลมบ์ดาใน AWS เราต้องการการสนับสนุนชุดเครื่องมือ AWS สำหรับ Eclipse สำหรับคำแนะนำในการติดตั้งสิ่งเดียวกันคุณสามารถอ้างอิงได้ที่ไฟล์Environment Setup บทในบทช่วยสอนนี้
เมื่อคุณติดตั้งเสร็จแล้วให้ทำตามขั้นตอนที่ระบุที่นี่ -
ขั้นตอนที่ 1
เปิด Eclipse IDE และสร้างโปรเจ็กต์ใหม่ด้วย AWS Lambda Java Project. สังเกตภาพหน้าจอด้านล่างเพื่อความเข้าใจที่ดีขึ้น -
ขั้นตอนที่ 2
เมื่อคุณเลือก Nextมันจะเปลี่ยนเส้นทางคุณไปยังหน้าจอที่แสดงด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้รหัสเริ่มต้นถูกสร้างขึ้นสำหรับประเภทอินพุต Custom. เมื่อคุณคลิกFinish ปุ่มโครงการจะถูกสร้างขึ้นดังที่แสดงด้านล่าง -
ขั้นตอนที่ 4
ตอนนี้คลิกขวาที่โครงการของคุณและส่งออก เลือกJava / JAR ไฟล์จากไฟล์ Export ตัวช่วยสร้างและคลิก Next.
ขั้นตอนที่ 5
ตอนนี้ถ้าคุณคลิก Nextคุณจะได้รับแจ้งให้บันทึกไฟล์ในโฟลเดอร์ปลายทางซึ่งจะถูกถามเมื่อคุณคลิกถัดไป
เมื่อบันทึกไฟล์แล้วให้กลับไปที่ AWS Console และสร้างฟังก์ชัน AWS Lambda สำหรับ Java
ขั้นตอนที่ 6
ตอนนี้อัปโหลดไฟล์ .jar ไฟล์ที่เราสร้างโดยใช้ไฟล์ Upload ปุ่มดังที่แสดงในภาพหน้าจอด้านล่าง -
รายละเอียดตัวจัดการสำหรับ Java
Handler คือ package name และ class name. ดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจรายละเอียดของตัวจัดการ -
ตัวอย่าง
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
สังเกตว่าจากโค้ดด้านบนตัวจัดการจะเป็น com.amazonaws.lambda.demo.LambdaFunctionHandler
ตอนนี้ให้เราทดสอบการเปลี่ยนแปลงและดูผลลัพธ์ -
Context Object ใน Java
การโต้ตอบกับการดำเนินการ AWS Lambda ทำได้โดยใช้บริบท มีวิธีการต่อไปนี้ที่จะใช้ภายใน Java -
ซีเนียร์ No | วิธีบริบทและคำอธิบาย |
---|---|
1 | getMemoryLimitInMB() สิ่งนี้จะให้ขีด จำกัด หน่วยความจำที่คุณระบุในขณะที่สร้างฟังก์ชันแลมบ์ดา |
2 | getFunctionName() สิ่งนี้จะให้ชื่อของฟังก์ชันแลมด้า |
3 | getFunctionVersion() สิ่งนี้จะทำให้เวอร์ชันของฟังก์ชันแลมบ์ดาทำงานอยู่ |
4 | getInvokedFunctionArn() สิ่งนี้จะทำให้ ARN ใช้ในการเรียกใช้ฟังก์ชัน |
5 | getAwsRequestId() สิ่งนี้จะให้ id คำขอ aws รหัสนี้ถูกสร้างขึ้นสำหรับฟังก์ชันแลมด้าและไม่ซ้ำกัน รหัสสามารถใช้กับการสนับสนุน aws ในกรณีที่คุณประสบปัญหาใด ๆ |
6 | getLogGroupName() สิ่งนี้จะให้ชื่อกลุ่ม aws cloudwatch ที่เชื่อมโยงกับฟังก์ชัน aws lambda ที่สร้างขึ้น จะเป็นโมฆะหากผู้ใช้ iam ไม่มีสิทธิ์ในการบันทึก Cloudwatch |
7 | getClientContext() สิ่งนี้จะให้รายละเอียดเกี่ยวกับแอพและอุปกรณ์เมื่อใช้กับ sdk มือถือ aws จะให้รายละเอียดเช่นชื่อเวอร์ชันและรหัสรหัสไคลเอนต์ชื่อชื่อแพ็กเกจแอป มันสามารถเป็นโมฆะ |
8 | getIdentity() สิ่งนี้จะให้รายละเอียดเกี่ยวกับตัวตน amazon cognito เมื่อใช้กับ aws mobile sdk มันสามารถเป็นโมฆะ |
9 | getRemainingTimeInMillis() สิ่งนี้จะให้การดำเนินการตามเวลาที่เหลือเป็นมิลลิวินาทีเมื่อฟังก์ชันถูกยกเลิกหลังจากหมดเวลาที่ระบุ |
10 | getLogger() สิ่งนี้จะทำให้แลมบ์ดาคนตัดไม้เชื่อมโยงกับวัตถุบริบท |
ตอนนี้ให้เราอัปเดตโค้ดที่ระบุข้างต้นและสังเกตผลลัพธ์ของวิธีการบางอย่างที่ระบุไว้ข้างต้น สังเกตโค้ดตัวอย่างด้านล่างเพื่อความเข้าใจที่ดีขึ้น -
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
เมื่อคุณเรียกใช้รหัสที่ระบุข้างต้นคุณจะพบผลลัพธ์ตามที่ระบุด้านล่าง -
บันทึกสำหรับบริบท
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้เมื่อคุณดูเอาต์พุตบันทึกของคุณ -
หน่วยความจำที่จัดสรรสำหรับฟังก์ชัน Lambda คือ 512MB เวลาที่จัดสรรคือ 25 วินาที เวลาที่เหลือตามที่แสดงด้านบนคือ 24961 ซึ่งเป็นมิลลิวินาที ดังนั้น 25,000 - 24961 ซึ่งเท่ากับ 39 มิลลิวินาทีจึงถูกใช้สำหรับการทำงานของฟังก์ชันแลมบ์ดา โปรดทราบว่าชื่อกลุ่ม Cloudwatch และรหัสคำขอจะแสดงดังที่แสดงด้านบนด้วย
โปรดทราบว่าเราได้ใช้คำสั่งต่อไปนี้เพื่อพิมพ์บันทึกใน Java -
System.out.println (“log message”)
สิ่งเดียวกันนี้มีอยู่ใน CloudWatch สำหรับสิ่งนี้ไปที่บริการของ AWS เลือกCloudWatchservices แล้วคลิก Logs.
ตอนนี้ถ้าคุณเลือกฟังก์ชั่น Lambda มันจะแสดงวันที่บันทึกอย่างชาญฉลาดดังที่แสดงด้านล่าง -
เข้าสู่ระบบ Java
คุณยังสามารถใช้ Lambdalogger ใน Java เพื่อบันทึกข้อมูล สังเกตตัวอย่างต่อไปนี้ที่แสดงเหมือนกัน -
ตัวอย่าง
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
รหัสที่แสดงด้านบนจะให้ผลลัพธ์ต่อไปนี้ -
ผลลัพธ์ใน CloudWatch จะเป็นดังที่แสดงด้านล่าง -
เกิดข้อผิดพลาดในการจัดการ Java สำหรับฟังก์ชัน Lambda
ส่วนนี้จะอธิบายวิธีจัดการข้อผิดพลาดในฟังก์ชัน Java สำหรับ Lambda สังเกตรหัสต่อไปนี้ที่แสดงเหมือนกัน -
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
โปรดทราบว่ารายละเอียดข้อผิดพลาดจะปรากฏใน json ฟอร์แมตด้วย errorMessage Error from AWS Lambda. นอกจากนี้ไฟล์ErrorType และ stackTrace ให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด
ผลลัพธ์และเอาต์พุตบันทึกที่สอดคล้องกันของรหัสที่ระบุข้างต้นจะเป็นดังที่แสดงในภาพหน้าจอต่อไปนี้ที่ระบุด้านล่าง -