By Arnon Puitrakul - 04 พฤศจิกายน 2024
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน
Infrastructure as Code (IaC) เป็นเทคนิคการที่เราใช้การเขียน Code เพื่อกำหนดลักษณะสำคัญเพื่อสร้างระบบขึ้นมาโดยอัตโนมัติ แทนที่จะเป็นการใช้มนุษย์ค่อย ๆ ทำทีละขั้นตอน โดย Code ที่เราเขียนจะสามารถนำมาใช้ซ้ำ ๆ ได้เรื่อยเมื่อเราเอามา Deploy หลาย ๆ ครั้ง ทำให้สามารถลดงานของทั้ง Developer และ DevOps ในการจัดเตรียมพื้นที่สำหรับการ Dev, Test และ Deploy Application ซึ่ง Infrastructure ที่เรากำลังพูดถึง ไม่ใช่แค่เรื่อง Database หรือพวก โปรแกรมต่าง ๆ เท่านั้นนะ เรากำลังพูดถึงอะไรที่ลึกกว่านั้นอีก เช่น Network, Security, OS และ Storage
ตัวอย่างเช่น Application ของเราออกแบบมาเป็น Microservice แยกส่วนเป็น Frontend, Backend และ Database แล้วต้องการยัดลงไปใน Google Cloud จากเดิมเราจะต้องไปนั่งสร้าง Service ขึ้นมาเองทีละตัว, กำหนด Security Policy และ Network Configuration ต่าง ๆ ให้กับแต่ละ Service ยังไม่นับการกำหนด Scaling Policy อีกสำหรับระบบที่มี Requirement ให้รองรับการ Scale และในแต่ละ Service เอง หากเป็นพวก VM เราจะต้องมานั่งกำหนด ขนาดของเครื่อง และภายในเครื่องเราจะต้องมาบอกอีกว่า มันจะมีโปรแกรม หรือ Runtime อะไรที่ต้องติดตั้งไว้ล่วงหน้าหรือไม่ ซึ่งงานในการ Setup ทั้งหมดนี้ในโปรแกรมขนาดใหญ่ มีจำนวน Service และเครื่องที่เกี่ยวข้องเป็นจำนวนมาก เป็นเรื่องที่กินเวลาเยอะมาก ๆ ต้องมานั่งคลิก ๆ ทีละขั้นตอน อะ รอมัน Deploy Config อีก กว่าจะติดตั้งนั่นนี่เสร็จ ก็จะกินเวลานานมาก ๆ ประกอบกับ บางที เราไม่ได้ทำครั้งเดียว เราอาจจะต้องทำบน Development, Stagging และ Production Site อย่างน้อย 3 ชุด ยังไม่นับว่า ถ้าอยู่ ๆ คุยกันบอกว่า เห้ย Env นี้ไม่เอาละ จะเปลี่ยนสเปกนิดนึง อะชิบหาย ต้องมานั่งระเบิดงานเดิม แล้วสร้างใหม่อีกแบบนี้ไปเรื่อย ๆ DevOps ด่าพ่องแน่นอน
แต่ถ้าเราใช้ IaC เราสามารถเขียน Definition ของแต่ละ Service ขึ้นมาได้ตรง ๆ เลยว่า เราอยากได้แบบไหน อยากได้อะไรบ้าง รวมไปถึงพวก Security Policy และ Scaling Policy ต่าง ๆ ใส่เข้าไปด้วย จากนั้น หากเราต้องการ Env นี้ใน Development ,Stagging และ Production Site สิ่งที่เราต้องทำมีเพียงแค่ กด Deploy เท่านั้น ทุกอย่างที่เรากำหนดไว้ใน Code ก็จะถูก Deploy ขึ้นมาเป็นระบบที่รันได้จริงทันที และหากบอกว่า เราจะเปลี่ยนแปลง เราก็แค่ Redeploy เดี๋ยวมันจะมานั่งคิดเองว่า มันต้องระเบิดอะไร เปลี่ยนอะไรบ้าง แล้วจัดการเอง เราไม่ต้องยุ่ง
พีคกว่านั้นคือ อยู่ ๆ เราอาจจะอยากเอา Application ของเราขึ้น Cloud แทนที่จะเป็น On-Prem ละ ถ้าเป็นเมื่อก่อน เราก็ต้องไปนั่งเข้าเว็บ ไปสร้าง Service ต่าง ๆ แต่ด้วย IaC เราสามารถเอา Code ที่ระบุสภาพแวดล้อมนี่แหละไปใช้ได้เลย แล้วตั้ง Target เป็น Cloud ที่เราต้องการ เราก็จะได้ Infra แบบเดิมที่เราตั้งไว้บน Cloud ได้เลย หรือกระทั่งถ้าเราเปลี่ยน Cloud Provider เราก็แทบไม่ต้องมานั่งเปลี่ยนอะไรมากเลย
การใช้งาน IaC มีหลากหลายประโยชน์ด้วยกัน แต่เราขอแบ่งประโยชน์ที่เราคิดว่ามันได้เต็ม ๆ มาสัก 3 ประโยชน์ด้วยกัน
ทั้ง 3 ข้อ สรุปออกมาเป็นประโยคเดียวสั้น ๆ คือ มันทำให้เรา Treat Infra ได้เหมือน Code รองรับการ Automate ยัดลงไปใน CI/CI Pipeline จะ Spin up กี่รอบก็ใช้เวลาไม่นาน
เอาจริง ๆ นะ เราสนับสนุนให้ทีมทำ IaC จริง ๆ นะ หลังจากเรา Adopt มาใช้งานแล้ว เรารู้สึกว่า มันทำให้การทำงานง่ายขึ้น และลดโอกาสการเกิดข้อผิดพลาดในการ Provision Infra มหาศาลมาก ๆ (เจ็บกับเรื่องนี้มาแล้ว บรรทัดเดียวสยองไป 1 อาทิตย์) นอกจากนั้นยังสามารถลดการหยุมหัวระหว่าง Dev และ DevOps ได้ดีมาก ๆ ส่วน Tools ในท้องตลาดมีให้เราเลือกเลอะมาก ๆ แต่ตัวที่เราทดลองแล้วรู้สึกชอบมี 2 ตัวคือ Terraform ตัวนี้มันยืดหยุ่นในการทำงานมาก ๆ เราสามารถตั้งค่าได้หลากหลายสุด ๆ ตั้งแต่ On-Prem ง่าย ๆ ยัน Cloud ท่ายากนางก็เล่นได้หมดไม่หวั่น เรียกว่าสารพัดท่าเลยทีเดียว สิ่งที่ทำให้เราคิดว่าทั้งมันเริ่ดมาก ๆ คือ มันใช้ลักษณะการกำหนดลักษณะแบบ Declarative กล่าวคือ เราไม่จำเป็นต้องบอกชั้นตอนการสร้าง เราบอกแค่เราอยากได้อะไรที่ปลายทางเท่านั้น แนะนำจริง ๆ ว่าอยากให้ลองมาใช้ดู แล้วชีวิตคุณจะเปลี่ยนไป
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...
เมื่อหลายวันก่อน เราเลื่อนเฟสไปเจอความเห็นนึงที่อ่านแล้วถึงกับต้องขยี้ตาอ่านซ้ำบอกว่า ให้เราลองถาม ChatGPT ดูแล้วเราจะไม่กลับไปหา Google อีกเลย มันเป็นแบบนั้นได้จริงหรือไม่ วันนี้เราจะมาอธิบายในแง่หลักการทำงานของมัน และความเป็นไปได้กันว่า มันเป็นไปได้จริงหรือไม่อย่างไร...
ในปัจจุบันเราพึ่งพาการเก็บข้อมูลต่าง ๆ บนเครื่องคอมพิวเตอร์มากขึ้นเรื่อย ๆ สำหรับบางคนมากจนไม่สามารถเก็บได้ในเครื่องของเราอีกแล้ว ทำให้อาจจะต้องมองหาระบบจัดเก็บข้อมูลอื่น ๆ เข้ามาใช้งาน หนึ่งในนั้นคือการใช้ NAS หลายคนมีคำถามว่า แล้วเราควรจะเลือกซื้อ NAS สำเร็จรูป หรือ DIY ดี...
เราไปเจอความเชื่อนึงเกี่ยวกับ SQL Query มาว่า เนี่ยนะ ถ้าเราจะ Count หรือนับแถว เราอย่าไปใช้ count(*) นะ ให้เราใช้ count(id) หรือด้านในเป็น Primary Key ใน Table นั้น ๆ จะทำให้ Query ได้เร็วกว่า วันน้ีเรามาทดลองกันดีกว่า ว่ามันเป็นแบบนั้นจริง ๆ หรือไม่...