Ansible Playbook Advanced Guide DevOps

Ansible Playbook Advanced Guide

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Ansible Playbook Advanced Guide

Ansible Playbook Advanced Guide คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยเจอปัญหาไหม? สมัยผมทำร้านเน็ต SiamCafe เนี่ย ต้องลงโปรแกรมทีเป็นร้อยเครื่อง! คิดดูดิ ถ้าต้องมานั่งลงทีละเครื่อง มือหงิกพอดี! Ansible Playbook เนี่ยแหละคือพระเอกของเรา มันคือตัวช่วยในการจัดการและคอนฟิกเครื่องเซิร์ฟเวอร์ หรือคอมพิวเตอร์หลายๆ เครื่องพร้อมๆ กันแบบอัตโนมัติ

ลองนึกภาพนะ ถ้าเรามีสคริปต์ที่บอกว่า "ให้ลงโปรแกรม A, ตั้งค่า B, สร้างไฟล์ C" แล้วสั่งให้ Ansible รันสคริปต์นี้กับเครื่อง 100 เครื่องพร้อมกัน ปิ๊ง! ทุกอย่างเสร็จในพริบตา ประหยัดเวลาไปเยอะโขเลยล่ะ

ที่สำคัญคือ Ansible มัน "Idempotent" หมายความว่า รันซ้ำกี่ที ผลลัพธ์ก็เหมือนเดิม ไม่ต้องกลัวว่ารันแล้วจะเละเทะ สมัยผมดูแลระบบร้านเน็ต นี่สำคัญมาก เพราะบางทีไฟดับ ต้องมารันสคริปต์ซ้ำ ก็สบายใจได้ว่าทุกอย่างจะกลับมาเหมือนเดิม

พื้นฐานที่ต้องรู้

YAML คืออะไร? ทำไมต้องรู้?

Ansible Playbook เขียนด้วยภาษา YAML (YAML Ain't Markup Language) น้องๆ อาจจะงงว่ามันคืออะไร? ง่ายๆ มันคือภาษาที่เน้นให้อ่านง่าย เข้าใจง่าย คล้ายๆ JSON แต่สบายตากว่าเยอะ สมัยผมเริ่มใช้ Ansible ก็ต้องมานั่งทำความเข้าใจ YAML นี่แหละ แต่รับรองว่าไม่ยากอย่างที่คิด

ลองดูตัวอย่าง YAML ง่ายๆ:


---
- name: Install Apache
  hosts: webservers
  tasks:
    - name: Install httpd package
      yum:
        name: httpd
        state: present

เห็นไหม? อ่านแล้วพอจะเดาได้เลยว่ามันทำอะไรบ้าง

Inventory คืออะไร? ทำไมต้องมี?

Inventory คือไฟล์ที่เก็บรายชื่อเครื่องที่เราจะจัดการด้วย Ansible ลองนึกภาพเป็นสมุดรายชื่อเพื่อนๆ ในร้านเน็ตเรา แต่ละเครื่องก็จะมี IP Address, ชื่อผู้ใช้, รหัสผ่าน (แต่สมัยนี้เขาไม่เก็บรหัสผ่านตรงๆ แล้วนะ ใช้ SSH Key กันหมด) การมี Inventory ทำให้ Ansible รู้ว่าจะต้องไปคุยกับเครื่องไหนบ้าง

ตัวอย่าง Inventory:


[webservers]
server1 ansible_host=192.168.1.10 ansible_user=root
server2 ansible_host=192.168.1.11 ansible_user=root

[databases]
db1 ansible_host=192.168.1.20 ansible_user=root

จากตัวอย่าง เราแบ่งเครื่องออกเป็นสองกลุ่ม `webservers` และ `databases` ทำให้เราสามารถสั่งงานเฉพาะกลุ่มได้

Modules คืออะไร?

Modules คือเครื่องมือสำเร็จรูปที่ Ansible เตรียมไว้ให้เราใช้ทำงานต่างๆ เช่น ติดตั้งโปรแกรม, สร้างไฟล์, แก้ไขคอนฟิก ไฟล์, รีสตาร์ทเซอร์วิส สมัยผมทำร้านเน็ต ต้องเขียนสคริปต์เองหมด แต่ Ansible ทำให้ชีวิตง่ายขึ้นเยอะ

ตัวอย่างการใช้ module `yum` เพื่อติดตั้งโปรแกรม:


- name: Install httpd package
  yum:
    name: httpd
    state: present

`yum` เป็น module สำหรับจัดการ package บน CentOS/RHEL `name` คือชื่อ package ที่ต้องการติดตั้ง `state: present` หมายถึงให้ติดตั้ง ถ้ายังไม่ได้ติดตั้ง

วิธีใช้งาน / เริ่มต้นยังไง

เริ่มต้นใช้งาน Ansible ไม่ยากอย่างที่คิด! สิ่งที่ต้องมีคือ:

  1. เครื่อง Control Node: เครื่องที่เราจะใช้สั่งงาน Ansible
  2. เครื่อง Managed Nodes: เครื่องที่เราจะจัดการ (เซิร์ฟเวอร์, คอมพิวเตอร์)

บน Control Node ต้องติดตั้ง Ansible ก่อน (ลองหาใน Google ว่า "Install Ansible on [ชื่อ OS ของคุณ]" นะ)

ขั้นตอนปฏิบัติจริง

สร้าง Playbook แรก

สร้างไฟล์ชื่อ `install_apache.yml` (หรืออะไรก็ได้ที่สื่อถึงงานที่เราจะทำ) แล้วใส่โค้ด YAML ด้านล่างนี้:


---
- name: Install Apache on webservers
  hosts: webservers
  become: true
  tasks:
    - name: Install httpd package
      yum:
        name: httpd
        state: present
    - name: Start httpd service
      service:
        name: httpd
        state: started
        enabled: true

อธิบายโค้ด:

รัน Playbook

เปิด Terminal แล้วพิมพ์คำสั่ง:


ansible-playbook install_apache.yml

Ansible จะเริ่มทำงานตามที่เราสั่ง ถ้าไม่มีอะไรผิดพลาด Apache จะถูกติดตั้งและเปิดใช้งานบนเครื่อง `webservers` ใน Inventory ของเรา

ตรวจสอบผลลัพธ์

หลังจาก Ansible รันเสร็จ ให้ลอง SSH เข้าไปในเครื่อง `webservers` แล้วตรวจสอบว่า Apache ทำงานอยู่จริงไหม

ถ้าทุกอย่างเรียบร้อย แสดงว่าเราทำสำเร็จแล้ว! ลองเข้าไปดูบทความอื่นๆ ใน SiamCafe Blog นะ มีเรื่อง IT อีกเยอะแยะเลย

🎬 วิดีโอแนะนำ

ดูวิดีโอเพิ่มเติมเกี่ยวกับAnsible Playbook Advanced Guide:

เปรียบเทียบกับทางเลือกอื่น

Ansible ไม่ใช่เครื่องมือเดียวที่ใช้ทำ Infrastructure as Code ยังมีเครื่องมืออื่นๆ อีกมากมาย เช่น Chef, Puppet, SaltStack แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป สมัยผมเลือกใช้ Ansible เพราะมัน "Agentless" คือไม่ต้องติดตั้งโปรแกรมอะไรบนเครื่อง Managed Nodes เลย แค่มี SSH ก็พอ

ลองดูตารางเปรียบเทียบง่ายๆ:

เครื่องมือ Agent ภาษา ความยาก เหมาะกับ
Ansible No YAML ง่าย งานคอนฟิกทั่วไป, Deployment
Chef Yes Ruby ปานกลาง งานคอนฟิกที่ซับซ้อน, Compliance
Puppet Yes Puppet DSL ปานกลาง งานคอนฟิกขนาดใหญ่, Policy Enforcement
SaltStack Yes YAML, Python ปานกลาง งานคอนฟิกที่ต้องการความเร็ว, Real-time Control

เลือกเครื่องมือที่เหมาะกับงานของเราที่สุด! อย่าลืมไปอ่านบทความอื่นๆ ใน SiamCafe Blog นะครับ!

Best Practices / เคล็ดลับจากประสบการณ์

สมัยผมทำร้านเน็ตเนี่ย เรื่องการจัดการเครื่องลูกข่ายสำคัญมาก ถ้าเครื่องไหนมีปัญหา ก็กระทบลูกค้า กระทบรายได้ Ansible Playbook ก็เหมือนกัน ถ้าเขียนไม่ดี รันไปแล้วพังทั้งระบบได้

ประสบการณ์สอนผมว่า การวางแผนล่วงหน้าสำคัญสุดๆ ก่อนจะเริ่มเขียน Playbook คิดให้ดีก่อนว่าเราต้องการอะไร จะจัดการอะไรบ้าง เขียนออกมาเป็นข้อๆ เลยยิ่งดี

เทคนิคที่ 1: แยก Role ให้ชัดเจน

ลองนึกภาพร้านเน็ตที่มีหลายโซน โซนเกม โซนทำงาน โซนดูหนัง แต่ละโซนก็ต้องมีโปรแกรม มีการตั้งค่าที่แตกต่างกัน Role ใน Ansible ก็เหมือนกัน

แยก Role ตามหน้าที่ของมันเลย เช่น Role สำหรับติดตั้ง Web Server, Role สำหรับติดตั้ง Database, Role สำหรับจัดการ Firewall แบบนี้จะทำให้ Playbook เราเป็นระเบียบ แก้ไขง่าย และนำกลับมาใช้ใหม่ได้


# roles/webserver/tasks/main.yml
- name: Install Apache
  apt:
    name: apache2
    state: present

เทคนิคที่ 2: ใช้ Variables ให้เป็นประโยชน์

จำได้ว่าสมัยก่อน เวลาจะเปลี่ยน IP Address ของเครื่องลูกข่ายแต่ละเครื่อง ต้องมานั่งแก้ทีละเครื่อง เสียเวลามาก Variables ใน Ansible ช่วยแก้ปัญหานี้ได้

Variables คือตัวแปรที่เราสามารถกำหนดค่าต่างๆ ได้ เช่น ชื่อ User, Password, IP Address, Version ของโปรแกรม เวลาที่เราต้องการเปลี่ยนค่า ก็แค่แก้ Variables ที่เดียว ไม่ต้องแก้ทั้ง Playbook


# vars/main.yml
webserver_port: 8080

# tasks/main.yml
- name: Configure Apache Port
  lineinfile:
    path: /etc/apache2/ports.conf
    regexp: "^Listen "
    line: "Listen {{ webserver_port }}"

เทคนิคที่ 3: ใช้ Handlers สำหรับ Restart Services

เคยไหม? แก้ไฟล์ Config ไป แล้วลืม Restart Service ทำให้ Config ที่แก้ไปไม่มีผล Handlers ใน Ansible ช่วยได้

Handlers คือ Tasks ที่จะทำงานก็ต่อเมื่อมี Tasks อื่นๆ แจ้ง (notify) ว่ามีการเปลี่ยนแปลงเกิดขึ้น เช่น ถ้าเราแก้ไฟล์ Config ของ Apache แล้ว เราก็ notify ให้ Handler Restart Apache Handler จะทำงานก็ต่อเมื่อมีคน notify เท่านั้น


# tasks/main.yml
- name: Configure Apache
  template:
    src: httpd.conf.j2
    dest: /etc/apache2/apache2.conf
  notify: Restart Apache

# handlers/main.yml
- name: Restart Apache
  service:
    name: apache2
    state: restarted

เทคนิคที่ 4: Test, Test, Test

สมัยทำร้านเน็ต ก่อนจะลงโปรแกรมอะไรใหม่ๆ ในเครื่องลูกข่ายทุกเครื่อง ผมต้อง Test ในเครื่อง Test ก่อนเสมอ Playbook ก็เหมือนกัน

ก่อนจะรัน Playbook กับ Production Server จริงๆ ให้ Test ใน Environment ที่เหมือนกับ Production ก่อนเสมอ จะได้มั่นใจว่า Playbook เราทำงานได้ถูกต้อง

FAQ คำถามที่พบบ่อย

Ansible Vault คืออะไร? ใช้ทำอะไร?

Ansible Vault คือเครื่องมือสำหรับเข้ารหัสข้อมูลสำคัญ เช่น Password, API Key เพื่อไม่ให้ใครมาเห็นข้อมูลเหล่านี้ได้ เหมาะมากสำหรับเก็บข้อมูลที่ sensitive ใน Playbook

Ansible Tower กับ Ansible คืออะไร ต่างกันยังไง?

Ansible คือ Open Source Automation Engine ที่เราใช้เขียน Playbook และรันมัน Ansible Tower (ตอนนี้เปลี่ยนชื่อเป็น Red Hat Ansible Automation Platform) คือ Web UI ที่ช่วยให้เราจัดการ Ansible ได้ง่ายขึ้น เช่น กำหนดสิทธิ์การเข้าถึง, Schedule Playbook, ดู Log เป็นต้น

ถ้า Playbook รันแล้ว Error จะ Debug ยังไง?

อ่าน Error Message ก่อนเลยครับ Ansible จะบอกว่า Error ตรงไหน บรรทัดไหน ลองแก้ตาม Error Message ดู ถ้าแก้ไม่ได้ ลอง Google ดู หรือถามใน Stack Overflow ก็ได้

Ansible เหมาะกับงานแบบไหนบ้าง?

Ansible เหมาะกับงาน Automation ทุกรูปแบบเลยครับ ตั้งแต่ Config Servers, Deploy Applications, จัดการ Cloud Infrastructure ไปจนถึง Automation งาน Routine ต่างๆ ใน IT

มี Resources อะไรแนะนำสำหรับการเรียนรู้ Ansible เพิ่มเติม?

SiamCafe Blog มีบทความเกี่ยวกับ Ansible อยู่บ้าง ลองเข้าไปอ่านดูได้ นอกจากนี้ก็มี Documentation ของ Ansible เอง, Blog ของ Red Hat, และ Course Online ต่างๆ ครับ

สรุป

Ansible Playbook เป็นเครื่องมือที่ทรงพลังมาก ถ้าเราใช้มันอย่างถูกต้อง มันจะช่วยให้เราทำงาน Automation ได้อย่างมีประสิทธิภาพ ลดเวลา ลดความผิดพลาด และเพิ่ม Productivity

อย่ากลัวที่จะลองผิดลองถูกครับ การเรียนรู้ที่ดีที่สุดคือการลงมือทำเอง ลองสร้าง Playbook ง่ายๆ ดูก่อน แล้วค่อยๆ พัฒนาไปเรื่อยๆ

ขอให้สนุกกับการใช้ Ansible นะครับ iCafeForex ก็ใช้ Ansible นะรู้ยัง!