10 คะแนน โดย xguru 2024-12-18 | 13 ความคิดเห็น | แชร์ทาง WhatsApp
  • ทริกเล็ก ๆ เพื่อแก้ปัญหาเรื่องต้นทุนและความซับซ้อนเมื่อต้องดูแลฐานข้อมูลสำหรับการพัฒนาและการทดสอบ
  • VPS, Cloud VM, บริการแบบ managed และทางเลือกอื่น ๆ ล้วนมีค่าใช้จ่ายต่อเนื่องและค่าจัดเก็บข้อมูล
    • งานตั้งค่าค่อนข้างซับซ้อน และยังต้องจ่ายค่า resource แม้ในช่วงที่ไม่ได้ใช้งาน
  • ทางเลือก: ใช้ GitHub Actions และ S3 เพื่อรันฐานข้อมูล
    • รันฐานข้อมูลชั่วคราวด้วย GitHub Actions เฉพาะตอนที่ต้องใช้
    • ใช้ AWS S3 หรือสตอเรจที่เข้ากันได้กับ S3 เพื่อเก็บข้อมูลแบบถาวร
    • เมื่อ workflow จบ ข้อมูลยังคงอยู่ แต่สภาพแวดล้อมการรันจะถูกลบออก ช่วยลดค่าใช้จ่ายได้
    • สามารถเปิดให้เข้าถึงฐานข้อมูลจากอินเทอร์เน็ตแบบชั่วคราวผ่าน tunneling
  • ข้อควรระวังในการใช้งาน
    • วิธีนี้เหมาะเฉพาะกับการทดสอบ integration ระยะสั้น เดโมชั่วคราว และงานพัฒนาง่าย ๆ เท่านั้น
    • ไม่ควรใช้งาน GitHub Actions ผิดวัตถุประสงค์เป็นแพลตฟอร์มสำหรับบริการระยะยาว
    • หากต้องการโฮสต์ฐานข้อมูลแบบต่อเนื่องและระยะยาว ควรตั้งค่า Self-Hosted Runner หรือใช้บริการฐานข้อมูลแยกต่างหาก
    • ต้องดำเนินการใช้งานให้สอดคล้องกับนโยบายการใช้งานของ GitHub

แนวคิดหลัก

  • ใช้สภาพแวดล้อมคอมพิวต์ชั่วคราวของ GitHub Actions
    • รันฐานข้อมูลที่เข้ากันได้กับ MySQL เฉพาะเมื่อจำเป็น ในฐานะส่วนหนึ่งของ workflow สำหรับ CI/CD หรือการทดสอบ
  • เก็บข้อมูลถาวรผ่านสตอเรจที่เข้ากันได้กับ S3
    • เก็บข้อมูลไว้ใน object storage อย่าง AWS S3 หรือ Cloudflare R2
    • แม้สภาพแวดล้อมชั่วคราวจะสิ้นสุดลง ข้อมูลก็ยังถูกเก็บไว้อย่างปลอดภัยใน object storage
  • ใช้ tunneling เพื่อการเข้าถึงแบบสาธารณะ
    • เปิดฐานข้อมูลให้เข้าถึงจากอินเทอร์เน็ตแบบชั่วคราวเพื่อการทดสอบหรือเดโม
  • เหมาะกับการใช้งานระยะสั้น
    • ฐานข้อมูลจะทำงานเฉพาะในช่วงเวลาที่ workflow กำลังรัน
    • หลัง workflow จบ ทรัพยากรคอมพิวต์ชั่วคราวจะถูกคืนกลับ และไม่ใช่โซลูชันโฮสติ้งแบบถาวร
  • หากต้องการใช้งานฟรีทั้งหมด
    • อาจพิจารณาบริการที่เข้ากันได้กับ S3 ซึ่งมี free tier เช่น Cloudflare R2

กรณีใช้งาน

  • การทดสอบ integration ใน CI/CD: รันสภาพแวดล้อมที่เข้ากันได้กับ MySQL จริงเพื่อทดสอบ แล้วปิดหลังใช้งาน
  • เดโมชั่วคราว: สร้างอินสแตนซ์ฐานข้อมูลที่แชร์ได้อย่างรวดเร็วสำหรับใช้งานระยะสั้น
  • งานพัฒนาระยะสั้น: ทดสอบบนสภาพแวดล้อมฐานข้อมูลจริงได้โดยไม่ต้องมีภาระดูแลต่อเนื่อง
  • กรณีใช้งานที่ไม่แนะนำ:
    • การโฮสต์ฐานข้อมูลระยะยาว
    • การคง endpoint ฐานข้อมูลสาธารณะที่เปิดใช้งานตลอดเวลา
    • การหลีกเลี่ยงนโยบายการใช้งานของ GitHub Actions
  • สำคัญ: GitHub Actions ถูกออกแบบมาสำหรับ CI/CD ไม่ใช่แพลตฟอร์มบริการแบบต่อเนื่อง หากต้องการโฮสต์ฐานข้อมูลระยะยาว ควรพิจารณาตั้งค่า Self-Hosted Runner

13 ความคิดเห็น

 
nodelay 2024-12-20

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

 
eajrezz 2024-12-19

เมื่อนึกถึงกฎของ Hyrum (https://www.hyrumslaw.com/)
ก็คิดว่านี่เป็นวิธีที่สักวันหนึ่งต้องมีใครสักคนนึกขึ้นมาได้

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

 
iolothebard 2024-12-18

ถ้า GitHub Free Tier ไม่มี GitHub Actions ไปแล้ว... อา... นี่มันเป็นของดีนี่นา...

 
freedomzero 2024-12-18

ผมไม่คิดว่านี่จะเป็นการนำไปใช้ในทางที่ผิด
แค่รันฐานข้อมูลตัวหนึ่งจะสร้างภาระให้เซิร์ฟเวอร์มากแค่ไหนกัน... แล้วตามที่เขียนไว้ในบทความ มันก็เปิดขึ้นมาแค่ชั่วคราวเท่านั้น

 
passerby 2024-12-19

ดูเหมือนว่าจะมีปัญหา เพราะไม่ได้แค่ยก Test DB ขึ้นมาในกระบวนการ CI แต่จงใจหน่วง workflow เพื่อทำให้มันกลายเป็น DB สำหรับโฮสต์ด้วย และคำจำกัดความของคำว่า 'ชั่วคราว' ก็ยังคลุมเครือด้วย

 
freedomzero 2024-12-19

หมายถึงว่า "เฉพาะตอนที่จำเป็นเท่านั้นในฐานะส่วนหนึ่งของ CI/CD หรือเวิร์กโฟลว์การทดสอบ" ใช่ไหม?

 
eclipsense 2024-12-18

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

 
savvykang 2024-12-18

https://docs.github.com/en/site-policy/…

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

 
kandk 2024-12-18

ฮ่าๆ น่าสนุกดีนะ ทำแบบนี้แล้วจะประหยัดได้สักเท่าไหร่กันนะ..

 
bitofsky 2024-12-18

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

 
bitofsky 2024-12-18

เหมือนตอนที่มีการขุดเหรียญด้วย Actions ถ้าการกระทำแบบนี้เพิ่มขึ้นเรื่อย ๆ นโยบายก็คงจะเข้มงวดขึ้นเรื่อย ๆ เช่นกัน
ถ้าจะป้องกันการทำ tunneling ก็ต้องจำกัด outbound ดังนั้นผู้ใช้ทั่วไปก็จะยิ่งใช้งานลำบากขึ้นเรื่อย ๆ

 
zuppiy 2024-12-18

เห็นด้วย

 
xguru 2024-12-18

พอไปดูคอมเมนต์ใน Hacker News ก็มีเสียงวิจารณ์ว่าสิ่งนี้เข้าข่ายการใช้งานในทางที่ผิดอยู่เหมือนกัน
https://news.ycombinator.com/item?id=42397167
เป็นบทความที่เผยแพร่สู่สาธารณะอยู่แล้ว และเลยลองเอามาโพสต์ให้ดูกันในระดับว่า อ๋อ แบบนี้ก็ทำได้เหมือนกันนะ?