AWS Lambda คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

สำหรับในครั้งนี้ผมจะมาเขียนบล็อกอธิบายเกี่ยวกับ AWS Lambda ว่า ณ ตอนนี้มีโครงสร้างหรือองค์ประกอบในการทำงานอะไรบ้างสำหรับผู้ที่มีความสนใจอยากจะศึกษาข้อมูลเกี่ยว Lambda มากขึ้นนะครับซึ่งหลักๆเนื้อหาในบล็อกนี้จะมาจากข้อมูลต้นฉบับของ AWS นะครับ
2022.11.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

บทนำ

สำหรับในครั้งนี้ผมจะมาเขียนบล็อกอธิบายเกี่ยวกับ AWS Lambda ว่า ณ ตอนนี้มีโครงสร้างหรือองค์ประกอบในการทำงานอะไรบ้างสำหรับผู้ที่มีความสนใจอยากจะศึกษาข้อมูลเกี่ยว Lambda มากขึ้นนะครับซึ่งหลักๆเนื้อหาในบล็อกนี้จะมาจากข้อมูลต้นฉบับของ AWS นะครับ AWS Lambda official

ภาพรวม

  • AWS Lambda เป็น Serverless ดังนั้นเราไม่จำเป็นต้องกังวลเกี่ยวกับการจัดการโครงสร้างหรือสเปคของเซิร์ฟเวอร์เลย สามารถโฟกัสไปที่การพัฒนาแอพพลิเคชั่นได้อย่างเต็มที่
  • รองรับการเขียนโปรแกรมหลายภาษา ตั้งแต่ Java,Node.js,C#,Python,Ruby,Go และอื่นๆอีกมากมาย รวมทั้งยังรองรับการใข้งาน Docker container ด้วย
  • ลดค่าใช้จ่ายในการใช้งานได้เพราะ Lambda จะมีการคิดค่าใช้จ่ายในช่วงเวลาที่มีการรันโค้ดเท่านั้นหรือเพียงไม่กี่วินาทีที่โค้ดหรือฟังก์ชันทำงาน ในขณะที่ EC2 จะคิดค่าใช้จ่ายตลอดระยะเวลาที่ Isntance เปิดใช้งานถึงแม้ว่าจะไม่มีกระบวนการทำงานของโปรแกรมหรือโค้ดเลยก็ตาม
  • Lambda สามารถใช้งานร่วมกับหลากหลาย service ใน AWS อาทิเช่น API Gateway,Event Bridge,Amazon S3 และ Amazon Kinesis Firehose

ภาษาที่สามารถใช้งานได้

ภาษา เครื่องมือและตัวเลือกสำหรับการเขียนโค้ด รายละเอียด
Node.js      สามารถใช้งาน Visual Studio ควบคู่กับ AWS Lambda ได้โดยติดตั้ง IDE plugin สามารถดูข้อมูลเพิ่มเติมได้ที่ AWS Lambda Supportโดยพัฒนา สามารถเลือกใช้ Console นี้ได้กรณีภาษาที่เราใช้เขียนไม่รองรับกับตัวระบบ
Java สามารถใช้งานกับเครื่องมือ Eclipse ควบคู่กับ AWS Toolkit for Eclipse ได้นะครับ ตามลิ้งค์เลยAWS Lambda with the AWS Toolkit for Eclipse AWS Toolkit สามารถสร้าง Deployment package ได้ตามรายละเอียดจากเนื้อหาในลิ้งค์นี้ครับ Deploy Code to Create a Lambda Function
C# สามารถใช้งาน Visual Studio ควบคู่กับ AWS Lambda ได้โดยติดตั้ง IDE plugin AWS Lambda Support หรือถ้าใช้ .NET Core ดูวิธีการติดตั้งได้ตามนี้เลยครับ ตามลิ้งค์เลย .NET Core คู่มือการติดตั้ง AWS Toolkit สามารถสร้าง Deployment package ได้ตามรายละเอียดจากเนื้อหาในลิ้งค์นี้ครับ Deploy Code to Create a Lambda Function
Python สำหรับภาษา Python สามารถสร้าง Function และใช้งานผ่าน AWS Lambda console ได้เลยครับ สามารถเลือกใช้ Console นี้ได้กรณีภาษาที่เราใช้เขียนไม่รองรับกับตัวระบบ
Go สำหรับภาษา Go สามารถสร้าง Function และใช้งานผ่าน AWS Lambda console ได้เลยครับ สามารถดูรายละเอียดเพิ่มเติมได้ดังนี้ Deploying Code and Creating a Lambda Function

ตัวอย่างการเชื่อมต่อกับเซอร์วิสอื่นๆ ของ AWS

  • Amazon S3
  • การเรียก Object หรือข้อมูลต่างๆ ที่บันทึกไว้ใน S3 Bucket
  • Amazon Kinesis
  • สามารถอ่านข้อมูล batch ของข้อมูลที่กำลัง stream อยู่โดยอัตโนมัติได้
  • Amazon DynamoDB
  • วิเคราะห์ข้อมูลจาก Amazon DynamoDB และเริ่มกระบวนการทำงานเมื่อมีการสร้างเงื่อนไขที่เจาะจง
  • AWS CloudTrail
  • สามารถดู Log ประวัติการเรียก API ได้ร่วมถึงข้อมูลส่วนอื่นๆที่เกี่ยวข้องได้

ตัวอย่างการทำงานส่วนใหญ่ที่ใช้งานกับ AWS Lambda functions

  • แยกการใช้งานของ Lambda (Emtry point) ออกจากโค้ดส่วนที่เป็น Core logic
exports.myHandler = function(event, context, callback) {
    var foo = event.foo;
    var bar = event.bar;
    var result = MyLambdaFunction (foo, bar);
    callback(null, result);
}
function MyLambdaFunction (foo, bar) {
    // MyLambdaFunction logic here
}
  • เพิ่มประสิทธิภาพการทำงานด้วยการนำ container กลับมาใช้งานใหม่
  • เมื่อมีการใช้งานกับ Amazon S3 เราสามารถตั้งค่า S3 bucket ปลายทางโดยกำหนดชื่อเป็นตัวแปรแทนได้ไม่จำเป็นต้องเขียนโค้ดเพื่อใช้งานโดยตรง
  • การควบคุม Package ที่สามารถ deploy ได้อย่างอิสระ
  • บันทึกขนาดของ Package ที่ใช้ deploy แล้วตั้งค่าเป็นขนาดขั้นต่ำสำหรับการทำงาน
  • รวดเร็วขึ้นด้วยการเก็บไฟล? .jarfiles ที่แยกจากกันใน directories/lib
  • ใช้ Java พื้นฐานในการทำ dependency injection (IoC) frameworks ได้เหมือนกับ Dagger และ Guice
  • เตรียมทดสอบประสิทธิภาพ function สำหรับทดสอบเพื่อเลือกใช้งาน memory size
  • โหลด function เพื่อทดสอบและดำเนินการกำหนดค่าการ timeout ที่เหมาะสมที่สุด
  • อนุญาตให้เข้าใช้งานขั้นต่ำสุดสำหรับ IAM policy
  • สามารถเข้าใจถึงข้อจำกัดของ AWS Lambda
  • ให้ความสำคัญกับขนาดของ Payload รายละเอียดไฟล์และ /tmpspace
  • ลบ function ที่ไม่ใช้งานออกจาก Lambda function
  • ใช้ AWS Lambda Metrics และ CloudWatch Alarms เพื่อหลีกเลี่ยงการสร้างหรืออัพเดท metrics จาก Lambda function
  • ใช้ประโยชน์จากบันทึกและตัววัดและมิติของ AWS Lambda เพื่อค้นหาและแก้ไขข้อผิดพลาด
  • ทดสอบ batch และขนาดบันทึกต่างๆ และปรับช่วงเวลาการ
  • ใช้ชาร์ดสตรีม Kinesis เพื่อปรับปรุงปริมาณงาน
  • สร้างและใช้ dead-letter เพื่อวางคิวการทำงานสำหรับรับมือกับความผิดพลาดของ asynchronous ฟังก์ขั่น
  • สามารถใช้งาน VPC เพิ่มหรือไม่ก็ได้
  • ไม่จำเป็นต้องใช้ VPC ถ้าเราไม่ได้จะเชื่อมต่อไปที่ resouce ที่ไม่สามารถเปิดสาธารณะได้เช่นเดียวกับ RDS หรือ ElasticCache
  • สร้าง Elastic Network Interface (ENI) เพื่อเข้าถึง resouece ภายใน
  • สร้างและใช้งาน subnet เพื่อใช้งานกับ Lambda ใน VPC

ข้อจำกัด

  • เรียกใช้ทรัพยากรต่อการเรียกใช้งาน 1 ครั้ง
  • การทำงานพร้อมกันในแต่ละภูมิภาค
  • พื้นที่ของขนาดไฟล์และการปรับใช้
  • หากเกินขีดจำกัดข้างต้น จะเกิดข้อผิดพลาดขึ้นโดยมีข้อยกเว้นว่าเกินขีดจำกัด

AWS Lambda@Edge

  • เรียกใช้ฟังก์ชัน Lambda ด้วย CloudFront Events
  • เรียกใช้ฟังก์ชัน Lambda ใน region ต่างๆและ Edge location ของ Amazon CloudFront
  • สามารถแก้ไขคำขอและการตอบสนองของ CloudFront ได้
  • หลังจากที่ CloudFront ได้รับคำขอจากผู้ชม (คำขอของผู้ดู)
  • ก่อนที่ CloudFront จะส่งต่อคำขอไปยังเซิร์ฟเวอร์ต้นทาง (คำขอต้นทาง)
  • หลังจาก CloudFront ได้รับการตอบกลับจากต้นทาง origin (origin response)
  • ก่อน Cloudfront จะส่งการสนองกลับไปที่ Viewer AWS Lambda Developer guide.
  • การตรวจสอบคุกกี้เพื่อแก้ไขเปลี่ยนแปลง site URL เช่น A/B test
  • การตอบสนองที่มีพื้นฐานจาก User-Agent
  • เข้าถึงการควบคุมผ่านการตรวจสอบ headers และการยินยันตัวตนผ่าน token ที่สอดคล้องกับ headers
  • ตรวจสอบข้อมูลที่ส่งมาในหน้า login เพื่อค้นหาข้อมูลที่ไม่ได้ตรวจสอบสิทธิ์
  • เชื่อมต่อไปยัง object อื่นที่แตกต่างกันใน cahce โดยการเปลี่ยนแปลง headers และเขียน URL path

สรุป

เนื้อหาในบล็อกนี้เป็นการแปลมาจากบล็อกต้นฉบับที่เป็นภาษาญี่ปุ่นนะครับ หวังว่าทุกคนจะได้ความรู้เพิ่มขึ้นสำหรับการใช้งาน AWS Lambda นะครับ

บทความที่เกี่ยวข้อง