Skip to content

บันทึกการใช้งาน Serverless application ด้วย AWS Lambda

งานที่ผมทำตอนนี้มีการใช้งาน AWS Lambda เอามาใช้งานในลักษณะ schedule worker ที่ทำงานตามเวลาและ worker ที่ทำงานเมื่อมี event เกิดขึ้นใน service ใดๆ เช่น เมื่อมี request มาที่ API Gateway, มีการสร้าง แก้ไขไฟล์ใน S3, มี trigger จาก CloudWatch ฯลฯ

AWS Lambda, Serverless, Function as a Service คืออะไร ?

AWS Lambda เป็น Serverless platform ที่ให้เราเขียนโปรแกรมเล็กๆ  ซึ่งก็คือ Function นั่นแหละ เราถึงเรียกว่า FaaS – Function as a Service แล้วเอาไปในรันบน server ได้โดยไม่ต้องกังวลเรื่องการ scale เพราะ AWS ทำให้หมด อ้าว! แล้วอย่างนี้มันต่างจากพวก PaaS (Platform as a Service) ยังไง ?
อธิบายตามที่ผมเข้าใจละกัน

  • FaaS ไม่ต้องกังวลเรื่อง configuration, การ scale อย่างที่ผมบอกไปข้างต้นคือไม่ต้องสนเลยว่าจะ scale up, scale down กี่ node เรา set แค่ memory กับ concurrency ก็พอ
  • FaaS ขนาดมันเล็กระดับ function ทำงานแค่อย่างเดียวไม่ใช่ app ซึ่งก็เป็นไปตามแนวคิด Micorservices ซึ่งก็เป็นเหตุผลว่าทำไมเราถึงได้ยินคำว่า Microservices, FaaS, Serverless, AWS Lambda ร่วมกันบ่อยๆ

คร่าวๆ ก็ประมาณนี้

AWS Lambda ทำอะไรได้บ้าง

ผมยังไม่ได้เอามาใช้ทำอะไรใหญ่ๆ เลยไม่รู้ว่าคนอื่นเขาใช้ทำอะไรบ้าง แต่ use case ที่ใช้ทั่วไปคือใช้เป็น worker และ REST API และมีข้อดีคือเราสามารถ setup services ต่างๆ เช่น S3, API Gateway, CloudWatch, SNS, SQS และอีกหลาย services ของ AWS เป็น trigger เพื่อเรียกใช้งาน Lambda function ของเราได้ simple แค่นี้แหละ

Tools สำหรับ deploy function ไปที่ AWS Lambda

ที่ผมใช้มีอยู่ 2 ตัวคือ serverless และ apex

Serverless

Tool ตัวนี้น่าจะเป็นที่นิยมที่สุดละ เพราะ community ใหญ่ คนใช้เยอะ article เยอะ หาข้อมูลง่าย สามารถ config ใช้งานได้ทั้งแบบ schedule และ REST API ที่ไฟล์ serverless.yaml สามารถ deploy ไปผู้ให้บริการหลายเจ้าทั้ง AWS, Azure, Google Cloud, IBM OpenWhisk และเจ้าเล็กๆ อื่นๆ อีกหลายเจ้า serverless รองรับภาษาหลักค่อนข้างเยอะ แต่เขียนด้วย Node.js ก็เลยขนาดใหญ่หน่อยเพราะ dependencies เยอะ จะใช้ได้ต้องติดตั้ง Node.js ในเครื่องก่อน และด้วยความที่ฟีเจอร์มีมากกว่าทำให้ต้องขอ permission มากกว่าด้วยซึ่งงานบางอย่างเราไม่จำเป็นต้องใช้แต่ serverless requires

Update 16 Sep, 2018 — อีกหนึ่งเหตุผลที่ serverless อาจจะทำงานได้ช้าและใช้ permission มากกว่า apex เป็นเพราะ serverless สร้าง stack ผ่าน CloudFormation  (Infrastructure as a Code ของ AWS) โดยแปลง config เป็น CloudFormation ก่อนแล้วค่อยให้ CloudFormation ไปเรียกใช้ services ต่าง ๆ ของ AWS อีกที

Apex

ตัวนี้เขียนด้วย Go สามารถดาวน์โหลดแบบที่ compile เป็น binary ไฟล์เดียวมาใช้งานได้เลย ข้อดีของ apex คือรองรับภาษาที่ยังไม่ค่อยเป็นที่นิยมมากอย่าง Clojure และ Rust นอกจากนี้ที่ผมสัมผัสได้คือมันทำงานเร็วกว่า serverless นิดนึง แต่ด้วยความที่มัน simple มากเลยทำให้ฟีเจอร์บางอย่างด้อยกว่า serverless เพราะไม่มี config สำหรับการทำงานแบบ schedule เราต้องไป set ใน AWS Console เองแต่ serverless สามารถ config ได้ serverless จะ setup CloudWatch เป็น trigger ทำงานตาม schedule ให้อัตโนมัติ

ข้อจำกัดของ AWS Lambda

  • จุดประสงค์ของ Lambda function คือ optimize cost AWS จะคิดเงินตามเวลาที่ใช้งานจริงเหมือนค่ายมือถือ! ถ้า function นั้นไม่ถูกเรียกใช้นานๆ จะเข้าสู่สถานะ idle มันต้องใช้เวลาสักพักก่อนที่จะพร้อมใช้งานปัญหานี้เรียกว่า “Cold Start” หรือเครื่องร้อนช้า ซึ่งทำให้เกิดปัญหาเมื่อ function นั้นเข้าสู่สถานะ idle แล้วอยู่ๆ มี traffic เข้ามาพร้อมกันแต่ function ไม่พร้อมใช้งาน request ที่เข้ามาก็จะ  timeout
  • แต่ละ function ไม่รองรับการทำงานพร้อมกันแบบ concurrency กล่าวคือ request อื่น ๆ จะทำงานได้ต้องรอ request ก่อนหน้าทำงานเสร็จก่อน แต่เราสามารถปรับให้ function รับ concurrency เพิ่มได้แต่ก็มี limit ที่  1000/region/account ดังนั้นถ้าเรามีหลาย function ก็ต้องบริหารดีๆ ว่า function ไหนใช้เยอะควรจะใช้ concurrency เท่าไหร่เพราะมีจำกัด
  • ความสะดวกสบายของ Lambda แลกมาด้วยความอิสระเราไม่สามารถลง software อะไรเพิ่มเติมเองได้แต่สามารถใช้ services ของ AWS ได้ทำให้เราค่อนข้างยึดติดกับ ecosystem ของ AWS ซึ่งอันนี้ก็ไม่แปลกใจ เขาก็ต้องดึงเราไว้กับเขานานๆ อยู่แล้ว

โพสต์นี้ค่อนข้างเขียนแบบ overview เพราะทั้ง serverless และ apex document ค่อนข้างดีและ Lambda เองก็ไม่ซับซ้อน ถ้าคราวหน้ามีประเด็น technical ที่น่าสนใจคงได้เขียนถึงครับ

Be First to Comment

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: