Terraform vs Ansible
ทั้ง Terraform และ Ansible ต่างก็เป็นเครื่องมือที่เป็น Infrastructure as Code(IaC) เหมือนกัน แต่มีจุดแข็งที่แตกต่างกันและสามารถทำงานร่วมกันได้เป็นอย่างดี ในบทความนี้เราจะพาคุณไปดูความแตกต่างของ Terraform และ Ansible กัน
1. Objective
- Terraform: ใช้สำหรับ Provisioning Infrastructure (สร้างและจัดการโครงสร้างพื้นฐาน เช่น VM, Database, Network)
- Ansible: ใช้สำหรับ Configuration Management (ติดตั้งซอฟต์แวร์, กำหนดค่าเซิร์ฟเวอร์, อัปเดตแพ็กเกจ) และสามารถใช้ Provisioning ได้ด้วยเหมือนกัน แต่จะไม่ได้โดดเด่นเท่ากับ Terraform
2. Paradigm
- Terraform: ใช้ Declarative Approach (ระบุสิ่งที่เราต้องการ)
- Ansible: เป็นได้ทั้ง Imperative Approach(ระบุขั้นตอนการทำงานแบบ Step by Step) และ Declarative(ระบุสิ่งที่เราต้องการ เช่น เราต้องการ Server ที่มี Web Server ติดตั้งอยู่)
3. Immutable Infrastructure
การสร้าง Infrastructure ที่เราต้องการมีอยู่ 2 แนวคิดด้วยกันคือ
- Immutable เราจะสร้าง Resource ใหม่เสมอไม่มีการแก้ไขของเก่า โดยจะใช้การลบของเก่าออกแล้วสร้างของใหม่เข้าไปแทน
- Mutable จะสามารถเข้าไปแก้ไขหรือปรับเปลี่ยน Resource เดิมได้
ซึ่งการทำงานของ Terraform จะเป็น Immutable ในขณะที่ Ansible จะเป็นแบบ Mutable ดังนั้น Terraform จึงเหมาะกับการสร้าง Infrastructure ด้านล่างมากกว่า เพราะไม่ต้องแก้ไขอะไรใช้การสร้างใหม่ขึ้นมาแทนที่
4. State Management
- Terraform: มี State ที่เก็บสถานะปัจจุบันของ Infrastructure ดังนั้น Terraform จึงสามารถสร้าง Resources ได้เลยโดยที่ไม่ต้องตรวจสอบสถานะเริ่มต้น
- Ansible: ไม่มี State File ดังนั้น Ansible จะตรวจสอบสถานะตอน Run-time เท่านั้น ซึ่งจะทำใหม่ทุกครั้งที่มีการ Deploy
5. Agent
- Terraform: เป็น Agentless ไม่ต้องติดตั้งอะไรบน Platform ที่จะนำ Resources ไป Deploy(Terraform จะเรียกใช้ API ของ Platform นั้นๆ)
- Ansible: เป็น Agentless เช่นกัน แต่ต้องใช้ SSH หรือ WinRM ในการเชื่อมต่อไปยังเครื่องปลายทาง
6. Implementation
- Terraform: นิยมใช้ในการสร้างและจัดการ Cloud Infrastructure เช่น AWS, Azure, GCP, Kubernetes และอื่นๆ
- Ansible: นิยมใช้ในการ Configuration Management, Application Deployment และการอัปเดตระบบ
7. Syntax
- Terraform: ใช้ภาษา HCL (HashiCorp Configuration Language) หรือ JSON แต่จะนิยมใช้ HCL มากกว่า เพราะว่าเขียนและอ่านง่ายกว่ามาก
- Ansible: ใช้ YAML
8. Integration
- Terraform: ใช้ Provider ต่าง ๆ ในการเชื่อมต่อกับ Cloud Services หรือ Infrastructure อื่น ๆ
- Ansible: ใช้ Modules และ Roles
สรุปความแตกต่างของ Terraform กับ Ansible
โดยสรุปแล้ว Terraform จะต่างจาก Ansible ดังนี้
Feature | Terraform | Ansible |
---|---|---|
Objective | Provisioning | Configuration Management |
Paradigm | Declarative | Imperative + Declarative |
Immutable | Yes | No |
State Management | มี State File | ไม่มี State File |
Agent | Agentless | Agentless |
Language | HCL | YAML |
Implementation | จัดการ Cloud Infrastructure | จัดการ Configuration และ Deployment |
เลือกใช้เครื่องมือไหนดี?
- ถ้าต้องการ Provision Infrastructure (สร้าง VM, Database, Network) ให้เราใช้ Terraform
- ถ้าต้องการ ติดตั้งซอฟต์แวร์, กำหนดค่า Configuration ของเซิร์ฟเวอร์ หรือ Deploy Application ให้เลือกใช้ Ansible
- ซึ่งเราสามารถใช้งานทั้ง Ansible และ Terraform ร่วมกันได้ เช่น ใช้ Terraform สร้าง VM แล้วใช้ Ansible ติดตั้งซอฟต์แวร์และกำหนดค่า Configuration