อันนี้เป็น tips เล็กๆ ที่พลอยากเอามาแชร์ โดยการเขียน note ไว้ครับ
ในการสร้างโปรเจค Azure Function ขึ้นมาบนเครื่องคอมพิวเตอร์ของเรา เราจะพบว่าตัวเลือกด้านภาษาโปรแกรม (โดยเฉพาะที่มีปัจจุบัน) จะมีตามนี้
- dotnet
- dotnet (isolate process)
- node
- python
- powershell
- custom
ส่วนที่ทำให้พวกเราหลายๆ คนแปลกใจ น่าจะเป็น 2 ตัวเลือกแรกนั่นเอง
เอาแบบง่ายๆ ก่อนเนอะ
ก่อนอื่นก็ต้องเข้าใจภาพด้านล่างให้เห็นภาพประมาณว่า ปกติ function ของเราก็คือโค้ดชุดหนึ่งที่เอาไปรันบนเครื่องคอมพิวเตอร์นั่นเอง แต่จะรันใช้งานในรูปแบบไหนนั้นก็จะแยกออกเป็น 2 รูปแบบครับ
dotnet แบบปกติ (ภาพซ้าย)
- ทำงานรวมกับเครื่องที่ host ตัวโค้ด function อยู่ ส่งผลให้เกิดเงื่อนไขที่ตัว function ของเราต้องอิงการทำงานหลายๆ อย่างของเครื่อง host เช่น
- เครื่อง Host นั้นจะลง Runtime เป็นเวอร์ชั่น Long-time support (LTS) เสมอ
- ไม่รองรับ .NET Framework จะมีแค่ .NET Core และ .NET 6 ขึ้นไป
dotnet แบบ isolate process (เรียกเต็มๆ ว่า isolate worker process)
- แยกการทำงาน process ของ function และ process ของเครื่อง host ออกจากกัน ทำให้ได้ข้อดีหลายอย่างคือ
- ตัว process เลือกทำงานกับ runtime ที่ต้องการได้
- ใช้งาน middleware ได้สะดวก
- ใช้ dependency injection ได้
- แต่ก็มีข้อจำกัดติดมาด้วยนะ เช่น
- ถึงเราเลือกใช้ .NET Framework ในการพัฒนา Function app ได้ แต่ก็ต้องเลือกเครื่อง host เป็น Windows ด้วยนะ ทำให้ค่าใช้จ่ายสูงขึ้น
อ้างอิง – Guide for running C# Azure Functions in an isolated worker process | Microsoft Learn