- ทริกเล็ก ๆ เพื่อแก้ปัญหาเรื่องต้นทุนและความซับซ้อนเมื่อต้องดูแลฐานข้อมูลสำหรับการพัฒนาและการทดสอบ
- 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 ความคิดเห็น
ดูเหมือนเป็นการใช้งานที่ไม่ได้มีเจตนาไว้แต่แรกนะครับ แม้ในทางเทคนิคจะทำได้ แต่ผมคิดว่าควรหลีกเลี่ยงการจงใจใช้วิธีที่ไม่แนะนำแบบนั้น
ก็เขียนไว้ว่าเป็น "ลูกเล่นเพื่อแก้ปัญหาเรื่องต้นทุนและความซับซ้อนในการรันฐานข้อมูลสำหรับการพัฒนาและการทดสอบ" ถ้ามีวิจารณญาณกันอยู่ก็คงตัดสินใจกันได้เองนะครับ
เมื่อนึกถึงกฎของ Hyrum (https://www.hyrumslaw.com/)
ก็คิดว่านี่เป็นวิธีที่สักวันหนึ่งต้องมีใครสักคนนึกขึ้นมาได้
แต่ก็อย่างที่หลายคนอื่นพูดกัน การนำไปใช้ผิดๆ แบบนี้กลับสร้างความไม่สะดวกที่ใหญ่กว่าเดิม
ถ้า GitHub Free Tier ไม่มี GitHub Actions ไปแล้ว... อา... นี่มันเป็นของดีนี่นา...
ผมไม่คิดว่านี่จะเป็นการนำไปใช้ในทางที่ผิด
แค่รันฐานข้อมูลตัวหนึ่งจะสร้างภาระให้เซิร์ฟเวอร์มากแค่ไหนกัน... แล้วตามที่เขียนไว้ในบทความ มันก็เปิดขึ้นมาแค่ชั่วคราวเท่านั้น
ดูเหมือนว่าจะมีปัญหา เพราะไม่ได้แค่ยก Test DB ขึ้นมาในกระบวนการ CI แต่จงใจหน่วง workflow เพื่อทำให้มันกลายเป็น DB สำหรับโฮสต์ด้วย และคำจำกัดความของคำว่า 'ชั่วคราว' ก็ยังคลุมเครือด้วย
หมายถึงว่า "เฉพาะตอนที่จำเป็นเท่านั้นในฐานะส่วนหนึ่งของ CI/CD หรือเวิร์กโฟลว์การทดสอบ" ใช่ไหม?
ถ้าเป็นผู้ใช้แบบเสียเงินก็น่าจะไม่มีปัญหาไม่ใช่เหรอครับ? ยังไงก็ใช้งานภายในโควตาที่ให้มาอยู่แล้ว
ส่วนที่เกินจากนั้นก็คงถูกคิดค่าบริการครับ
https://docs.github.com/en/site-policy/…
ไม่แน่ใจว่าขอบเขตของคำว่าโอเคครอบคลุมถึงไหน แต่ในเอกสารระบุไว้ว่าควรใช้เพื่อวัตถุประสงค์ในการทดสอบโปรแกรมเท่านั้น ในสถานะที่ยังไม่ได้ระบุชัดเจนว่าจะมีการคิดค่าบริการหรือไม่ และแน่นอนว่า GitHub ก็มีสิทธิ์เช่นการยกเลิกบัญชีหากมีการใช้งานบริการในทางที่ผิด
ฮ่าๆ น่าสนุกดีนะ ทำแบบนี้แล้วจะประหยัดได้สักเท่าไหร่กันนะ..
นี่คือการใช้ในทางที่ผิด การกระทำแบบนี้คือการนำทรัพยากรที่ควรถูกใช้เพื่อบุคคลทั่วไปที่มีเจตนาดีและโอเพนซอร์สไปใช้สิ้นเปลือง อีกทั้งยังเพิ่มต้นทุนในการให้บริการฟรีของ GitHub และท้ายที่สุดผมคิดว่าภาระนั้นจะถูกผลักไปให้ทุกคน
เหมือนตอนที่มีการขุดเหรียญด้วย Actions ถ้าการกระทำแบบนี้เพิ่มขึ้นเรื่อย ๆ นโยบายก็คงจะเข้มงวดขึ้นเรื่อย ๆ เช่นกัน
ถ้าจะป้องกันการทำ tunneling ก็ต้องจำกัด outbound ดังนั้นผู้ใช้ทั่วไปก็จะยิ่งใช้งานลำบากขึ้นเรื่อย ๆ
เห็นด้วย
พอไปดูคอมเมนต์ใน Hacker News ก็มีเสียงวิจารณ์ว่าสิ่งนี้เข้าข่ายการใช้งานในทางที่ผิดอยู่เหมือนกัน
https://news.ycombinator.com/item?id=42397167
เป็นบทความที่เผยแพร่สู่สาธารณะอยู่แล้ว และเลยลองเอามาโพสต์ให้ดูกันในระดับว่า อ๋อ แบบนี้ก็ทำได้เหมือนกันนะ?