ตัวอย่างการใช้งาน SAM — Lambda และ S3 Event Source

Mart — Tanathip Viriya
3 min readJun 25, 2020

--

หลักการทํางานของ Lambda แบบง่ายๆคือ Lambda เป็น Serverless ที่ function ของเราล่องลอยในอากาศ สิ่งที่จะทําให้มันทํางานได้ก็คือ event source หรือแหล่งกําเหนิด event นั้นเอง ซึ่งแหล่งกําเหนิด event เหล่านี้มีได้มากมายมากๆหรือมองรวมๆก็คือ AWS Services ทั้งหลายนั้นเอง

list ของ event source ทั้งหมดอยู่ด้านล่างนี้นั้นเอง

โดย event source ที่วันนี้เราจะพูดถึงก็คือเรื่องของ S3 โดยพอเราจะลงรายละเอียดเกี่ยวกับ event source ก็ให้เรานึกถึงเรื่องของ event มันเป็นแค่ request ที่มา trigger Lambda ของเรา

ดังนั้นวิธีคิดอย่างแรกคือ ศึกษา request เข้ามาหา Lambda แปลว่าเราก็ต้องอยากรู้วา่ request structure ที่ส่งเข้ามาหน้าตาแบบไหน? เพราะเราจะได้เอามา event data มาใช้ถูก เช่น ของ S3 จะส่งมาในรูปแบบของ JSON ที่ชื่อว่า Records (Array) แล้วก็ไล่ลงไปตามลําดับเลย

https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

หรือลองกดเข้าไปดูฉบับเต็มด้านล่างได้

ซึ่งวิธีคิดนี้ใช้ได้กับทุกๆๆๆๆ Event source ที่เข้ามาหา Lambda เลยนะ ไม่แตกต่างกันมัน Simple มากๆ

หลังจากเรารู้เรื่องของ Structure request และอื่นๆๆแล้ว เราก็แค่ไป set properties event ของ SAM function template แค่นั้น

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html

เพียงแค่นี้ Lambda Function ของเราก็จะผูกเข้ากับ Event จาก services ที่เราระบุไว้แล้วนั้นเอง

ต่อมาสิ่งที่เราต้องทําเป็นอย่างสุดท้ายนอกจากเขียน Handler ก็คือ ระบุ event type ของ services นั้นๆๆว่าจะให้มา trigger function ของเราด้วย type แบบไหน

ของ S3 event ที่ support ก็จะเป็นตามด้านล่างนี้คือ ถ้ามัน create, remove, restore เป็นต้น ก็จะสามารถใช้มาระบุเพื่อให้ trigger function เราได้

https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#supported-notification-event-types

ตัวอย่างเอามาใช้ก็จะหน้าตาแบบนี้ โดยเราเลือกจํา event create ทั้งหมดที่เกิดขึ้นกับ S3 bucket ชื่อ ImagesBucket นั้นเอง

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-s3.html

ตัวอย่างการใช้งาน SAM และ S3

Repository: https://github.com/howtoautomateinth/awesome-aws-workshop/tree/master/S3/s3-lambda-integration

การใช้ SAM กับ Event Source S3 เป็นอะไรที่ง่ายมากๆๆจริง คือ SAM มันมี template มากมายที่ให้เราพร้อมใช้งานอยู่แล้ว แค่ SAM init เราก็ได้ template s3 + lambda ละ

แต่สิ่งที่อยากให้รู้คือเรื่องของ sam delpoy ดีกว่า คือเวลาที่เราเติม parameter เข้าไปว่า — guided หรือ ไม่เติมแตกต่างกันตรงที่ว่า ถ้าเราเติม — guided มันจะคอยช่วยเราสร้าง configuration file ที่ชื่อว่า samconfig.toml ที่เป็นตัวระบุ paramter ต่างๆๆให้กับทาง sam เวลาที่ใช้ deploy ซึ่งหน้าตาจะออกมาเป็นแบบนี้

https://github.com/howtoautomateinth/awesome-aws-workshop/blob/master/S3/s3-lambda-integration/samconfig.toml

จะเห็นว่า samconfig.toml จะมี information ที่เราจะไว้ใช้ในการ deploy ทั้งหมด ตั้งแต่ stack name ที่จะไปโชว์ในหน้า cloudformation จนไปถึง parameter_overrides ที่หมายถึง ค่าที่เราจะส่งเข้าไปใน template.yaml นั้นเอง

ส่วน s3_bucket ตัวนั้นเป็น stack sam cli ที่ต้อง deploy ไว้เพื่อใช้ในการ ควบคุม resource ต่างๆเวลา sam สร้างนั้นเอง :)

ซึ่งนั้นคือจุดหลักของการ deploy sam เลยละ ส่วนที่เหลือ steps ก็จะเหมือนเดิมทุกครั้งคือ

  1. sam package (ตามด้วย template file name และ s3 bucket ที่เราจะเอา revision ไปเก็บไว้)
  2. sam deploy — guided / sam deploy

แค่นั้นมันก็จะช่วยให้เรา deploy application ของเราขึ้น aws ได้แล้ว

--

--