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
      
        { @Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); // TODO: implement your handler return "Hello from Lambda!"; } } 
      

สังเกตว่าจากโค้ดด้านบนตัวจัดการจะเป็น 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 ให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด

ผลลัพธ์และเอาต์พุตบันทึกที่สอดคล้องกันของรหัสที่ระบุข้างต้นจะเป็นดังที่แสดงในภาพหน้าจอต่อไปนี้ที่ระบุด้านล่าง -