เว็บนี้มีลิงก์ affiliate — หากสมัครผ่านลิงก์ เราได้รับค่าคอมมิชชัน · Affiliate links.

คู่มือ DigitalOcean Functions 2026 — Serverless สำหรับนักพัฒนา

A practical developer's guide to DigitalOcean Functions, covering the serverless model, free tier, doctl deployment workflow, real-world use cases, and limitations compared to running a Droplet.

คู่มือ DigitalOcean Functions 2026 — Serverless สำหรับนักพัฒนา

Functions/Serverless คืออะไร

DigitalOcean Functions เป็นบริการ Serverless Computing ที่เปิดให้ผู้พัฒนารันโค้ดเป็นฟังก์ชันเดี่ยว ๆ โดยไม่ต้องเช่าหรือดูแลเซิร์ฟเวอร์เอง เหมาะกับงานที่ทำงานเป็นครั้งคราวหรือมีทราฟฟิกไม่สม่ำเสมอ ต่างจากการรัน Droplet ที่ต้องเปิดเครื่องทิ้งไว้ตลอดเวลาไม่ว่าจะมีคนเรียกใช้งานหรือไม่ก็ตาม บทความนี้พาไปดูตั้งแต่แนวคิดพื้นฐาน แผนฟรี ขั้นตอน deploy ด้วย doctl serverless ไปจนถึงข้อจำกัดที่ควรรู้ก่อนตัดสินใจใช้งานจริง DigitalOcean Functions สร้างขึ้นบนสถาปัตยกรรมของ Apache OpenWhisk โครงการโอเพนซอร์สสำหรับรันโค้ดแบบ event-driven โค้ดแต่ละชิ้นถูกแพ็กเป็น "function" รวมกลุ่มอยู่ใน "package" และหลาย package รวมกันเป็น "namespace" หนึ่งบัญชี DigitalOcean สามารถสร้างได้หลาย namespace เพื่อแยก environment เช่น dev, staging, production ออกจากกันชัดเจน หลักการทำงานคือ function จะไม่รันค้างอยู่ตลอดเวลาเหมือนโปรเซสบน Droplet แต่จะ "ตื่น" ขึ้นมาเมื่อมี trigger เรียกเข้ามา เช่น HTTP request ผ่าน API Gateway ที่ DigitalOcean จัดเตรียมให้อัตโนมัติ ตาราง cron สำหรับงานที่ต้องรันตามเวลา หรือ event จากระบบอื่นที่ยิง webhook เข้ามา เมื่อประมวลผลเสร็จ container ที่ใช้รันจะถูกเก็บคืนทรัพยากร (scale-to-zero) ทำให้ไม่มีค่าใช้จ่ายในช่วงที่ไม่มีการเรียกใช้งานเลย ซึ่งต่างจาก Droplet ที่คิดค่าใช้จ่ายตลอดเวลาที่เปิดเครื่องไว้ไม่ว่าจะมีทราฟฟิกหรือไม่ DigitalOcean Functions รองรับภาษาหลักคือ Node.js, Python, Go และ PHP ผ่าน custom runtime นักพัฒนาสามารถเขียนโค้ดฟังก์ชันแยกเป็นไฟล์เล็ก ๆ กำหนด dependency ผ่าน package manager ของแต่ละภาษาตามปกติ (npm, pip, go.mod) แล้วให้ DigitalOcean build เป็น container image ให้อัตโนมัติตอน deploy โดยไม่ต้องเขียน Dockerfile เอง รูปแบบนี้เหมาะกับงานเฉพาะจุดที่ไม่คุ้มจะเปิด Droplet แยกไว้ทั้งเดือน เช่น endpoint รับ webhook จากบริการภายนอก ฟังก์ชันประมวลผลรูปภาพหลังอัปโหลด หรือ cron job เล็ก ๆ ที่รันไม่กี่นาทีต่อวัน ส่วนรายละเอียดแผนฟรีและวิธี deploy จะอธิบายต่อในหัวข้อถัดไป

DigitalOcean Functions is a serverless computing service that lets developers run code as individual functions without renting or managing servers themselves. It suits work that runs occasionally or has uneven traffic patterns—different from running a Droplet where you pay to keep the machine on all the time whether anyone uses it or not. This article walks through the basics, the free tier, deployment steps with doctl serverless, and limitations to consider before committing to real use. DigitalOcean Functions is built on Apache OpenWhisk, an open-source architecture for event-driven code execution. Each piece of code is wrapped as a "function", grouped into "packages", and multiple packages combine into a "namespace" per account. One DigitalOcean account can create several namespaces to cleanly separate environments like dev, staging, and production. The core behavior is that functions don't run constantly like a process on a Droplet—instead they "wake up" when a trigger calls in: an HTTP request through an API Gateway that DigitalOcean provides automatically, a cron schedule for time-based work, or an event from another system sending a webhook. Once processing ends, the container stops (scale-to-zero), incurring zero cost during idle time, unlike a Droplet that charges around the clock regardless of traffic. DigitalOcean Functions supports Node.js, Python, Go, and PHP via custom runtime. Developers write small function files, set dependencies through each language's standard package manager (npm, pip, go.mod), then have DigitalOcean auto-build them as container images on deploy—no Dockerfile needed. This pattern fits narrow tasks that don't justify a separate Droplet for a whole month—like an endpoint to receive webhooks from external services, functions to resize or process images after upload, or a small cron job running a few minutes daily. Details on the free plan and deployment workflow follow in the next sections.

แผนฟรี 90,000 GiB-seconds/เดือน

จุดที่ผู้ใช้มักถามมาคือ digitalOcean Functions ให้โควตาฟรี 90,000 GiB-seconds ต่อเดือน และไม่คิดค่า invocation เพิ่มต่างหากจากตัวเลขนี้ หน่วย GiB-seconds คำนวณจากหน่วยความจำที่ function ใช้ (หน่วย GiB) คูณกับระยะเวลาที่ function ทำงานจริง (หน่วยวินาที) เช่น function ที่ตั้งหน่วยความจำ 256 MiB (0.25 GiB) และทำงาน 1 วินาทีต่อครั้ง จะใช้โควตา 0.25 GiB-seconds ต่อการเรียก 1 ครั้ง เท่ากับว่าในโควตาฟรี 90,000 GiB-seconds จะเรียกใช้ function ขนาดนี้ได้ราว 360,000 ครั้งต่อเดือนก่อนเริ่มมีค่าใช้จ่ายเพิ่ม (คำนวณจาก 90,000 หาร 0.25) หากมองในมุมของเวลาทำงานต่อเนื่อง function ขนาด 256 MiB เดียวกันนี้จะรันต่อเนื่องได้ราว 100 ชั่วโมงต่อเดือนภายในโควตาฟรี (90,000 GiB-seconds หาร 0.25 GiB เท่ากับ 360,000 วินาที หรือประมาณ 100 ชั่วโมง) ส่วน function ที่ตั้งหน่วยความจำสูงขึ้น เช่น 512 MiB หรือ 1 GiB โควตาชั่วโมงทำงานจะลดลงตามสัดส่วน เพราะใช้ทรัพยากรต่อวินาทีมากขึ้น จุดที่ต้องระวังคือระบบนับรวมทุก function ในบัญชีเข้าด้วยกัน ไม่ได้แยกโควตาต่อ namespace หรือต่อ function ดังนั้นถ้ามีหลายโปรเจกต์ใช้ namespace ร่วมบัญชีเดียวกัน ควรติดตามการใช้งานรวมผ่าน DigitalOcean Control Panel หรือคำสั่ง doctl serverless activations list เพื่อดูประวัติการเรียกใช้แต่ละครั้ง หากใช้งานเกินโควตาฟรีต่อเดือน DigitalOcean จะคิดค่าใช้จ่ายเพิ่มตามปริมาณ GiB-seconds ที่ใช้เกิน โดยอัตราที่แน่นอนควรตรวจสอบล่าสุดที่หน้าราคาทางการ เพราะอาจมีการปรับเปลี่ยน สำหรับทีมที่เพิ่งเริ่มทดลองใช้งาน ผู้ใช้ใหม่ที่ไม่เคยสมัคร trial มาก่อนสามารถใช้เครดิตทดลอง $200 ที่ใช้ได้ 60 วันหลังสมัครมาครอบคลุมค่าใช้จ่ายช่วงทดสอบได้ด้วย

สร้างและ deploy function ด้วย doctl serverless

การสร้างและ deploy function บน DigitalOcean ทำผ่าน doctl ซึ่งเป็น CLI ทางการของ DigitalOcean โดยต้องติดตั้งปลั๊กอิน serverless เพิ่มเติมก่อนเริ่มใช้งาน ขั้นตอนเริ่มต้นคือติดตั้ง plugin ด้วยคำสั่ง doctl serverless install จากนั้นเชื่อมต่อบัญชีด้วย doctl serverless connect ซึ่งจะให้เลือก namespace และ region ที่ต้องการใช้งาน (region ที่รองรับ Functions มีเกือบทุก datacenter ยกเว้น atl1 และ ric1) เมื่อเชื่อมต่อสำเร็จ สร้างโปรเจกต์ตัวอย่างด้วย doctl serverless init my-functions --language js คำสั่งนี้จะสร้างโฟลเดอร์โปรเจกต์พร้อมไฟล์ project.yml และ package ตัวอย่างชื่อ sample ที่มีฟังก์ชัน hello อยู่ข้างใน โครงสร้างไฟล์จะแยกเป็น packages/sample/hello/index.js ตามลำดับ package แล้วตามด้วย function แก้ไขโค้ดใน index.js ตามต้องการ เช่น เพิ่ม logic รับ parameter จาก HTTP request หรือเชื่อมต่อไปยัง service ภายนอก จากนั้นแก้ไข project.yml เพื่อกำหนดค่า memory, timeout และ environment variable ของแต่ละ function เมื่อพร้อมแล้ว deploy ด้วยคำสั่งเดียว doctl serverless deploy my-functions ระบบจะ build โค้ดเป็น container image และ push ขึ้น namespace ที่เชื่อมต่อไว้อัตโนมัติ โดยไม่ต้องเขียน Dockerfile เอง หลัง deploy เสร็จ ตรวจสอบรายการ function ทั้งหมดด้วย doctl serverless functions list และดู URL สำหรับเรียกผ่าน HTTP ด้วย doctl serverless functions get sample/hello --url จากนั้นทดสอบเรียกใช้งานได้ทั้งผ่าน curl ไปยัง URL ที่ได้ หรือเรียกตรงผ่าน CLI ด้วย doctl serverless functions invoke sample/hello --param name World ซึ่งสะดวกสำหรับการทดสอบระหว่างพัฒนาโดยไม่ต้องเปิด endpoint สาธารณะ เมื่อมีปัญหา ตรวจสอบ log การทำงานย้อนหลังได้ด้วย doctl serverless activations logs --last ซึ่งช่วยไล่ error หรือดู runtime ที่เกิดขึ้นจริงระหว่าง execution แต่ละครั้ง เวิร์กโฟลว์ทั้งหมดนี้ทำให้ deploy ฟังก์ชันใหม่หรืออัปเดตโค้ดเดิมทำได้รวดเร็วโดยไม่ต้อง SSH เข้าเซิร์ฟเวอร์เลย

สรุปสิ่งสำคัญ: ติดตั้งปลั๊กอินด้วย doctl serverless install แล้ว doctl serverless connect

ตัวอย่าง use case: webhook, image processing, cron job

DigitalOcean Functions เหมาะกับงานที่ทำงานเป็นครั้งคราวมากกว่างานที่ต้องรันต่อเนื่องตลอดเวลา สามตัวอย่าง use case ที่พบบ่อยคือ webhook receiver, image processing และ cron job Webhook receiver เป็นกรณีใช้งานที่พบบ่อยที่สุด เช่น รับการแจ้งเตือนจาก GitHub เมื่อมีการ push โค้ด รับ event การชำระเงินจาก payment gateway อย่าง Stripe หรือรับข้อความจาก LINE Messaging API เขียน function หนึ่งตัวรับ HTTP POST ตรวจสอบ signature ของ payload แล้วส่งต่อ logic ไปประมวลผล เช่น บันทึกลงฐานข้อมูล หรือส่งต่อไปยัง queue อื่น เนื่องจาก webhook มักถูกยิงเป็นครั้งคราวไม่สม่ำเสมอ การใช้ Functions จึงประหยัดกว่าการเปิด Droplet ทิ้งไว้รอรับ request ตลอดเวลา Image processing เป็นอีกกรณีที่เหมาะกับโมเดล event-driven เช่น function ที่ทำงานหลังผู้ใช้อัปโหลดรูปภาพเข้า Spaces (Object Storage) แล้วต้องสร้าง thumbnail หลายขนาด บีบอัดไฟล์ หรือแปลง format งานลักษณะนี้ใช้เวลาสั้นต่อครั้งแต่เกิดขึ้นไม่สม่ำเสมอตามพฤติกรรมผู้ใช้ เขียน function ด้วยไลบรารีประมวลผลภาพของแต่ละภาษา เช่น sharp สำหรับ Node.js หรือ Pillow สำหรับ Python แล้วให้ trigger ทำงานเมื่อมีไฟล์ใหม่เข้ามา Cron job หรือ scheduled task ใช้สำหรับงานที่ต้องรันตามรอบเวลา เช่น sync ข้อมูลจาก API ภายนอกทุกชั่วโมง ส่งรายงานสรุปทุกเช้า หรือลบข้อมูลเก่าที่หมดอายุ ตั้งค่าผ่าน trigger ประเภท scheduled ด้วยคำสั่ง doctl serverless triggers create sample/hello --type scheduled --param cron "0 * * * *" ซึ่งกำหนดรูปแบบเวลาแบบเดียวกับ crontab มาตรฐาน ทำให้ไม่ต้องเปิด Droplet แยกไว้เพียงเพื่อรัน cron job เล็ก ๆ ทั้งสามกรณีนี้มีจุดร่วมกันคือ workload สั้น ไม่สม่ำเสมอ และไม่ต้องการ state ที่ค้างอยู่ระหว่างการเรียกใช้แต่ละครั้ง ซึ่งตรงกับจุดแข็งของ Functions มากกว่างานที่ต้องประมวลผลต่อเนื่องยาวนานหรือเก็บ session ไว้ในหน่วยความจำ

ข้อจำกัดเทียบกับรัน Droplet เอง

แม้ Functions จะสะดวกสำหรับงานเฉพาะจุด แต่ก็มีข้อจำกัดที่ต่างจากการควบคุม Droplet เต็มรูปแบบ ควรพิจารณาก่อนตัดสินใจย้ายงานทั้งหมดไปเป็น serverless ข้อแรกคือขอบเขตเวลาทำงานต่อการเรียกใช้แต่ละครั้ง (execution timeout) function ถูกออกแบบมาสำหรับงานที่จบเร็ว ไม่เหมาะกับ process ที่ต้องรันต่อเนื่องเป็นชั่วโมงหรือค้างรอ connection แบบ long-polling ตัวเลข timeout ที่แน่นอนควรตรวจสอบล่าสุดในเอกสารทางการ เพราะ DigitalOcean อาจปรับค่านี้ได้ ต่างจาก Droplet ที่ process จะรันได้นานเท่าที่ต้องการตราบใดที่เครื่องยังเปิดอยู่ ข้อสองคือไม่มี persistent disk หรือ state ที่ค้างอยู่ระหว่างการเรียกใช้ แต่ละครั้งที่ function ทำงาน container อาจถูกสร้างใหม่ (cold start) หรือใช้ container เดิมที่ยังไม่ถูกเก็บคืน (warm) แต่ไม่สามารถพึ่งพาได้ว่าไฟล์ที่เขียนไว้ในการเรียกครั้งก่อนจะยังอยู่ในการเรียกครั้งถัดไป งานที่ต้องการเก็บข้อมูลถาวรต้องเชื่อมต่อไปยัง Managed Database หรือ Spaces แยกต่างหากเสมอ ข้อสามคือความยืดหยุ่นด้าน runtime และ dependency ระบบปฏิบัติการ Droplet ติดตั้งอะไรก็ได้ตามต้องการ ควบคุม kernel, package ระบบ หรือ binary เฉพาะทางได้เต็มที่ ขณะที่ Functions จำกัดอยู่ที่ runtime ที่ DigitalOcean เตรียมไว้ให้ (Node.js, Python, Go, PHP ผ่าน custom runtime) หากต้องใช้ software เฉพาะทางที่ติดตั้งยากในสภาพแวดล้อม container มาตรฐาน การรันบน Droplet อาจสะดวกกว่า ข้อสี่คือความครอบคลุมของ region ปัจจุบัน Functions ยังไม่เปิดให้บริการที่ทุก datacenter โดยเฉพาะ atl1 และ ric1 ไม่รองรับ Functions ต่างจาก Droplet, Kubernetes, Load Balancer และ VPC ที่เปิดครบทั้ง 15 region ถ้าทีมมีข้อกำหนดเรื่อง region เฉพาะเจาะจง ควรตรวจสอบความพร้อมของ Functions ในภูมิภาคนั้นก่อน สรุปคือ Functions เหมาะกับ workload สั้น เป็นครั้งคราว และไม่ผูกกับ state ส่วน Droplet ยังจำเป็นสำหรับงานที่ต้องควบคุมสภาพแวดล้อมเต็มรูปแบบ รันต่อเนื่องตลอดเวลา หรือต้องการทรัพยากรเฉพาะทางที่ container มาตรฐานให้ไม่ได้

  1. มี execution timeout ต่อการเรียกแต่ละครั้ง ไม่เหมาะงานรันต่อเนื่องยาวนาน
  2. ไม่มี persistent disk ต้องพึ่ง Managed Database หรือ Spaces สำหรับข้อมูลถาวร
  3. Runtime จำกัดเฉพาะที่ DigitalOcean เตรียมไว้ ต่างจาก Droplet ที่ติดตั้งอะไรก็ได้

สรุป: เมื่อไหร่ควรเลือกใช้ DigitalOcean Functions

เมื่อรวมทุกประเด็นข้างต้น การตัดสินใจว่าจะใช้ Functions หรือ Droplet ขึ้นอยู่กับลักษณะของ workload เป็นหลักมากกว่าความชอบส่วนตัว หากงานมีทราฟฟิกไม่สม่ำเสมอ เป็นครั้งคราว หรือทำงานสั้น ๆ ไม่กี่วินาทีต่อครั้ง เช่น webhook, image processing เบื้องต้น หรือ cron job ที่รันไม่บ่อย Functions ตอบโจทย์ด้านต้นทุนได้ดีกว่า เพราะไม่มีค่าใช้จ่ายในช่วงที่ไม่มีการเรียกใช้งาน และโควตาฟรี 90,000 GiB-seconds ต่อเดือนก็เพียงพอสำหรับโปรเจกต์ขนาดเล็กถึงกลางจำนวนมากโดยไม่ต้องเสียค่าใช้จ่ายเลย ในทางกลับกัน หากแอปพลิเคชันต้องรันต่อเนื่องตลอดเวลา ต้องการควบคุม runtime หรือ dependency เฉพาะทาง ต้องการ persistent state ในหน่วยความจำ หรือมีทราฟฟิกสม่ำเสมอสูงจนค่าใช้จ่ายแบบ pay-per-use ของ Functions อาจแพงกว่าการเปิด Droplet ทิ้งไว้ การรันบน Droplet เองหรือใช้ App Platform ยังเป็นทางเลือกที่เหมาะสมกว่า ในทางปฏิบัติหลายทีมเลือกใช้ทั้งสองแบบผสมกัน คือรัน backend หลักบน Droplet หรือ App Platform ตามปกติ แล้วแยกเฉพาะงานที่เป็น event-driven หรือทำงานเป็นครั้งคราว เช่น webhook receiver หรือ scheduled task ไปรันบน Functions แทน วิธีนี้ช่วยลดภาระบน server หลักและควบคุมต้นทุนได้ดีกว่าการรวมทุกอย่างไว้ที่เดียว สำหรับผู้ที่ยังไม่เคยใช้งาน DigitalOcean มาก่อน บัญชีใหม่จะได้รับเครดิตทดลอง $200 ใช้ได้ 60 วันหลังสมัคร ซึ่งเพียงพอสำหรับทดลองสร้างและ deploy function จริงตามขั้นตอนในบทความนี้ รวมถึงทดลองผสมกับบริการอื่นอย่าง Spaces หรือ Managed Database เพื่อดูว่าเหมาะกับสถาปัตยกรรมของโปรเจกต์ตัวเองหรือไม่ก่อนตัดสินใจใช้งานจริงในระยะยาว

  1. Workload สั้น ไม่สม่ำเสมอ ทำให้ Functions คุ้มกว่าเรื่องต้นทุน
  2. งานรันต่อเนื่อง ต้องการควบคุม runtime เต็มรูปแบบ Droplet หรือ App Platform เหมาะกว่า
  3. หลายทีมใช้ผสมกัน backend หลักบน Droplet บวก event-driven task บน Functions
  4. บัญชีใหม่ทดลองใช้ได้ด้วยเครดิตฟรี $200 ใช้ได้ 60 วัน

ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

เมื่อเริ่มใช้งาน DigitalOcean Functions จริง มีข้อผิดพลาดบางอย่างที่นักพัฒนาพบบ่อยและมักไม่รู้ตัวจนกระทบผู้ใช้งานหรือค่าใช้จ่าย สี่ประเด็นหลักที่ควรระวังคือ cold-start latency การใช้โควตาฟรีเกินโดยไม่รู้ตัว การลืมตั้งค่า environment variable หรือ secret และการใช้ runtime version ผิด Cold-start latency เป็นปัญหาที่พบบ่อยที่สุดสำหรับมือใหม่ เพราะเมื่อ function ไม่ถูกเรียกใช้งานมาระยะหนึ่ง container ที่รันจะถูกเก็บคืนทรัพยากรไปตามหลัก scale-to-zero การเรียกใช้ครั้งถัดไปจึงต้องสร้าง container ใหม่ก่อนเริ่มประมวลผล ทำให้ response แรกช้ากว่าปกติ หากใช้ function เป็น backend ของหน้าเว็บที่ผู้ใช้รอผลทันที ควรทดสอบ latency จริงด้วย doctl serverless functions invoke sample/hello --param name test หลายครั้งในช่วงเวลาต่าง ๆ เพื่อดูความต่างระหว่าง cold start กับ warm call แล้ววางแผน UX รองรับ เช่น แสดง loading state ระหว่างรอผล การใช้โควตาฟรี 90,000 GiB-seconds ต่อเดือนเกินโดยไม่รู้ตัว มักเกิดจากการตั้งหน่วยความจำของ function สูงเกินความจำเป็น หรือมี logic ที่ทำงานนานกว่าที่ควร เช่น loop รอ response จาก API ภายนอกที่ตอบช้า เพราะ GiB-seconds คำนวณจากทั้งหน่วยความจำและเวลาที่ใช้จริง function ที่ตั้ง memory ไว้สูงแต่ไม่ได้ใช้เต็มที่จะกินโควตาเปล่า ควรตรวจสอบการใช้งานสม่ำเสมอผ่าน doctl serverless activations list และปรับค่า memory ใน project.yml ให้เหมาะกับงานจริงแทนการตั้งค่าสูงไว้ก่อนแบบเผื่อ การลืมตั้งค่า environment variable หรือ secret เป็นอีกจุดที่พลาดบ่อย เพราะค่าที่ตั้งไว้บนเครื่อง local ระหว่างพัฒนา เช่นไฟล์ .env จะไม่ถูกส่งไปพร้อมกับ deploy โดยอัตโนมัติ ต้องกำหนดใน project.yml ภายใต้ key environment หรือ parameters ของแต่ละ function ให้ครบก่อน deploy หากลืม function จะ error ทันทีที่พยายามอ่านค่าที่ไม่มีอยู่ ควรตรวจสอบด้วยการเรียก invoke ทดสอบหลัง deploy ทุกครั้งแทนการเชื่อว่า deploy สำเร็จแล้วจะทำงานถูกต้อง สุดท้ายคือการใช้ runtime version ผิด เช่น เขียนโค้ดด้วย syntax ของ Node.js เวอร์ชันใหม่แต่ project.yml ยังระบุ runtime เป็นเวอร์ชันเก่ากว่าที่ DigitalOcean เตรียมไว้ ทำให้ deploy สำเร็จแต่รันจริงแล้ว error เพราะ syntax ไม่รองรับ ควรระบุ runtime ให้ตรงกับเวอร์ชันที่ใช้พัฒนาและทดสอบเสมอ และตรวจสอบรายการ runtime ที่รองรับล่าสุดในเอกสารทางการก่อน deploy งานสำคัญ

  1. Cold start: ทดสอบ latency จริงด้วย doctl serverless functions invoke ก่อนใช้งานจริง
  2. ตรวจสอบการใช้โควตาสม่ำเสมอผ่าน doctl serverless activations list ป้องกันใช้เกิน 90,000 GiB-seconds โดยไม่รู้ตัว
  3. ตั้งค่า environment variable/secret ใน project.yml เสมอ ไฟล์ .env บนเครื่อง local ไม่ถูกส่งไปตอน deploy

แนวทางปฏิบัติที่ดีที่สุด (Best Practices)

เมื่อใช้งาน Functions ในโปรเจกต์จริงที่มีหลายฟังก์ชันและต้องดูแลระยะยาว มีแนวทางปฏิบัติที่ช่วยลดปัญหาและทำให้ดูแลรักษาง่ายขึ้น สี่เรื่องหลักคือการออกแบบ function ให้ stateless และ idempotent การ monitor การเรียกใช้งาน การจัดโครงสร้างโปรเจกต์ที่มีหลายฟังก์ชัน และการทดสอบก่อน deploy จริง หลักการแรกคือออกแบบ function ให้ stateless และ idempotent เสมอ เพราะแต่ละครั้งที่ function ทำงาน อาจรันบน container คนละตัวกัน ไม่ควรพึ่งพาตัวแปรหรือไฟล์ที่ค้างอยู่จากการเรียกครั้งก่อน ข้อมูลที่ต้องอยู่ข้ามการเรียกใช้ต้องเก็บไว้ภายนอกเสมอ เช่น Managed Database หรือ Spaces นอกจากนี้ควรออกแบบให้เรียกซ้ำได้โดยไม่เกิดผลข้างเคียงซ้ำ (idempotent) เช่น หาก webhook ถูกยิงซ้ำเพราะ retry จากฝั่งต้นทาง function ควรตรวจสอบก่อนว่าประมวลผล request เดิมไปแล้วหรือยัง เพื่อไม่ให้บันทึกข้อมูลซ้ำ การ monitor การเรียกใช้งานควรทำอย่างสม่ำเสมอ ไม่ใช่แค่ตอน deploy ใหม่ ใช้ doctl serverless activations list ดูประวัติการเรียกทั้งหมด และ doctl serverless activations logs --last เพื่อไล่ error ที่เกิดขึ้นจริง หากมี function ที่ error บ่อยหรือใช้เวลานานผิดปกติ ควรตรวจสอบ log ทันทีแทนการรอให้ผู้ใช้แจ้งปัญหาเข้ามา การจัดโครงสร้างโปรเจกต์ที่มีหลายฟังก์ชันควรแยกตามหน้าที่ให้ชัดเจนตั้งแต่ต้น เช่น จัดกลุ่ม package ตามโดเมนงาน (webhooks, image-processing, scheduled-tasks) แทนการยัดทุกฟังก์ชันไว้ใน package เดียว โครงสร้างไฟล์ตามรูปแบบ packages/<package-name>/<function-name>/index.js ช่วยให้ project.yml อ่านง่าย และ deploy เฉพาะส่วนที่เปลี่ยนแปลงได้สะดวกขึ้นเมื่อโปรเจกต์ใหญ่ขึ้น สุดท้ายคือการทดสอบก่อน deploy จริงเสมอ เขียน unit test สำหรับ logic หลักของแต่ละ function แยกจากส่วนที่ผูกกับ DigitalOcean โดยตรง เพื่อรันทดสอบบนเครื่อง local ได้โดยไม่ต้อง deploy ทุกครั้งที่แก้โค้ด เมื่อพร้อมแล้วค่อย deploy ไปยัง namespace แยกสำหรับ staging ก่อน ทดสอบด้วย doctl serverless functions invoke ให้มั่นใจว่าทำงานถูกต้องจริง แล้วค่อย deploy เข้า namespace production วิธีนี้ช่วยลดความเสี่ยงที่โค้ดมีปัญหาจะกระทบผู้ใช้งานจริงโดยตรง

รับ $200 Free Credit →

คำถามที่พบบ่อย (FAQ)

DigitalOcean Functions ใช้งานฟรีได้จริงหรือไม่
ฟรีภายในโควตา 90,000 GiB-seconds ต่อเดือน และไม่คิดค่า invocation แยกต่างหากจากโควตานี้ หากใช้เกินโควตาจะเริ่มมีค่าใช้จ่ายเพิ่มตามปริมาณที่ใช้เกิน ควรตรวจสอบอัตราล่าสุดที่หน้าราคาทางการก่อนใช้งานจริง
DigitalOcean Functions รองรับภาษาโปรแกรมอะไรบ้าง
รองรับ Node.js, Python และ Go เป็นภาษาหลัก และรองรับ PHP ผ่าน custom runtime เลือกภาษาได้ตอนสร้างโปรเจกต์ด้วยคำสั่ง doctl serverless init
ต้องติดตั้งอะไรเพิ่มก่อนใช้ doctl serverless หรือไม่
ต้องติดตั้ง doctl ก่อน แล้วเพิ่มปลั๊กอิน serverless ด้วย doctl serverless install จากนั้นเชื่อมต่อบัญชีด้วย doctl serverless connect โดยใช้ Personal Access Token ของบัญชี DigitalOcean
Functions เหมาะกับ API backend ขนาดใหญ่ที่มีทราฟฟิกสูงตลอดเวลาหรือไม่
ไม่เหมาะเท่า Droplet หรือ App Platform เพราะรูปแบบ pay-per-use อาจมีต้นทุนสูงกว่าเมื่อทราฟฟิกสม่ำเสมอตลอดเวลา Functions เหมาะกับงานที่ทำงานเป็นครั้งคราวมากกว่า
Functions ใช้งานได้ใน region ไหนบ้าง
ใช้งานได้เกือบทุก datacenter ของ DigitalOcean ยกเว้น atl1 และ ric1 ที่ยังไม่รองรับ ควรตรวจสอบความพร้อมของ region ก่อน deploy จริง
DigitalOcean Functions ต่างจาก App Platform อย่างไร
App Platform รันแอปพลิเคชันแบบ container ที่พร้อมให้บริการต่อเนื่อง เหมาะกับเว็บหรือ API ที่ต้องออนไลน์ตลอดเวลา ส่วน Functions เหมาะกับงาน event-driven สั้น ๆ ที่ scale-to-zero เมื่อไม่มีการเรียกใช้