มือใหม่หันเขียนโค้ด
Software Design

มาสร้าง Function App กัน

เขียนโค้ดโดยไม่สนใจเรื่องเซิฟเวอร์ล่ม กับ Azure Serverless

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

Azure Portal จะทำตามในรอบนี้ให้เข้าไปที่ https://portal.azure.com เน่อ ส่วนถ้าใครยังไม่ได้สมัครก็ไปสมัครให้เรียบร้อยแซ๊ร (วิธีสมัครจิ้มตรงนี้)

🤔 Serverless คืออะไร ?

หนึ่งใน Concept ที่อยู่บน Microsoft Azure คือตัวที่เรียกว่า Serverless หรือพูดง่ายๆคือ Developer ทั้งหลายเอ๋ยจง focus กับเรื่องโค้ดซะ ส่วนเรื่อง Server ข้าจะจัดการให้เจ้าเองงงงงง หรือพูดเป็นภาษาคนคือ เราไม่ต้องสนใจเรื่องเซิฟเวอร์เลยนั่นเอง ดังนั้นเราก็ไม่ต้องมี Admin มาคอยนั่งจัด spec server อะไรพวกนี้อีกแล้ว เราแค่เขียนโค้ด แล้วก็โยนขึ้นคลาว์ เพียงเท่านี้มันก็จะพร้อมให้เราใช้งานได้นั่นเอง

🤔 อยากได้ Function App ยังไง ?

1.ที่เมนูด้านซ้ายมือให้เลือก Resource groups ซะ แล้วในหน้าตรงกลางให้เลือกชื่อ Resource group ที่เราสร้างไว้

2.หลังจากที่เข้ามาใน Resource group แล้วให้กดปุ่ม + ที่มุมบนซ้ายของเมนู

3.ระบบจะพาเราไปที่หน้า Marketplace ซึ่งในหน้า marketplace นี้เป็นหน้าหลักในการเลือก service ที่เราจะทำการสร้าง ซึ่งในรอบนี้เราจะพิมพ์ในช่องค้นหาว่า Function App แล้วกด Enter เลย

4.ถัดมาเขาก็จะบอกรายละเอียดเกี่ยวกับ Function App ว่ามันคืออะไร จะไปศึกษาลองเล่นต่อได้ยังไง ราคาที่ต้องจ่ายต่อเดือนคิดยังไง บลาๆ ก็ถ้าอ่านจนหนำใจแล้วก็จิ้มปุ่ม Create เบาๆไป 1 ทีงับ

5.ในขั้นตอนถัดมาเขาก็จะถามรายละเอียดของ Function App ของเรา ซึ่งในส่วนนี้ก็ค่อยๆเลือกใส่ทีละอันเลย แล้วพอใส่เสร็จก็กดปุ่ม Create โลด

ชื่อ

รายละเอียด

App name

ชื่อ Function App ที่จะสร้าง

Hosting Plan

รูปแบบการเก็บเงิน

Location

ตัว Service นี้จะตั้งอยู่ที่ไหน (ทดสอบในไทยก็เลือก Southeast Asia นะ)

Runtime Stack

เราจะเขียน function ด้วยภาษาอะไร ในที่นี้ผมใช้ C# ครับ ส่วนเพื่อนๆแล้วแต่เลย

Storage

จะให้มันเก็บบันทึกๆการทำงานต่างๆที่เกิดขึ้นกับ Function App นี้ไว้ที่ไหน

Hosting Plan รูปแบบการเก็บเงินของ Function App มี 2 แบบตามด้านล่างนี้นะครับ 1.Consumption Plan - จะเก็บเงินทุกๆครั้งที่มีการเรียกใช้งาน แยกออกมาต่างหาก แล้วไปจ่ายตอนสิ้นเดือน 2.App Service Plan - จะไม่ได้เก็บเงินเพิ่ม เพราะมันจะเอาตัว Function App ไปทำงานบน App Service ที่เราสร้างไว้อยู่แล้ว ซึ่งสิ้นเดือน App Service Plan เราคิดเท่าไหร่เขาก็จะชาร์จตามนั้น แต่ข้อเสียคือแอพอื่นๆที่อยู่บน Service Plan นั้นอาจจะมีผลกระทบ เพราะ Function App ก็จะไปใช้ Resource ของ Server ด้วย

ถ้าไม่อยากให้การทำงานของ Function App ไปกระทบกับแอพอื่นๆให้เลือกเป็น Consumption Plan นะครับมันจะได้ไม่ยุ่งกับคนอื่นเลย หรืออีกกรณีคือสร้าง App Service Plan ที่เป็นตัวแชร์ให้ตัวที่เป็น Background process มาทำงานเล่นกันที่ App Service Plan ตัวนี้เลยก็ใช้ได้ในระดับนึงครับ แล้วค่อยทำ Scaling เอาอีกที

6.รอจนกว่าจะเสร็จก็เป็นอันเสร็จพิธี

🤔 สร้างเสร็จแล้วไงต่อ ?

จากขั้นตอนด้านบน มันเป็นการสร้าง service ที่เรียกว่า Function App ขึ้นมาเฉยๆ ซึ่งขั้นตอนถัดไปเราก็จะทำการลองเขียนโค้ดเพื่อเอาไปให้มัน Run เล่นกันบ้างตามขั้นตอนด้านล่างนี้เลย

1.เข้าไปที่ resource group ที่สร้างไว้ แล้วจะเห็น Function App กับผองเพื่อนของมันโผล่ขึ้นมาละ ให้จิ้มสัมผัสมันเบาๆอย่างอ่อนโยน 1 ที

2.ถัดมาเขาก็จะโชว์รายการ Function ต่างๆที่เรามี ซึ่งกรณีนี้เราพึ่งสร้างเสร็จ มันเลยไม่มี function อะไรให้เราเลย ดังนั้นเราก็จะทำการสร้าง function กันละโดยการกดปุ่ม + เลยจ๊า

3.ในการสร้าง function เราจะต้องเลือกว่าเราจะเขียนโค้ดด้วยวิธีไหน ซึ่งปรกติมีทั้ง 4 แบบ แต่ในรอบนี้เราจะใช้แบบที่เรียกว่า In-portal ครับ

me

ชื่อ Logic App ที่จะสร้าง

Visual Studio

เขียนโค้ดบน Visual Studio IDE แล้วค่อยเอามาขึ้น Function App

VS Code

เขียนโค้ดบน Visual Studio Code แล้วค่อยเอามาขึ้น Function App

Any editor + Core Tools

เขียนโค้ดบน IDE อื่นๆที่เราถนัด แล้วค่อยเอามาขึ้น Function App

In-portal

เขียนโค้ดบนคลาว์เลย

4.ถัดมาเขาจะถามว่าตัว function ของเราจะให้มันทำงานเมื่อไหร่ ซึ่งตัวหลักจะมี 3 แบบ แต่ในกรณีนี้เราจะเลือก Webhook + API ครับ

tudio

เขียนโค้ดบน Visual Studio IDE แล้วค่อยเอามาขึ้น Function App

Webhook + API

เราจะได้ลิงค์มา 1 ตัว ซึ่งเมื่อใครก็ตามเปิดลิงค์นี้ มันจะทำให้ function เราทำงานทันที

Timer

ตั้งเวลาไว้ ซึ่งเมื่อถึงเวลาที่กำหนด มันจะทำให้ function เราทำงานทันที

More templates

เลือกใช้ template แบบอื่นๆ (ลองกดเล่นดูได้นะ)

5.เป็นอันเรียบร้อย ตอนนี้เราก็จะได้ function มา 1 ตัวพร้อมกับโค้ดตัวอย่างพื้นฐานมาให้ด้วย คราวนี้เราก็จะลอง copy ลิงค์ที่ได้เพื่อเตรียมสั่งให้มันทำงาน โดยการกดปุ่ม Get function URL ตามรูปเบย

เสร็จแล้วก็กดปุ่ม Copy ครับ

อธิบายโค้ด โค้ดตัวอย่างที่เขาเตรียมให้ไว้คือ เมื่อมีใครเรียก URL นี้มา มันก็จะไปหาค่า name มาเก็บไว้โดยขึ้นอยู่กับวิธีเรียก [เรียกมาแบบ GET] ตัวโปรแกรมจะไปอ่าน query string เพื่อหาค่า name มาเก็บไว้ในตัวแปร name [เรียกมาแบบ POST] ตัวโปรแกรมจะไปหาใน request body เพื่ออ่านค่า name มาเก็บไว้ในตัวแปร name ถัดมาเขาก็จะตอบกลับว่า Hello แล้วตามด้วยค่า name ที่เราใส่เข้ามา แต่ถ้าเราไม่ได้ใส่เขาก็จะบอกว่า ให้เราใส่ค่า name เข้ามาด้วย

6.หลังจากที่เรา copy แล้วถัดไปเราก็จะเอาไปลองเรียกดูผ่าน web browser ครับ ซึ่งพอลองเรียกเราก็จะได้ผลลัพท์แบบนี้

7.สาเหตุที่เป็นแบบนี้ก็เพราะว่าเรายังไม่ได้ส่งค่า name เข้าไปด้วย ดังนั้นเราก็จะลองส่ง name เข้าไปใน query string นะครับ โดยการเรียก URL ผ่าน web browser เหมือนเดิมนั่นแหละแต่ต่อท้ายมันด้วย &name=Saladpukลงไปครับ ซึ่งก็จะได้ผลลัพท์แบบนี้

8.นอกจากนี้เรายังสามารถลองเรียกใช้งานพร้อมดูผลลัพท์การทำงานแบบ real time ได้ด้วย โดยการกดปุ่ม Test ด้านขวาแล้วสั่งให้มัน Run ตามรูปเลยครับ

ผลลัพท์จากการ Run ก็จะออกมาในโซนสีแดงครับ

เป็นอันเสร็จเรียบร้อยแล้ว จากตัวอย่างก็จะเห็นว่าเราไม่ต้องไปยุ่งกับเซิฟเวอร์เลยว่าจะเลือก server แบบไหน CPU เท่าไหร่ Ram เท่าไหร่ ไรงี้ เรามีหน้าที่เขียนโค้ดเพื่อให้โปรแกรมมันทำงานตามที่เราอยากให้เป็นก็พอ ส่วนเรื่องเซิฟเวอร์ล่มหรือไม่ล่มทาง Microsoft จะดูแลรับผิดชอบให้เราเองไงล่ะ

🎥 ตัวอย่างการทำ Function App

🎯 บทสรุป

เพียงแค่ใช้ Function App ก็จะทำให้ Developer ไม่ต้องมาคอยปวดหัวเรื่องเซิฟเวอร์ล่มอีกต่อไป เนื่องจากคลาว์จะเป็นคนดูแลทุกอย่างของเซิฟเวอร์ให้เรานั่งเอง ดังนั้นก็สามารถ focus กับการเขียนโค้ดได้สบ่ายสบายอุราแล้ว

ข้อควรระวัง ถ้าเราสร้าง Function App โดยใช้ App Service Plan เราต้องบริหารจัดการเรื่องทรัพยากรเครื่องเหมือนเดิมนะครับ ดังนั้นควรทำความเข้าใจเรื่องพวกนี้ดีๆก่อนค่อยสร้างนะครับ