AWS Lambda

ลองใช้งาน AWS Lambda จากที่ได้มีโอกาสลองใช้งาน AWS Lambda มาได้นิดหน่อย เลยคิดว่าอยากเขียนบล็อกไว้กันลืมซักหน่อย


AWS Lambda คืออะไร ?

มันคือบริการหนึ่งของ AWS ที่ทำให้เราสามารถรันโค้ดแบบ Serverless ได้ครับ ว่าง่ายๆคือเราเขียนโค้ดโดยที่ไม่ต้องเซ็ตอัพอะไรเกี่ยวกับเซิฟเวอร์เลยครับ แค่เขียนโค้ดแล้วอัพโหลดขึ้นไปก็สามารถใช้งานได้เลยครับ


ข้อดีของ AWS Lambda

ปกติแล้วโค้ดของเราจะต้องถูกรันอยู่บนเซิฟเวอร์ใช่ไหมครับ ซึ่งเราก็ต้องมีความรู้ในการเซ็ตอัพเซิฟเวอร์ ในขณะที่ AWS Lambda สามารถให้เราอัพโหลดโค้ดขึ้นไปได้เลย ตัดปัญหาเรื่องเซิฟเวอร์ไปได้เลยครับ


ที่สำคัญ AWS Lambda จะคิดราคาตาม compute time ครับ ว่ากันง่ายๆคือ ถ้าโค้ดนี้ไม่ถูกรันก็ไม่ต้องจ่ายเงินครับ ต่างกับแบบเดิมที่เราต้องตั้งเซิฟเวอร์ ถึงแม้โค้ดเราจะไม่ถูกใช้งานแต่ก็ต้องเสียเงินตามเวลาใช้งานเซิฟเวอร์อยู่ดี

จุดขายอีกอย่างหนึ่งที่ไม่พูดไม่ได้เลยคือ AWS Lambda นั้นสามารถ trigger event ของ AWS service ตัวอื่นๆได้ครับ เช่น การ trigger เมื่อมีการอัพโหลดรูปภาพลงบน S3, เมื่อ database มีการเปลี่ยนแปลง, หรือเมื่อมี http request เข้ามาผ่าน API Gateway ทำให้เราสามารถเขียนโค้ดเพื่อเล่นกับอีเว้นท์ต่างๆได้เยอะเลยครับ

ค่าใช้จ่ายเท่าไหร่ ?

สำหรับคนที่เพิ่งสมัคร account ของ AWS ใหม่ จะมี AWS Free Tier ให้เราสามารถใช้บริการของ AWS ได้ฟรีในระดับนึงเป็นเวลา 1 ปีครับ สำหรับ AWS Lambda เราสามารถใช้ได้ 1 ล้าน request ต่อเดือนครับ เหลือๆพอที่จะเอามาเล่นได้สบายครับ


มาลองใช้งาน AWS Lambda กันดีกว่า

โดยการใช้งานก็คือเราจะเขียนสิ่งที่เรียกว่า Lambda function มันคือ function ธรรมดาๆนี่แหละครับ ที่สามารถ trigger event บน AWS service ต่างๆได้


เรามาลองสร้าง Lambda function กันสักหนึ่ง function ดีกว่า แน่นอนครับ การจะเขียนโปรแกรมใดๆ ต้องผ่านแอพครูเสมอครับ ใครเริ่มต้นเขียนอะไรแล้วไม่ผ่าน “Hello world” คุณจะโดนตำรวจจับทันทีครับ 555

เริ่มต้น หลังจากที่เราสมัคร account เรียบร้อยแล้ว ให้ไปที่หน้า console ครับในช่อง search จะมี service ต่างๆของ AWS ให้เลือกครับ เราเข้าไปที่ Lambda ในหมวด Compute ได้เลย

หน้าตาของบริการต่างๆของ AWS ครับ


จะมาที่หน้า home ของ AWS Lambda ครับ มีทั้งส่วนของ Dashboard ที่จะแสดงข้อมูลของ Lambda function ที่เรามีครับ รวมไปถึงการใช้งานว่ามีการใช้งานเท่าไหร่บ้าง มี error รึป่าว

ส่วนแท็บ Functions ก็จะมีรายการของ Lambda function ที่เราเคยสร้างไว้ และเราสามารถสร้าง Lambda function ได้โดยเลือก Create a Lambda function ครับ

หน้า home ของ AWS Lambda


สำหรับใครที่ไม่รู้จะเริ่มยังไง AWS เขาก็ใจดีมี blueprint ให้เลือกเยอะแยะเลย ใครอยากลองอะไรแนะนำว่าเริ่มจาก blueprint ก็ช่วยได้เยอะเลยครับ ถ้าใครไม่สนใจก็เลือก Blank Function ได้ครับ ในที่นี้เราจะลองเลือก blueprint ชื่อว่า Hello World ที่ใช้ Node.js นะครับ

เลือก blueprint ในการสร้าง lambda function ใหม่


ต่อไปจะเป็นการเลือก trigger event จาก service ต่างๆครับ ในที่นี้จะมีตัวเลือกให้เยอะมากเลยครับ เช่น Object storage อย่าง S3, database อย่าง DynamoDB, API Gateway

สำหรับตรงนี้ถ้าเราอยาก trigger event อะไรก็เลือกได้เลยครับ ในตอนนี้กด next ไปก่อนได้ครับ เพราะว่าเราจะโฟกัสไปที่การสร้าง Lambda function กันก่อน เดี๋ยวตรงนี้สามารถมาเลือกได้ใหม่ภายหลังครับ เราไม่รีบ 55


หน้าจอเลือก trigger event


คราวนี้เราจะเข้าถึงหน้า Configure function ครับ หลักๆก็จะมีให้ตั้งชื่อ function, เลือก runtime, เลือก handler และ role

ซึ่งตรงนี้จะมี consoleให้เราเขียนโค้ดบนนี้เลย หรือจะใช้วิธีอัพโหลดโค้ดขึ้นไปก็ได้ ตอนนี้เอาแบบง่ายก่อนก็เขียนใน console กันเลย

หน้า configure function


ตัวอย่างจะมี function ชื่อว่า handler โดยปกติแล้วจะเริ่มทำงานที่ function นี้ครับ โดยจะรับ parameter 3 ตัวคือ

  • event คือข้อมูลของ event ซึ่งจะแตกต่างกันตามที่เราได้ trigger เอาไว้
  • context เป็นข้อมูลเกี่ยวกับ runtime ครับ
  • callback เอาไว้ส่ง callback ให้กับคนที่เรียกใช้ function

ง่ายๆเลยเราก็จะเขียน function นี้ให้ส่งค่า Hello World!! ออกมาครับ ก็ลบโค้ดใน function แล้วส่งผ่าน callback กลับมาเลยแบบนี้ครับ callback(null, ‘Hello World!!’) จากนั้นกด create function ได้เลย

Hello World คุณค่าที่ developer คู่ควร


เราสามารถกดปุ่ม test เพื่อลองทดสอบการทำงานของ function ได้ครับ จากที่เขียนไปจะแสดงผล Hello World!! ออกมาครับ

เสร็จแล้ว Hello World function



ลองเชื่อมต่อ Lambda function เข้ากับ API Gateway

ยังจำกันได้ไหมครับ ว่าตอนแรกเราแอบข้ามการ trigger ไป จริงๆคืออยากให้เห็นภาพหน้าตาของเจ้า Lambda function กันก่อนว่าเป็นอย่างไร ซึ่งในสถานการณ์จริงๆคงไม่มีใครเขียน Lambda function ขึ้นมาลอยๆใช่ไหมครับ


ดังนั้นเราจะเอา function ที่เราเขียนไป trigger event บน API Gateway กันครับ โดยเจ้า API Gateway เนี่ย ก็ตามชื่อเลยครับ ไม่รู้จะอธิบายยังไงดี 55 คือเราจะใช้ API Gateway สร้าง resouce ขึ้นมาหนึ่ง resource ครับ แล้วเมื่อมี http request เข้ามาที่ resouce นี้ จะไป trigger ให้ Lambda function นี้ทำงาน และส่ง Hello World กลับไปให้ชาวโลกกัน


เริ่มสร้าง Resource ใน API Gateway

ไปที่ search ละเลือก API Gateway ในแท็บ Application Services

API Gateway

เลือก create api ใส่ชื่อ API ให้เรียบร้อยจะได้หน้าตาแบบนี้ครับ

หน้า dashboard ของ API Gateway


ตัวอย่างคือผมสร้าง API ชื่อว่า testapi ในนี้ก็จะสามารถสร้าง resource ได้ครับ จะว่าง่ายๆมันคือ route ก็ได้นะ เข้าใจง่ายดี เราก็เลือก Actions > create resource เลยครับ ใส่ resource name และ path ที่จะใช้เลยครับ

สร้าง resource ที่ชื่อว่า messages


ตอนนี้ผมสร้าง resource ชื่อว่า messages แล้ว ต่อไปก็ใส่ http method ให้มันหน่อยครับ เลือกที่ Actions > create method ผมเลือกเป็น method GET ครับ จะได้หน้าตาแบบนี้

setup API Gateway เข้ากับ Lambda function


เมื่อเลือก method แล้ว จะมีให้เลือกต่อว่าจะใช้ API Gateway ส่งต่อไปที่ไหน เราก็จะเลือกให้เมื่อมี request เข้ามาที่ /messages ด้วย method GET จะส่งต่อไปที่ Lambda function helloword ที่เราสร้างไว้ เลือกแล้วก็กด save ต่อได้เลย จะได้หน้าตาแบบนี้

flow การทำงานของ API Gateway และ Lambda function ครับ


นี่ครับ โครตเท่ มันจะแสดงเป็น flow เลยครับว่าตั้งแต่ client เข้ามาจะต้องผ่าน API Gateway และส่งต่อไปยัง Lambda function ที่ชื่อว่า helloword แล้วจะมี response กลับไปยัง client

ในตรงนี้เราสามารถ test API ของเรากับ Lambda function ได้โดยการกดปุ่ม TEST ที่เป็นรูปสายฟ้า ก็จะได้ response ใน callback ของ Lambda function ที่เราสร้างไว้ครับ

สามารถ test API ได้ในนี้เลย


เมื่อลองดูจะได้ response body เป็น “Hello World!!” ตามที่เราสร้างไว้ใน callback ของ Lambda function ครับ

สุดท้ายตอนนี้ API ของเรายังเป็น Private อยู่ครับ เราต้อง Deploy API นี้ออกไปก่อนโดยเลือก Actions > Deploy API เลือก stage ให้เรียบร้อยครับ เสร็จแล้วเราจะได้ url สำหรับ API นี้ครับ

url สำหรับใช้เข้าถึง resource ลองยิงเข้าไปที่ url ดูครับ

ลองยิง API ผ่าน postman


ผ่าม!!! เรียบร้อยครับ

สุดท้ายตอนนี้เราสามารถใช้งาน Lambda Function ร่วมกันกับ API Gateway ได้แล้วครับ ไม่ยากเลยใช่ไหมครับ สำหรับผมมองว่า Lambda function เป็นอะไรที่มีประโยชน์มากครับ เราสามารถเพิ่มลูกเล่นให้กับการใช้งานเซอร์วิสของ AWS ได้หลายอย่างเลยครับ ในบทความหน้าจะมาเขียน Lambda function ใช้งานร่วมกันกับ S3 ดูครับ

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

0
122