AWS Lambda คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
บทนำ
สำหรับในครั้งนี้ผมจะมาเขียนบล็อกอธิบายเกี่ยวกับ 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 นะครับ