ข้ามไปยังเนื้อหาหลัก

Azure Functions: ทริกเกอร์ ไบนดิง และการโฮสต์แบบเข้าใจง่าย

เรียนรู้ว่า Azure Functions คืออะไร วิธีสร้างแอปแบบเซิร์ฟเวอร์เลสที่ขับเคลื่อนด้วยเหตุการณ์ และความเชื่อมโยงของทริกเกอร์ ไบนดิง ตัวเลือกการโฮสต์ และเวิร์กโฟลว์
· 7 นาที อ่าน

สำรวจด้วย AI

Azure Functions เป็นส่วนหนึ่งของบริการคอมพิวต์แบบไร้เซิร์ฟเวอร์ของ Microsoft ช่วยให้รันโค้ดขนาดเล็กเพื่อตอบสนองต่อเหตุการณ์ได้โดยไม่ต้องดูแลจัดการเซิร์ฟเวอร์เอง

ตัวอย่างเช่น ฟังก์ชันสามารถทำงานเมื่อมีคำขอ HTTP เข้ามา เมื่อมีการอัปโหลดไฟล์ไปยังสตอเรจ หรือเมื่อถึงเวลาตามกำหนด

“ไร้เซิร์ฟเวอร์” ไม่ได้หมายความว่าไม่มีเซิร์ฟเวอร์เลย แต่หมายถึง Azure เป็นผู้จัดการโครงสร้างพื้นฐานให้ทั้งหมด ตั้งแต่การจัดเตรียม การปรับสเกล ไปจนถึงการบำรุงรักษาอยู่เบื้องหลัง

ในคู่มือนี้ จะอธิบายองค์ประกอบพื้นฐาน ได้แก่ ทริกเกอร์ ไบนดิง ตัวเลือกการโฮสต์ และตัวอย่างลงมือทำเพื่อเริ่มต้นได้ทันที

Azure Functions คืออะไร

Azure Function คือโค้ดชิ้นเล็กที่รันเมื่อถูกทริกเกอร์ด้วยเหตุการณ์ตามที่กำหนด เขียนลอจิกเพียงอย่างเดียว ส่วนที่เหลือ Azure จะจัดการให้

มีแนวคิดหลัก 3 ประการที่กำหนดโมเดลนี้

  1. การประมวลผลแบบขับเคลื่อนด้วยเหตุการณ์ ทำให้โค้ดรันเฉพาะเมื่อมีสิ่งเกิดขึ้น ไม่ได้รันตลอดเวลา
  2. การปรับสเกลอัตโนมัติ Azure จะเพิ่มหรือลดทรัพยากรคอมพิวต์ตามความต้องการ
  3. การคิดค่าบริการตามการใช้งานจริง ในบางแผนโฮสต์จะจ่ายเฉพาะเวลาที่โค้ดรันจริง ๆ

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

การทำงานของ Azure Functions

วงจรชีวิตของฟังก์ชันสามารถมองเป็นรูปแบบง่าย ๆ ดังนี้

  1. เกิดเหตุการณ์ เช่น อัปโหลดไฟล์หรือมีการเรียก HTTP
  2. ทริกเกอร์ตรวจจับเหตุการณ์และสตาร์ทฟังก์ชันทันที
  3. ฟังก์ชันรันโค้ดของตน
  4. ไบนดิงเชื่อมต่อฟังก์ชันกับบริการอื่นเพื่ออ่านอินพุตหรือส่งเอาต์พุตที่ต้องการ
  5. Azure จัดการทรัพยากรคอมพิวต์เบื้องหลังตามแผนโฮสต์ที่เลือก

โฟลว์นี้แทบไม่ต่างกันไม่ว่าภาษาโปรแกรมหรือทางเลือกการโฮสต์จะเป็นแบบใด ต่างกันแค่ทริกเกอร์ โค้ด และไบนดิง

ทริกเกอร์ของ Azure Functions

ทุกฟังก์ชันต้องมีทริกเกอร์เพียงตัวเดียว ทริกเกอร์กำหนดว่าฟังก์ชันเริ่มทำงานอย่างไร ต่อไปนี้คือประเภทที่พบบ่อยและควรรู้จัก:

  • HTTP Trigger: รันฟังก์ชันเมื่อได้รับคำขอ HTTP นิยมใช้สร้าง API
  • Timer Trigger: รันฟังก์ชันตามกำหนดเวลา เช่น ทุกชั่วโมงหรือวันละครั้ง
  • Blob Storage Trigger: รันฟังก์ชันเมื่อมีการเพิ่มหรือแก้ไขไฟล์ใน Azure Blob Storage
  • Queue Trigger: รันฟังก์ชันเมื่อมีข้อความใหม่มาถึงคิว
  • Event Hub Trigger: รันฟังก์ชันเพื่อตอบสนองต่อสตรีมของเหตุการณ์ เหมาะกับข้อมูลปริมาณมาก
  • Cosmos DB Trigger: รันฟังก์ชันเมื่อมีการสร้างหรืออัปเดตเอกสารในคอนเทนเนอร์ของ Cosmos DB โดยอาศัย Change Feed
  • Service Bus Trigger: รันฟังก์ชันเพื่อตอบสนองต่อข้อความจากคิวหรือทอปิกของ Azure Service Bus มักใช้ในระบบเมสเซจจิงระดับองค์กรและการแยกระบบ
  • Durable Functions: ส่วนขยายของ Azure Functions ที่ช่วยเขียนฟังก์ชันแบบมีสถานะในสภาพแวดล้อมไร้เซิร์ฟเวอร์เพื่อจัดลำดับเวิร์กโฟลว์หลายขั้นตอนที่ซับซ้อน

ไบนดิงของ Azure Functions

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

Input bindings

เป็นการป้อนข้อมูลให้ฟังก์ชันโดยไม่ต้องเขียนโค้ดอินทิเกรชันเอง ตัวอย่างเช่น ฟังก์ชันสามารถอ่านเรคอร์ดจากฐานข้อมูลได้อัตโนมัติ เพียงประกาศไบนดิง

Output bindings

ช่วยส่งผลลัพธ์ของฟังก์ชันไปที่อื่น เช่น ใช้เอาต์พุตไบนดิงเพื่อเขียนข้อความที่ประมวลผลแล้วลงในคิว

ตัวอย่างเพื่อให้เห็นภาพ: ทริกเกอร์ Blob Storage สตาร์ทฟังก์ชันเมื่อมีการอัปโหลดรูปภาพ จากนั้นเอาต์พุตไบนดิงจะบันทึกรูปที่ปรับขนาดแล้วไปยังคอนเทนเนอร์สตอเรจอื่น การเชื่อมต่อสตอเรจทั้งหมดจัดการโดยไบนดิง โดยไม่ต้องเขียนโค้ดไคลเอนต์สตอเรจเอง

วิธีสร้าง Azure Function แรก

ตัวอย่างง่าย ๆ ของฟังก์ชันที่ทริกเกอร์ด้วย HTTP และส่งคำทักทายกลับ มีโฟลว์ดังนี้

  1. สร้าง Function App ซึ่งเป็นคอนเทนเนอร์สำหรับฟังก์ชันบน Azure
  2. เลือกรันไทม์และภาษาที่ต้องการเขียนโค้ด
  3. เพิ่มฟังก์ชันใหม่ภายใน Function App
  4. เลือก HTTP trigger เพื่อให้ฟังก์ชันตอบสนองต่อคำขอเว็บ
  5. เพิ่มความสามารถง่าย ๆ เช่น อ่านชื่อจากคำขอแล้วส่งกลับว่า “Hello, [name].”
  6. รันและทดสอบฟังก์ชันด้วยเครื่องมือทดสอบในตัว หรือส่งคำขอจากเบราว์เซอร์ก็ได้
  7. ดีพลอยไปยัง Azure เพื่อให้พร้อมใช้งานจริง

ตัวอย่างนี้ตั้งใจให้เล็กเพื่อชี้ให้เห็นรูปแบบ แล้วต่อยอดด้วยไอเดียของตนเอง

ภาษาที่ Azure Functions รองรับ

Azure Functions รองรับหลายภาษา เช่น:

  • C#
  • JavaScript/TypeScript
  • Python
  • Java
  • PowerShell

รูปแบบการรองรับและการพัฒนาจะแตกต่างกันตามภาษาและเวอร์ชัน ดังนั้นแนะนำให้ตรวจสอบ เอกสาร Azure ฉบับปัจจุบันก่อนเริ่มโครงการใหม่ เนื่องจากรายละเอียดเหล่านี้เปลี่ยนแปลงบ่อย

ตัวเลือกการโฮสต์ของ Azure Functions

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

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

การปรับสเกลและคอลด์สตาร์ทใน Azure Functions

มีอีกสองแนวคิดที่สำคัญเมื่อฟังก์ชันรันจริงในโปรดักชัน ได้แก่

การปรับสเกลอัตโนมัติ

Azure จะเฝ้าดูโหลดของฟังก์ชัน และเมื่อความต้องการเพิ่มขึ้นก็เพิ่มอินสแตนซ์คอมพิวต์ เมื่อความต้องการลดลงก็ลดอินสแตนซ์ ไม่ต้องจัดการเอง

คอลด์สตาร์ท

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

เคสการใช้งาน Azure Functions ที่พบบ่อย

โมเดลแบบขับเคลื่อนด้วยเหตุการณ์เหมาะกับปัญหาทั่วไปหลายอย่าง เช่น

API และเว็บฮุค

รองรับคำขอ HTTP ขาเข้าโดยไม่ต้องรันเว็บเซิร์ฟเวอร์ตลอดเวลา

การประมวลผลไฟล์และรูปภาพ

ทริกเกอร์ฟังก์ชันเมื่อมีไฟล์ลงในสตอเรจ แล้วปรับขนาด แปลงไฟล์ หรือสแกนได้ทันที

งานตามกำหนดเวลา

รันงานล้างข้อมูล รายงาน หรือการเตือนตามตัวตั้งเวลา โดยไม่ต้องมีเซิร์ฟเวอร์ที่เปิดตลอดเวลา

ไปป์ไลน์ประมวลผลข้อมูล

ประมวลผลข้อความหรือเหตุการณ์ตามที่เข้ามา ทีละขั้นอย่างเป็นลำดับ

IoT และการประมวลผลเหตุการณ์

รองรับข้อมูลจากเซนเซอร์หรืออุปกรณ์จำนวนมากที่สตรีมเข้ามา

งานเบื้องหลัง

ย้ายงานที่ช้า หรือทำเป็นครั้งคราว เช่น การส่งอีเมล ออกไป เพื่อไม่ให้บล็อกแอปหลัก

การมอนิเตอร์และการแก้ปัญหา Azure Functions

เมื่อฟังก์ชันออนไลน์แล้ว จำเป็นต้องมีมุมมองว่าประสิทธิภาพเป็นอย่างไร

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

ควรติดตามความล้มเหลวในการเรียกใช้งาน (invocation) ด้วย เพื่อทราบว่าเมื่อใดและทำไมฟังก์ชันถึงไม่สมบูรณ์ การมอนิเตอร์ประสิทธิภาพยังช่วยให้เห็นฟังก์ชันที่ช้าก่อนจะกลายเป็นปัญหา และสามารถกำหนดพฤติกรรมการรีทรายให้การรันที่ล้มเหลวลองใหม่อัตโนมัติได้

สรุป

Azure Functions เปิดทางให้รันโค้ดเพื่อตอบสนองต่อเหตุการณ์ โดยไม่ต้องจัดการเซิร์ฟเวอร์เบื้องล่าง ทริกเกอร์กำหนดเวลาที่ฟังก์ชันเริ่มทำงาน ส่วนไบนดิงช่วยเชื่อมต่อฟังก์ชันกับบริการอื่นได้ง่าย โดยไม่ต้องเขียนโค้ดอินทิเกรชันเพิ่ม

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

FAQs

Azure Functions คืออะไร

บริการแบบไร้เซิร์ฟเวอร์ที่รันโค้ดขนาดเล็กเพื่อตอบสนองต่อเหตุการณ์ โดยไม่ต้องจัดการเซิร์ฟเวอร์เอง

อะไรที่ทริกเกอร์ Azure Function ได้บ้าง

เหตุการณ์อย่างเช่น คำขอ HTTP ตัวตั้งเวลา การอัปโหลดไฟล์ หรือข้อความในคิว

ความแตกต่างระหว่างทริกเกอร์กับไบนดิงคืออะไร

ทริกเกอร์ใช้เริ่มฟังก์ชัน ส่วนไบนดิงเชื่อมต่อฟังก์ชันกับบริการอื่นเพื่อรับอินพุตหรือส่งเอาต์พุต

คอลด์สตาร์ทคืออะไร

ความหน่วงสั้น ๆ เมื่อต้องสตาร์ทฟังก์ชันหลังจากไม่ได้ใช้งานมาระยะหนึ่ง

Azure Functions รองรับภาษาใดบ้าง

C#, JavaScript/TypeScript, Python, Java และ PowerShell

หัวข้อ