ในยุคที่เทคโนโลยีก้าวหน้าอย่างรวดเร็ว การจัดการพื้นฐานโครงสร้างเพื่อสร้างและบริหารจัดการระบบ Infrastructure มีความซับซ้อนและเปลี่ยนแปลงที่รวดเร็ว ดังนั้นการใช้เทคโนโลยีเชิงอัตโนมัติที่เรียกว่า “Infrastructure as Code” (IaC) คือคำตอบ (หากใครยังไม่ทราบว่า IaC คืออะไร? สามารถเข้าไปอ่านจาก Link นี้ได้เลย)
Terraform และ Ansible เป็นเครื่องมือสองอันดับแรกที่มาสนับสนุนในการสร้างและบริหารจัดการพื้นฐานโครงสร้างด้วยเทคนิคของการ Coding เข้าไปในกระบวนการนี้ ซึ่งวันนี้เราจะมาเปรียบเทียบกันระหว่างสองเครื่องมือนี้ว่ามีความแตกต่างกันอย่างไร
Table of Contents
Terraform และ Ansible คืออะไร?
Terraform
Terraform เป็นเครื่องมือ Infrastructure as Code ในการจัดการ Automate Provisioning Infra ได้ทั้งบน On-Cloud หรือ On-Premises ช่วยให้ทีมพัฒนาทั้ง Dev และ Infra สามารถกำหนดและจัดการกับ Infrastructure เช่น เซิร์ฟเวอร์, Network และ Database ด้วยภาษา HCL (HashiCorp Configuration Language) ทีมนักพัฒนาสามารถกำหนดรายละเอียดโดยสร้าง Configuration Files ในการลงรายละเอียด และถ้าต้องการจะเปลี่ยนแปลง Infra ก็สามารถที่จะแก้ Configuration Files ได้ ตัว Infra ก็จะปรับเปลี่ยนให้อัตโนมัติ
Terraform มีข้อดีอีกอย่างหนึ่งคือ รองรับการใช้งานร่วมกับ Cloud Providers แบรนด์ต่าง ๆ มากมายได้ ไม่ว่าจะเป็น AWS, Azure, Google Cloud Platform, Kubernetes, Alibaba Cloud รวมไปถึง Oracle Cloud เป็นต้น ทำให้สามารถ Automate Provisioning ในการสร้าง Resource ของ Cloud Providers หลาย ๆ เจ้าได้ในเวลาเดียวกันเลย
Ansible
Ansible เป็นเครื่องมือ Configuration Management ที่เป็น Open-source ซัพพอร์ทโดย RedHat ซึ่งมีความใช้งานง่าย สามารถกำหนดค่า config และคำสั่งในรูปแบบของ “Playbooks” ที่มีโครงสร้างคล้ายกับภาษามนุษย์ ซึ่งมุ่งเน้นไปที่การสื่อสารและสร้างความเข้าใจ
Ansible เหมาะสำหรับงานที่เป็นแบบแผนระบบขนาดใหญ่ที่มีรายละเอียดไม่มาก เช่น การตั้งค่า Network, การ Install และ Setup configuration ตัว Software รวมถึงการ Manage และ Maintenance ระบบ ด้วยความสามารถในการส่ง Playbooks ไปยังหลาย ๆ เครื่องพร้อมกัน Ansible ช่วยให้งานเหล่านี้ทำได้อย่างรวดเร็วและเป็นอัตโนมัติ
โดยทั้ง Terraform และ Ansible มีความโดดเด่นในการทำ Infrastructure as code ด้วยกันทั้งคู่ เป็นกระบวนการ Automation ที่สำคัญในการสร้างพื้นฐานโครงสร้างที่ยืดหยุ่นและสามารถปรับเปลี่ยนได้ตามความต้องการขององค์กรในยุคปัจจุบันและเป็น Standard ที่ทีมนักพัฒนาต้องทำมากขึ้นในอนาคต
Terraform และ Ansible แตกต่างกันอย่างไรบ้าง
ประเภทของ Infrastructure
- Terraform : Immutable Infrastructure
พื้นฐาน Infrastucture แบบ “Immutable” หมายถึงการสร้างระบบและปรับเปลี่ยนโดยการทำค่าใหม่ Replace ที่ค่าเดิม ไม่ได้ทำการแก้ไขโดยตรง - Ansible : Mutable Infrastructure
รูปแบบที่สามารถแก้ไขหรือปรับเปลี่ยนได้โดยตรง เหมาะกับการ Develop App ที่ต้องการความยืดหยุ่นสูง
รูปแบบภาษาคำสั่งที่ใช้
- Terraform: Declarative Language
การใช้งานรูปแบบคำสั่ง Declarative หรือ คำสั่งแบบประกาศใช้ นั่นคือการเขียน Code ระบุผลลัพธ์ปลายทางของระบบ Infra ว่าต้องการแบบใดให้ Terraform ออกมาเป็นไฟล์ .tf โดยยึด Syntax ของ Terraform Configuration Language (HCL) ซึ่งเดิมมาจาก Hashicorp Configuration Language เป็นภาษาหลักในการแปลง Config ของ Infrastructure ให้อยู่ในรูปแบบโค้ด หรือ Script
ข้อดีคือ Terraform สามารถ Track state ของ code เพื่อดุการเปลี่ยนแปลงได้ และสามารถเก็บ state ล่าสุดของ Infrastructure ตามโค้ดในไฟล์ที่เราสร้างไว้ได้
สามารถอ่านเอกสารเกี่ยวกับ Terraform Configuration Language ที่เว็บไซต์หลักของ Terraform (https://www.terraform.io/docs/language/index.html) ซึ่งรวมถึงคำอธิบายและตัวอย่างการใช้งานต่างๆ อ่านให้ทำความเข้าใจเกี่ยวกับวิธีการกำหนดสถานะและค่าใน HCL
- Ansible: Procedural Language
สำหรับการใช้งานแบบ Procedural จะมีลักษณะคำสั่งแบบเป็นขั้นตอน คือนักพัฒนาต้องเขียนโค้ดระบุรายละเอียดเป็น Step เพื่อให้ Ansible เข้าใจว่าจะต้องทำอะไรบ้าง จึงเป็นเหตุผลว่า Ansible เหมาะกับงาน Configuration Management
ข้อดีของ Ansible คือเหมาะกับงานที่เป็น Service ไม่ว่าจะเป็น Install, Setup Config ต่าง ๆ โดยเฉพาะเมื่อต้องทำ Server หลายตัวพร้อมกันในทีเดียว Ansible จะตอบโจทย์กว่า ทำให้ ไม่เกิดความซ้ำซ้อนในการทำงาน และประหยัดเวลาในการทำงานอีกด้วย
โดย Ansible ใช้ภาษา YAML (YAML Ain’t Markup Language)ในรูปแบบ Playbook ในการรัน Script กำหนดคำสั่งการทำงานต่าง ๆ สามารถตามอ่าน Document : Playbook Guide ได้ที่ https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_intro.html
สรุปแล้ว สำหรับ Terraform มีความเหมาะกับการทำ Provisioning infra จะรวดเร็วและมีขั้นตอนที่ซับซ้อนน้อยกว่า และสามารถใช้งานร่วมกับ Configuration Management อื่น ๆ ซึ่งก็เป็นการทดแทนส่วนที่ขาดไปได้ดี ส่วน Ansible จะเหมาะกับการทำ Configuration management มากกว่า แต่ Ansible ก็มี Module ที่สามารถทำ Provisioning infra ได้เช่นเดียวกัน แต่ด้วยข้อจำกัดหลายอย่างจึงไม่นิยมใช้
ด้วยเหตุผล Terraform และ Ansible จะเป็น Infrastructure as code Tool เช่นเดียวกัน แต่ Best Practices มักถูกเลือกใช้ตามลักษะณะงานที่เหมาะสมมากกว่า หลายองค์กรจึงเลือกที่จะใช้ทั้งสองตัวร่วมกัน เพื่อให้ได้กระบวนการพัฒนาระบบที่มีประสิทธิภาพสูงสุด
หากคุณกำลังสนใจศึกษาการใช้งาน Terraform และ Ansible อย่างเจาะลึกลงมือทำใช้บนระบบในแบบโลกการทำงานจริง รวมถึง Best Practices ในการนำ Tools ทั้ง 2 ตัวมา Collaborate กันอย่างไรให้มีประสิทธิภาพสูงสุด
ขอแนะนำเวิร์กชอป “Infrastructure as Code and GitOps” เรียนกับผู้เชี่ยวชาญด้าน DevSecOps ระดับ Top ของไทย
สอนโดยคุณเดียร์ จิรายุส นิ่มแสง – Founder & CEO ของ Opsta (Thailand)และ Certified Kubernetes Administrator (CKA) & Certified Kubernetes Security Specialist (CKS) คนแรกของประเทศไทย
หรือ อัปสกิล 4 เวิร์กชอป DevSecOps ในหลักสูตรที่เนื้อหาครบที่สุดในไทย The Complete DevSecOps Program เรียนรู้ทั้ง DevOps, DevSecOps, Infrastructute as Code และ Observability ในราคาสุดคุ้มที่สุด!