คุมค่าใช้จ่าย Cloud ให้ไม่บานปลาย ด้วยนิสัยการจัดการทรัพยากรฉบับโปรแกรมเมอร์

10 นาที 17 views บันทึกเป็น PDF
คุมค่าใช้จ่าย Cloud ให้ไม่บานปลาย ด้วยนิสัยการจัดการทรัพยากรฉบับโปรแกรมเมอร์

มือใหม่หัดใช้ Cloud มักเจอบิลค่าบริการแพงหูฉี่เพราะลืมปิดทรัพยากร มาเรียนรู้นิสัยการจัดการ Cloud ให้ประหยัดเงินและคุ้มค่าเหมือนมือโปรกัน

Cloud คืออะไรและทำไมค่าใช้จ่ายถึงพุ่งสูง

ถ้าคุณกำลังฝึกเขียนโค้ดและเริ่มเอาโปรเจกต์ขึ้น Cloud (บริการเช่าคอมพิวเตอร์และพื้นที่เก็บข้อมูลบนอินเทอร์เน็ต) คุณอาจจะเคยเจอเหตุการณ์ที่บิลค่าบริการเดือนนี้แพงกว่าเดือนก่อนหลายเท่าตัว เหมือนกับเราเปิดก๊อกน้ำทิ้งไว้โดยไม่รู้ตัว กว่าจะรู้ตัวอีกทีเงินในบัญชีก็หายไปเกือบหมดแล้ว

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

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

นิสัยที่ 1: ติดป้ายกำกับทุกอย่างตั้งแต่เริ่มต้น

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

ลองนึกภาพว่าคุณมีกล่องเก็บของ 100 กล่องในห้องเก็บของ ถ้าไม่เขียนหน้ากล่องว่าข้างในคืออะไร คุณก็ต้องเปิดดูทีละใบจนเสียเวลา การติดป้ายชื่อโครงการ เจ้าของ และสภาพแวดล้อม เช่น dev (สภาพแวดล้อมที่ใช้เขียนโค้ด) หรือ prod (สภาพแวดล้อมที่ใช้งานจริง) จะช่วยให้คุณจัดการได้ง่ายขึ้น

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

# ตัวอย่างคำสั่งติดป้ายกำกับให้เครื่อง Server ใน AWS
aws ec2 create-tags --resources i-1234567890abcdef0 \
--tags Key=project,Value=my-app Key=owner,Value=dev-team

อธิบายคำสั่ง: aws ec2 create-tags คือการเรียกใช้เครื่องมือของ AWS เพื่อสร้างป้าย, --resources คือรหัสเครื่องที่ต้องการติดป้าย, ส่วน --tags คือการระบุชื่อและค่าของป้าย เช่น ชื่อโครงการ หรือชื่อทีม ผลลัพธ์คือเครื่อง Server ตัวนั้นจะมีป้ายกำกับติดไว้ ทำให้คุณค้นหาหรือตรวจสอบค่าใช้จ่ายแยกตามโครงการได้ในภายหลัง

นิสัยที่ 2: ตั้งงบประมาณและแจ้งเตือนให้เป็นนิสัย

ผู้ให้บริการ Cloud ส่วนใหญ่จะมีระบบ Budget (งบประมาณที่กำหนดไว้) ให้เราตั้งค่าได้ การตั้งค่าแจ้งเตือนที่ 50%, 80% และ 100% ของงบที่วางไว้ จะช่วยให้คุณรู้ตัวทันทีเมื่อเริ่มใช้เงินเกินความจำเป็น เหมือนการตั้งเตือนในแอปธนาคารเมื่อใช้จ่ายเกินกำหนด

หลายคนพลาดตรงที่ตั้งแจ้งเตือนไว้แต่ไม่เคยเปิดอ่าน เมื่อได้รับอีเมลแจ้งเตือนว่าใช้ไป 80% แล้ว แทนที่จะกดทิ้ง ให้ลองสละเวลา 10 นาทีเข้าไปดูว่ามีบริการตัวไหนที่กินเงินผิดปกติ การทำแบบนี้จะช่วยให้คุณแก้ไขปัญหาได้ก่อนที่บิลจะส่งมาถึงบ้าน

การตั้งค่าผ่าน CLI (หน้าจอพิมพ์คำสั่ง) อาจจะดูน่าเบื่อในตอนแรก แต่เป็นขั้นตอนที่ทำครั้งเดียวแล้วจบ การลงทุนเวลาเพียงเล็กน้อยเพื่อสร้างเกราะป้องกันเงินในกระเป๋า คือหนึ่งในทักษะที่โปรแกรมเมอร์มืออาชีพต้องมี

# ตัวอย่างการสร้างไฟล์ตั้งงบประมาณ budget.json
{
  "BudgetLimit": {"Amount": "50", "Unit": "USD"},
  "TimePeriod": {"Start": "2024-01-01"}
}
# คำสั่งสร้างงบประมาณจากไฟล์ที่เตรียมไว้
aws budgets create-budget --account-id 123456789012 --budget file://budget.json

อธิบายคำสั่ง: เราสร้างไฟล์ JSON (รูปแบบการเก็บข้อมูลแบบข้อความ) เพื่อระบุจำนวนเงินที่รับได้ และใช้คำสั่ง aws budgets create-budget เพื่อส่งไฟล์นี้ไปบอก Cloud ให้ช่วยเฝ้าระวัง ผลลัพธ์คือคุณจะได้รับอีเมลแจ้งเตือนอัตโนมัติเมื่อยอดใช้จ่ายใกล้ถึงจุดที่ตั้งไว้ ช่วยให้คุณวางแผนการใช้เงินได้ทันท่วงที

นิสัยที่ 3: ปิดทรัพยากรที่ไม่ใช้ในช่วงเวลาพัก

เครื่อง Server สำหรับทดสอบหรือพัฒนางาน ไม่จำเป็นต้องเปิดทิ้งไว้ 24 ชั่วโมงต่อวัน หากทีมของคุณทำงานแค่ช่วง 9 โมงถึง 6 โมงเย็น การเปิดเครื่องทิ้งไว้ตอนตี 2 คือการจ่ายเงินเปล่าๆ โดยที่ไม่มีใครใช้งานเลย

คุณสามารถใช้ระบบตั้งเวลาอัตโนมัติเพื่อสั่งให้เครื่องหยุดทำงาน (Stop) หลังเลิกงาน และให้เปิดทำงาน (Start) ใหม่ในตอนเช้า การทำแบบนี้เพียงอย่างเดียวสามารถลดค่าใช้จ่ายในส่วนของสภาพแวดล้อมทดสอบได้ถึง 60-70% เลยทีเดียว

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

# ตัวอย่างการตั้งเวลาปิดเครื่องทุกวันจันทร์ถึงศุกร์ 1 ทุ่ม
0 19 * * 1-5 aws ec2 stop-instances --instance-ids i-1234567890abcdef0

อธิบายคำสั่ง: เลขหน้าสุดคือเวลา (นาที ชั่วโมง) ตามด้วยวันในสัปดาห์ (1-5 คือจันทร์ถึงศุกร์) และคำสั่ง aws ec2 stop-instances คือการสั่งปิดเครื่อง ผลลัพธ์คือ Server ของคุณจะหยุดทำงานเองโดยอัตโนมัติเมื่อถึงเวลาที่กำหนด ช่วยประหยัดค่าใช้จ่ายได้โดยไม่ต้องคอยมานั่งปิดเองทุกวัน

นิสัยที่ 4: ปรับขนาดทรัพยากรให้เหมาะสมก่อนขยายเพิ่ม

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

ให้ใช้เครื่องมืออย่าง Compute Optimizer (ตัวช่วยแนะนำขนาดเครื่องที่เหมาะสม) เพื่อดูว่า CPU (หน่วยประมวลผลกลาง) หรือ Memory (หน่วยความจำชั่วคราว) ของคุณถูกใช้งานไปเท่าไหร่ ถ้าเฉลี่ยแล้วใช้งานไม่ถึง 10% คุณสามารถลดขนาดเครื่องลงได้ทันทีโดยที่ระบบยังทำงานได้ดีเหมือนเดิม

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

# ตัวอย่างการดูค่าเฉลี่ยการใช้งาน CPU
aws cloudwatch get-metric-statistics --namespace AWS/EC2 \
--metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--statistics Average --period 3600 --start-time 2024-01-01 --end-time 2024-01-08

อธิบายคำสั่ง: get-metric-statistics เป็นการดึงสถิติการใช้งานเครื่อง โดยระบุชื่อตัววัดเป็น CPUUtilization ผลลัพธ์ที่ได้จะเป็นตัวเลขเปอร์เซ็นต์การใช้งาน ถ้าตัวเลขออกมาต่ำมาก แสดงว่าเครื่องที่คุณเช่ามานั้นใหญ่เกินความจำเป็น คุณควรลดขนาดลงเพื่อประหยัดค่าใช้จ่าย

นิสัยที่ 5: ตรวจสอบทรัพยากรที่ถูกลืมเป็นประจำทุกเดือน

เมื่อเราทำโปรเจกต์ไปนานๆ เรามักจะลืมลบของเก่าที่ไม่ได้ใช้แล้ว เช่น Load Balancer (ตัวกระจายงานไปยัง Server หลายๆ ตัว) ที่ไม่ได้เชื่อมต่อกับใคร หรือไฟล์สำรองข้อมูลที่ไม่ได้ใช้แล้ว สิ่งเหล่านี้คือ "ตัวดูดเงินเงียบ" ที่น่ากลัวที่สุด

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

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

# ตัวอย่างการหาพื้นที่เก็บข้อมูลที่ไม่ได้เชื่อมต่อกับเครื่องใดเลย
aws ec2 describe-volumes --filters Name=status,Values=available --output table

อธิบายคำสั่ง: describe-volumes คือการดึงรายการพื้นที่เก็บข้อมูลออกมา โดยกรองเฉพาะสถานะที่เป็น available (ว่างและไม่ได้ใช้งาน) ผลลัพธ์คือรายการรหัสพื้นที่เก็บข้อมูลที่คุณสามารถลบทิ้งได้ทันทีเพื่อหยุดการจ่ายเงินโดยไม่จำเป็น

สรุป: เปลี่ยนนิสัยเพื่อประหยัดเงินในระยะยาว

การควบคุมค่าใช้จ่ายบน Cloud ไม่ใช่เรื่องเวทมนตร์ แต่เป็นเรื่องของวินัยเล็กๆ น้อยๆ ที่คุณค่อยๆ ฝึกฝนจนกลายเป็นนิสัย สิ่งที่คุณต้องทำคือเริ่มจากสิ่งที่ทำได้ง่ายที่สุดก่อน เช่น การติดป้ายกำกับ (Tag) ให้กับทรัพยากรทุกตัวที่คุณสร้างขึ้นตั้งแต่วันนี้

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

ตัวอย่างการนำไปใช้จริง: สมมติคุณมีโปรเจกต์ฝึกเขียนเว็บที่รันอยู่บน Cloud ให้เริ่มจากสัปดาห์นี้ด้วยการติด Tag ชื่อโปรเจกต์ลงไปในทุกเครื่องที่คุณเปิด จากนั้นสัปดาห์หน้าให้ลองตั้งแจ้งเตือนงบประมาณที่ 50% ของเงินที่คุณตั้งใจจะจ่ายต่อเดือน เพียงเท่านี้คุณก็ก้าวเข้าสู่การเป็นโปรแกรมเมอร์ที่บริหารจัดการทรัพยากรเป็นแล้ว


ที่มา: Cutting Cloud Costs with a Few Habits — DEV Community

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

จัดการเซิร์ฟเวอร์ผ่าน VS Code ให้ง่ายขึ้นด้วย Easy SSH พร้อมฟีเจอร์โหลดไฟล์ผ่านคลิกเดียว

จัดการเซิร์ฟเวอร์ผ่าน VS Code ให้ง่ายขึ้นด้วย Easy SSH พร้อมฟีเจอร์โหลดไฟล์ผ่านคลิกเดียว

เบื่อไหมที่ต้องสลับหน้าจอไปมาเพื่อจัดการเซิร์ฟเวอร์? มาลองใช้ Easy SSH ปลั๊กอิน VS Code ที่ช่วยให้คุณรีโมทผ่าน Terminal ได้สะดวก แถมโหลดไฟล์ได้ง่ายแค่กด Ctrl+click

ที่มา: DEV Community

3 hours ago 11 นาที
3 views
วิธีดึงข้อมูลราคาจาก Google Hotels ด้วย API สำหรับนักพัฒนา

วิธีดึงข้อมูลราคาจาก Google Hotels ด้วย API สำหรับนักพัฒนา

อยากทำแอปท่องเที่ยวแต่ดึงข้อมูลราคาจาก Google Hotels ไม่ได้? มาดูวิธีใช้ Apify Actor ช่วยดึงข้อมูลแบบอัตโนมัติด้วย Python ง่ายๆ ไม่ต้องกลัวเว็บพัง

ที่มา: DEV Community

6 hours ago 8 นาที
4 views
วิธีเช็กความพร้อมโปรเจกต์ก่อนปล่อยงานจริงด้วย ReleaseReady

วิธีเช็กความพร้อมโปรเจกต์ก่อนปล่อยงานจริงด้วย ReleaseReady

เคยไหม? โค้ดรันได้ในเครื่องแต่พอปล่อยจริงกลับพัง! มาดูวิธีตรวจสอบความพร้อมของโปรเจกต์ก่อนอัปขึ้น GitHub ด้วยเครื่องมือ ReleaseReady กัน

ที่มา: DEV Community

10 hours ago 9 นาที
5 views