ทำไม Infrastructure as Code ถึงสำคัญในปัจจุบัน [Part 2]

สวัสดีครับชาว IT กลับมาพบกันอีกครั้งกับ Cloud HM Blog สำหรับหัวข้อในวันนี้ จะเป็น Part 2 ของ Infrastructure as Code (IaC) คืออะไรนะครับ สำหรับท่านใดที่ยังไม่ได้อ่าน Part แรก สามารถอ่านได้จาก Link นี้เลยนะครับ

สำหรับเนื้อหาในวันนี้ จะมีอยู่ด้วย 3 หัวข้อ ได้แก่ ประเภทของ Infrastructure ที่นิยมสร้างด้วย IaC, รูปแบบ Declarative เทียบกับรูปแบบ Imperative และสุดท้ายคือเครื่องมือ IaC ที่นิยมใช้นะครับ

ประเภทของ Infrastructure ที่นิยมสร้างด้วย IaC

สำหรับการเลือกใช้งาน IaC ให้เข้ากับประเภทของ Infrastructure ก็เป็นเรื่องที่สำคัญเช่นเดียวกัน โดยประเภทของ Infrastructure จะแบ่งออกเป็น 2 อย่าง คือ Mutable กับ Immutable ครับ

Mutable Infrastructure

เป็น Infrastructure ที่สามารถเปลี่ยนโครงสร้างภายในได้หลังจากที่ Provisioning ในครั้งแรกไปแล้ว การที่มี Infrastructure แบบนี้จะช่วยให้ทีม Development มีความยืดหยุ่นในการ Custom server ให้เป็นไปตามความต้องการ พูดง่าย ๆ ก็คือ เหมาะกับการ Develop Application รวมไปถึงกรณีที่ต้องแก้ไขในเรื่องของ Security แบบฉุกเฉินนั่นเอง แต่จากประโยชน์ของ IaC ที่เคยกล่าวไปใน Blog ที่แล้ว เรื่องการลดความซ้ำซ้อนของ Configuration การที่เราจะ Maintain ความต่อเนื่องในการ Deploy และการทำเป็น Version ได้ ถ้าใช้กับ Infra ที่เป็นแบบ Mutable จะ Track Version ได้ยากกว่าแบบ Immutable ครับ

ฉะนั้นหมายความว่า IaC จะเหมาะกับการใช้งานกับ Infrastructure ที่เป็นแบบ Immutable เหตุผลก็มาจากการที่ Infrastructure แบบดังกล่าวจะไม่สามารถแก้ไขได้หลังจากที่ Deploy ไปแล้วในครั้งแรก ทำให้การที่จะปรับเปลี่ยนโครงสร้างบางอย่างจะต้องทำการ Replace ของใหม่ทับ Infra เดิมที่เคย Deploy ไปแล้วเท่านั้น เนื่องจากการใช้ IaC จะ Deploy Infra ตัวใหม่บน Cloud ได้ไวกว่าการที่จะต้องมานั่งแก้ไข Infra ส่วนที่ต้องการปรับปรุงครับ

Infra แบบ Immutable ทำให้การใช้งานด้วย IaC มีประโยชน์อย่างแท้จริง ไม่ว่าจะเป็นการแก้ไข Code ใน IaC ที่ทำได้ง่ายกว่าการนั่งคลิก GUI ซึ่งช่วยลดความผิดพลาดในการ Configure ช่วยให้การ Deploy สะดวกมากขึ้น และได้ Infra ตรงตามที่ต้องการไม่ว่าจะเป็น Environment สำหรับการทดสอบ หรือการพัฒนา Application และก็ยังง่ายต่อการดูแลรักษารวมไปถึงการติดตาม Version ของ Infra ทำให้มั่นใจได้ว่าหากต้องการ Roll back ก็สามารถทำได้ถ้าจำเป็นต้องทำครับ

Declarative vs Imperative

ในการเลือกใช้งาน IaC จะต้องเข้าใจการทำงานระหว่าง Declarative (การประกาศให้ใช้) กับ Imperative (การบังคับให้ใช้) ในการทำ Automation

ในหลาย ๆ องค์กรมีการใช้งานแบบ Declarative หรือบางคนอาจจะรู้จักในชื่อของ Functional โดยการใช้งานแบบ Declarative คุณจะต้องระบุ Stage สุดท้ายว่าอยากจะให้ Infrastructure มีรูปแบบใด แล้วเจ้า IaC Software จะจัดการที่เหลือให้เอง ไม่ว่าจะเป็นการเพิ่มจำนวน VM หรือ Container, การติดตั้ง Software, การแก้ไขระบบ และการจัดการในเรื่องของ Versioning  แต่ข้อเสียก็มีอยู่บ้างเหมือนกัน เพราะการใช้งานแบบ Declarative ต้องอาศัยความสามารถเฉพาะตัวของ Admin ที่ใช้ในการตั้งค่าและจัดการเรื่องของ Configuration และแน่นอนว่า Admin จะต้องเข้าใจว่า Solution ที่จะทำ ทำไปเพื่ออะไรด้วย

สำหรับการใช้งานแบบ Imperative จะมีลักษณะการทำงานแบบเป็นขั้นตอน ซึ่งการทำงานลักษณะนี้จะช่วยให้คุณสามารถเตรียม Script สำหรับงานด้าน Automation ที่ช่วย Provisioning Infra ของคุณด้วย Step เดียว ซึ่งอาจจะเหนื่อยนิดนึงถ้าคุณต้องการที่จะ Scale Infra เพิ่ม เพราะอะไร? สมมติคุณอยากได้ VM เพิ่มมาอีก 1 เครื่อง หรือจะ 100 เครื่องก็ตามแต่ ในกรณีนี้อาจจะไม่ยากเท่าไหร่ ถ้าคุณมี Script ที่เคยใช้ Deploy VM ไว้แล้ว แต่ถ้าสมมติในทีมคุณอยากได้ Container มาสัก 1 เครื่อง ซึ่งคุณไม่เคยเขียน Script มาก่อน ก็จะต้องมานั่งไล่ดูว่ามีขั้นตอนในการสร้างอย่างไรบ้าง ซึ่งถ้าเป็นการใช้งานแบบ Declarative จะไม่ต้องลงรายละเอียดเท่านี้ เพราะว่า Software จัดการให้หมดเลย ฉะนั้นประโยชน์ที่ได้ก็จะช่วยให้ Admin สามารถเข้าใจ Script และสามารถปรับปรุงจาก Script ที่มีอยู่ได้นั่นเองครับ

สรุปและเปรียบเทียบง่าย ๆ โดยอธิบายแบบนี้น่าจะเข้าใจได้ง่ายมากขึ้นนะครับ

การใช้งานแบบ Declarative จะเป็นการใช้งานคล้าย ๆ GPS การใช้งานแบบ Imperative จะเป็นลักษณะทำตามคำสั่งให้ไปตามเส้นทางที่วางไว้ เลี้ยวตรงนี้ เลี้ยวตรงนั้นแล้วมันต่างกันอย่างไรครับ?

การใช้งาน GPS คือการที่คุณกรอกข้อมูลปลายทางที่ต้องการจะไป แล้วที่เหลือ GPS จะเป็นคนแนะนำให้ว่า ไปทางไหนจะไปได้ไวที่สุด เส้นทางไหนหลีกเลี่ยงรถติดได้ ก็คือสามารถยืดหยุ่นได้ตามสถานการณ์ หรือเปลี่ยนเส้นทางได้นั่นเอง ก็คือไม่สนวิธีการ อยากได้แค่ผลลัพธ์ต่างจากแบบการทำตามสั่งให้ไปตามเส้นทางที่วางไว้ ที่อาศัยประสบการณ์จากผู้ที่มีข้อมูลของเส้นทางนี้ ซึ่งถ้าเจอรถติด หรือว่าต้องการแก้ไขเส้นทาง คุณก็ต้องสอบถามไปยังผู้ที่ประสบการณ์ หรือไม่ก็ต้องแก้ไขหน้างานกันเอาเองแบบนี้จะเป็นลักษณะของ Process-based หรืออิงขั้นตอนเป็นหลัก

เครื่องมือที่นิยมใช้สำหรับ Infrastructure as Code

จริง ๆ ก็มี Open-source หลาย ๆ เจ้าให้บริการ IaC มากมาย แต่ที่คนส่วนใหญ่นิยมจะมีอยู่ 2 ตัว คือ Ansible และ Terraform

Ansible คืออะไร?

Ansible เป็น Open-source project ที่ได้รับการสนับสนุนจาก Red Hat โดยมีการออกแบบมาเพื่อช่วยให้องค์กรสามารถทำการ Automate ต่าง ๆ ได้ ไม่ว่าจะเป็นการ Provisioning, การจัดการเรื่องของ Configuration และการพัฒนา Application

โดย Ansible จะเป็น IaC tool ที่มีการใช้งานแบบ Declarative มีหลักการทำงานโดยการสร้างสิ่งที่เรียกว่า Playbooks ขึ้นมา (เขียนอยู่ในรูปแบบของ YAML) ในการระบุสถานะที่ต้องการสำหรับ Infra ของคุณ หลังจากนั้นก็จะทำการ Provisioning ให้

Ansible จะเป็นที่นิยมใช้งานในการ Automating provisioning ของ Docker และการ Deploy Kubernetes ครับ

Terraform คืออะไร?

Terraform เป็นอีกหนึ่งเครื่องมือในการ Provisioing และบริหารจัดการ Infra ที่ใช้รูปแบบ Declarative เช่นกัน ซึ่งช่วยให้วิศวกรสามารถทำ Automate Provisioning Infra ได้ทุกที่ไม่ว่าจะเป็น On-Cloud หรือ On-Premises

โดย Terraform สามารถใช้งานร่วมกับ Cloud Providers ต่าง ๆ มากมายได้ ซึ่งก็เป็นข้อดีที่สามารถ Automate Provisioning ในการสร้าง Resource ของ Cloud Providers หลาย ๆ เจ้าได้ในเวลาเดียวกันเลย โดยไม่ต้องคำนึงว่า Server ตั้งอยู่ที่ไหน, มี DNS Server, มี Database หรือไม่ และอันสุดท้ายนะครับ Terraform ยังสามารถ Provision Application ที่เขียนขึ้นจากภาษาอะไรก็ได้ครับ

ต่างจาก Ansible สำหรับ Terraform แล้ว จะไม่สามารถทำหน้าที่เป็น Configuration Management ได้ แต่สามารถนำไปใช้ร่วมกับเครื่องมือสำหรับการทำ Configuration Management อย่างเช่น Cloud Formation ที่จะช่วยทำการ Automate Provision Infra ให้อยู่ในรูปแบบที่ต้องการได้ โดยจะใช้เจ้า Configuration Files ในการลงรายละเอียด และถ้าต้องการจะเปลี่ยนแปลง Infra ก็สามารถที่จะแก้ Configuration Files ได้ ตัว Infra ก็จะปรับเปลี่ยนให้โดยอัตโนมัติครับ

เป็นอย่างไรกันบ้างครับ สำหรับ IaC เนื้อหา 2 Parts ครบ,จบ, เรียบร้อยแล้วครับผม หวังว่าท่านจะได้ประโยชน์อย่างเต็มที่นะครับ Cloud HM มีบริการสำหรับท่านที่ต้องการใช้งาน Global Cloud ไม่ว่าจะเป็น AWS, Azure หรือ Google สามารถสอบถามรายละเอียด หรือติดต่อเพิ่มเติมได้ที่นี่นะครับ
ขอบคุณครับ

— Cloud HM