AWS Services: AWS Step Functions
เอาหละ หลังจากที่เราได้รู้เรื่อง AWS Services ไปบางส่วนจากบทความที่แล้วไม่ว่าจะเป็น AWS Organization, AWS Landing Zone และ AWS Single Sign-on แต่ว่าถ้าใครยังไม่ได้อ่านก็สามารถกดไปตาม link นี้ได้เลย
เรายังมีอีก Service นึงที่มีความน่าสนใจไม่แพ้กันและคิดว่าถ้าเราสามารถนำเข้ามาช่วยงานของเรา ทำให้เราสะดวกสบายมากยิ่งกว่าเดิมในการจัดการ workflow การทำงานของ Application ของเราให้ทำงานแบบ Automation ได้ นั่นคือ . . .
AWS Step Functions ตัวนี้ที่เรากำลังจะมาพูดคุยกันในครั้งนี้
โดยปกติแล้วไม่ว่าจะเป็น Application ไหนก็ตามต่างก็มี workflow การทำงานด้วยกันอยู่แล้ว ยกตัวอย่างเช่น หลังจากที่ปิดระบบแล้ว ต้องการให้ run program batch เพื่อที่จะ import หรือ export data ออกไปใช้งานกับ Service ตัวอื่น ซึ่งก็เป็นไปได้อีกที่ program batch นั้น อาจจะมีการเรียกใช้มากกว่าหนึ่ง program และยังมีลำดับในการทำงานที่มีความเกี่ยวข้องกัน และการทำงานนั้นยังต้องมีการตรวจสอบความถูกต้องในการ run batch ตัวนั้นอีก และถ้า run ผ่านแล้ว เรายังอยากที่จะให้ run program ไหนต่อ แล้วถ้ามีปัญหาเกิดขึ้นเราอยากจะให้ Application ทำงานอย่างไร จะให้ส่ง notification หรือว่าอยากจะสั่งให้มีการ rerun อีกรอบหรือเปล่า
จะเห็นว่าจากตัวอย่างการทำงานที่ยกมา ถ้าเราจะต้องสร้างทุกอย่างขึ้นมาเอง ต้อง set อะไรเองทั้งหมดคงเป็นงานที่หนักหน่วงพอตัวเลยทีเดียวและยังเสี่ยงที่จะมีความผิดพลาดเกิดขึ้นได้ถ้าเราต้อง set ทุกอย่างให้ครบและทำงานได้อีก
แล้วมันจะมีทางไหนได้บ้างมั้ยนะ ที่เราจะสร้าง workflow ขึ้นมาแบบไม่ต้องยุ่งยากขนาดนั้น แล้วเรายังคงมี workflow การทำงานครบถ้วนตามที่เราต้องการได้อยู่
ทาง AWS เค้าได้คิดมาแล้วว่าปัญหาทรงนี้ มันจะต้องเกิดขึ้นมาอย่างแน่นอน ก็เลยได้สร้าง Service นึงขึ้นมาเพื่อตอบโจทย์การทำงานรูปแบบนี้
นั่นก็คือ AWS Step Functions นั่นเองงงงงง
เกริ่นมายาวขนาดนี้ผมคิดว่าเราน่าจะพอเข้าใจถึงประโยชน์ของ Service ตัวนี้ขึ้นมาบ้างแล้ว คำถามถัดมา คือถ้าเราอยากจะใช้งาน Service ตัวนี้จริงๆจังๆขึ้นมาเราจำเป็นต้องรู้อะไรบ้างหละ หรือว่าการทำงานของ AWS Step Functions เป็นอย่างไร เราถึงจะใช้งาน magic Service ตัวนี้ได้…
State มองง่ายๆ State นี้เปรียบได้กับ task หนึ่ง task ที่เราอยากให้ application ของเราทำงาน อย่างเช่นอาจจะเป็น task ของการ run batch สักตัวนึง หรือว่าเป็น task ของการส่ง Email ออกไปให้กับ users รวมไปถึงสิ่งที่เราอยากจะสั่งให้ workflow ของเราทำเมื่อมี error เกิดขึ้น
เมื่อมี State หลายๆ State แล้วเราต้องการทำจะนำมาประกอบมาเป็น workflow สิ่งที่มา control ตรงจุดนี้ เราจะเรียกมันว่า State machines เราสามารถ create flow ของ State ได้ตามงานที่เราได้ design เอาไว้ ส่วนนี้นอกจากที่เราจะให้แต่ละ State run เป็น Sequence ได้แล้วเรายังสามารถ set ให้ State run แบบ parallel ได้ด้วย
ต่อมาเมื่อ State machines ถูกสั่งให้เริ่มมีการทำงาน workflow ก็จะเริ่มทำงานตั้งแต่ State แรกไล่ลำดับไปตาม workflow ที่สร้างขึ้น โดยในแต่ละ State จะมีการรับ input เข้ามาและส่ง output ออกไปให้กับ State ถัดไป ถ้า output นั้นมี condition ตรงกับที่ State ถัดไป set เอาไว้ State นั้นๆก็จะเริ่มทำงานต่อไปเรื่อยๆ
การสร้าง State machines และ State นั้น รองรับการสร้างทั้งจากหน้า GUI ของ AWS Step Functions เอง โดยเราสามารถที่จะกดเลือก Services ที่ต้องการมาสร้างและเพิ่มค่า config ผ่านหน้าจอได้เลย
หรือว่าใครอยากจะเขียน code เพื่อสร้าง workflow ก็สามารถทำได้เช่นกันเพราะตัว AWS Step Functions สามารถรองรับการ create State machines ผ่านการเขียน code แล้วนำมา generate ให้เป็น flow สวยๆได้ โดย code จะอยู่ในรูปแบบของ json ส่วนใครจะเลือกแบบไหนตามความถนัดของแต่ละท่านได้เลย
ตัวอย่างการใช้ AWS Step Functions
เมื่อมีการพูดถึงข้อดีของ Service ตัวนี้ไปแล้วแต่ไม่มีตัวอย่างการใช้งานเลยหลายๆคนคงมองไม่เห็นภาพว่ามันสะดวกสบายแค่ไหน AWS เลยมี example projects เล็กๆ ที่จะมาทำให้ทุกคนเข้าใจถึงการใช้งานมากยิ่งขึ้น โดย AWS เองก็ได้เตรียมรูปแบบของการใช้งาน AWS Step Functions ไว้หลากหลายอยู่พอสมควร สามารถเข้าไปลองศึกษาการใช้งานผ่าน Projects เหล่านี้เลยก็ได้
https://docs.aws.amazon.com/step-functions/latest/dg/create-sample-projects.html
จากตัวอย่าง project ของ AWS Step Functions จะเห็นได้ว่าตัวของ Service นี้เองสามารถนำไป integrate เข้ากับ Services อื่นบน AWS ได้อีกจำนวนมาก เพื่อตอบโจทย์การใช้งานที่หลากหลายไม่ว่าจะเป็น การทำ ETL job, การทำ Machine learning รวมถึง การจัดการ cluster ของ EKS และอีกหลายๆ Services ที่ใช้งานได้ ทาง AWS ก็ได้มีสรุปรายชื่อของ Services ที่ support การใช้งานผ่าน AWS Step Functions เอาไว้ให้เลือกตามความต้องการ
Lists ของ Services ที่เอามาใช้งานร่วมกับ AWS Step Functions
https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-services.html
ทาง ตรีเพชร ไอที โซลูชั่นส์ เองก็ได้มีการนำข้อดีของ AWS Step Functions นี้เองมาปรับใช้กับ Application ของบริษัทเหมือนกัน ยกตัวอย่างเช่น ในการทำ workflow ของการ export data จากระบบหนึ่งไปอีกระบบหนึ่งแล้วทำการ process data ให้เหมาะสมกับที่ระบบจะเอา data ไปใช้งานต่อได้เลย และยังให้ส่ง alert หา Engineer เมื่อมี error เกิดขึ้นระหว่างที่ทำงาน ทำให้ลดขั้นตอน operation ลงไปได้มากโขเลย
ประโยชน์ทางอ้อมที่ได้อีกอย่างนึงคือ การที่เราจะเขียนเป็น workflow ได้เราต้องเข้าใจการทำงานจริงๆของ workflow นั้นๆ ซึ่ง AWS Step Functions ช่วยให้ผู้เกี่ยวข้องมีความเข้าใจตรงกันว่า workflow ทำงานยังไงและ State machines configuration นั้น ก็เปรียบเหมือนเป็น Document as code และยังเป็น Document ที่ยังสามารถทำงานได้ด้วย มันดีมั้ยหละะ…
เดี๋ยวจะลองยก workflow ที่ทาง ตรีเพชร ไอที โซลูชั่นส์ ที่ใช้ AWS Step Functions มาช่วยจัดการมาเป็นตัวอย่างสักตัวนึงจากหลายๆตัวที่ได้ใช้งานจริงไปแล้ว
ภาพข้างบนคือหนึ่งใน workflow ของจริงที่ทาง ตรีเพชร ไอที โซลูชั่นส์ ได้นำมาปรับใช้กับงานในปัจจุบัน จะเห็นว่าตัว AWS Step Functions เองสามารถที่จะ set ให้ workflow ทำงานเป็นแบบ parallel run พร้อมกัน 4 workflows ได้ เพื่อลดเวลาของการทำ operations ที่เกิดขึ้น และใน workflow หลักนั้นก็ยังที่จะใส่ workflow ย่อยเข้าไปใน workflow ตัวหลักได้ และยังมีการเรียกใช้ AWS EventBridge อีกด้วยพร้อมกับมีการ set ให้มีการส่ง notification ถ้าหากว่าใน workflow มี error เกิดขึ้นทำให้เข้ามาตรวจสอบและแก้ไขได้ทันเวลา
จนถึงตรงนี้หลายๆคนคงคิดว่า แค่ workflow นิดๆหน่อยๆ จะไปใช้ AWS Step Functions มาจัดการทำไมให้เปลืองเงิน ค่า cost ต่อเดือนอีก เดี๋ยวตอนต่อไปจะอธิบายให้เข้าใจว่ามันแพงอย่างที่คิดจริงเหรอ ?
Pricing ของ AWS Step Functions
เรื่องราคา ตรงนี้ AWS เค้าก็ใจดีที่ให้เราใช้งาน AWS Step Functions free ถึง 4000 State transitions ต่อเดือน ซึ่ง State transitions ก็คือการย้ายทำงานจาก task นึงไปอีก task นึง โดยจะคิดราคา $0.025 per 1,000 state transitions สำหรับ standard workflow
ส่วนของ ตรีเพชร ไอที โซลูชั่นส์ เองเรายังใช้งาน workflow ภายใน limit ของ free quota transitions ต่อเดือน หมายความว่าเราสามารถใช้งาน Service ดีๆตัวนี้แต่ยังไม่ต้องจ่ายเงินสักบาท แต่ต่อให้เราใช้งานเกิน limit ไปจริง ค่าใช้จ่ายที่เกิดขึ้นก็จะเห็นได้ว่าราคาต่อเดือนยังคงต่ำมากอยู่ดี
แต่ๆๆๆๆ ราคานี้นั้นเป็นเฉพาะของ AWS Step Functions เท่านั้นไม่ได้รวมถึง resources อื่นที่ ตัวมันเองไปสั่งการ ถ้ามีการสั่งให้มีการ launch ECS ขึ้นค่าใช้จ่ายของ ECS ต้องจ่ายแยกนะ ระวังดีๆเน้อ
https://aws.amazon.com/step-functions/pricing/
จนมาถึงตอนนี้ทุกคนน่าจะได้ประโยชน์ของ AWS Services ดีๆหนึ่งตัว ที่เข้ามาช่วยงานของเราได้ ก็อยากให้ลองเอา Service นี้ไปใช้งานดูเผื่อว่าจะตอบโจทย์การทำงานของแต่ละคนได้
หากว่าถ้านำไปใช้แล้วมีประโยชน์หรือมีคำแนะนำอะไรเพื่มเติมก็สามารถมาพูดคุยกันได้ ส่วน AWS Service ตัวไหนที่ทางเราจะเอามา share อีกติดตามได้ในบทความถัดไปนะครับ