สรุปสิ่งที่เรียนรู้มาทั้งหมด
แนะนำเรื่องพื้นฐานอื่นๆเพิ่มเติมสำหรับการ Deploy production
และนี่คือพื้นฐานของการ Deploy งาน Backend Application 1 ตัว โดย Step ที่จะมีก็จะเป็นตามนี้
- ทำการสร้าง
Dockerfile
config เพื่อทำการ build ออกมาเป็น image - ทำการ setting database ที่ใช้สำหรับเก็บข้อมูล
- ทำการนำ image ไปหาที่สำหรับการ Deploy เป็น Container ออกมาบน Cloud
- บริหารจัดการส่วนของ Secret และ ENV (ในหัวข้อนี้จะพาเล่นแค่ส่วน ENV ซึ่งจริงๆ หากเป็น Secret key ควรใช้ service อื่นๆมาช่วยเก็บข้อมูลเช่น Secret Manager ของ GCP หรือ Valut)
- บริหารส่วนของ CI/CD เพื่อเพิ่มส่วนของ Trigger การ build + deploy งาน (ในหัวข้อนี้ มีโอกาสเราจะมาเล่าเพิ่มเติมในอนาคต เนื่องจากเป็นหัวข้อที่ต้องปูพื้นฐานสำคัญของ Devops เพิ่มเติมอีกที)
เรื่องอื่นๆที่คว รคำนึงถึงด้วยก็จะมี
- Security Auditing ทำการตรวจสอบ application ด้วยว่า Network ทุกอย่างถูกใช้งานอย่างถูกต้องหรือไม่
- database สามารถเข้าถึงได้แค่เฉพาะคนที่ควรเข้าถึงได้หรือไม่
- API มีการจำกัดการยิง req/s ไว้หรือไม่
- มี API ตัวไหนที่สามารถดึงข้อมูลออกมาได้ ทั้งที่ไม่ควรจะดึงออกมาได้
- practice security เพิ่มเติม ฟังได้ใน [หัวข้อ OWASP] (https://www.youtube.com/watch?v=XVbSl0R_T7M) กันนะครับ
- CI/CD เพิ่ม process pipeline สำหรับการ Deploy เพื่อให้การ deploy งานเป็นไปอย่างอัตโนมัติมากขึ้น
- CI (Continuous Integration) คือ practice ของ software development ที่อนุญาตให้เพิ่ม process บางอย่างเพิ่มเข้าไปตอน merge code เข้า repository ซึ่งปกติก็จะเป็น process การ build image กับ run test (พวก unit test)
- CD (Continuous Deployment) คือ practice ของ software development ที่เพิ่ม process ในการทำ automatically test + deploy งานขึ้น production environment (เป็นตัวที่นำ image ที่ build แล้วขึ้นตัว Cloud แบบอัตโนมัต ิ)
- ทั้ง 2 เรื่องนี้ CI/CD ถือเป็น practice สำคัญที่ช่วยทำให้ software process ทำงานได้ไวขึ้น และทำงานแบบอัตโนมัติมากขึ้น (สามารถลดอัตราความผิดพลาดจากการ deploy งานด้วยมือได้)
- Monitoring การทำ Monitor ระบบว่า ระบบยังใช้งานได้ปกติดีหรือไม่ เสถียรปกติดีหรือไม่ (CPU, RAM) เพื่อให้แน่ใจว่า application ของเรานั้นยังทำงานได้เหมือนเดิม และสามารถส่ง Notification บางอย่างเมื่อระบบเรามีปัญหาออกมาได้
- Logging การ design Log ออกมาเพื่อให้สามารถตรวจสอบปัญหาได้ไวขณะที่ application ใช้งาน
- Backup เรื่องของการสำรองข้อมูลและการกู้คืนข้อมูล โดยต้องคำนึงถึงในกรณีที่ database อาจจะเจอปัญหาบางอย่างจากการใช้งานหรือจากการโจมตี ต้องยังสามารถนำข้อมูล database กลับมาได้ รวมถึงต้องมีระบบ Recovery ในกรณีที่ database มีปัญหาจนต้องนำ Backup กลับมาใช้ (ถ้าใช้ตัวอย่าง Cloud SQL จะมี feature เหล่านี้อยู่แล้ว)
- Pricing รว มถึงเรื่องของค่าใช้จ่ายในการขึ้น Cloud เช่นเดียวกัน โดยปกติในปัจจุบัน Pricing จะมี 2 แบบใหญ่ๆคือ จ่ายแบบเหมา (เป็นแบบรายเดือน) กับ Pay per use (เช่น Cloud run ที่จะคิด Pricing ตามจำนวนชั่วโมงที่เปิดออกมา) เลือก Pricing ให้เหมาะสมกับตัวงานและการประเมินรายจ่ายด้วย
- Software Quality ที่เหลือก็จะเป็นเรื่องของ Software Quality การทำ testing อย่างครอบคลุม และการทดสอบระบบอย่างถี่ถ้วนก่อนที่จะใช้งาน
- ตัว code ได้ implement ตาม practice ของ security เรียบร้อย, มีการ encryption ข้อมูล sensitive ไว้แล้วเรียบร้อย (เช่น เข้า hash password, encrypt เลขบัตรประชาชน)
- รวมถึง follow practice ของ OWASP เรียบร้อย
- Scalability เป็นการมั่นใจว่า application สามารถรองรับ load ได้อย่างเหมาะสม
- สามารถทดสอบเรื่องนี้ได้จากการทำ Load Test เพื่อเป็นการทดสอบ load ของระบบได้ (แต่ วิธีนี้จะไม่แนะนำกับ service ที่ Pay per use เนื่องจากจะเสีย Pricing จำนวนมากจากการทำ Load test)