Coding Gun

Infrastructure as Code(IaC) คืออะไร

Infrastructure as Code คือ การเขียน Code เพื่อจัดการกับส่วนประกอบต่างๆของ Infrastructure ตัวอย่างของ Infrastructure as Code(IaC) เช่น Terraform จัดการ Resource ต่างๆบน Cloud และ Ansible ที่นำมาจัดการ Configuration บน Server หรือใน router

Infrastructure as Code(IaC) vs Shell Script

ถ้าเราอยากทำงาแบบอัตโนมัติ เราก็เขียน Bash script หรือ Shell script ก็ได้นี่ไม่เห็นต้องมาเรียนรู้ Syntax ของ Infrastructure as Code ให้วุ่นวาย ซึ่งเราจะพบปัญหาต่างๆเหล่านี้

ดังนั้น Infrastructure as Code(IaC) จะเกิดมาเพื่อแก้ปัญหาต่างๆเหล่านี้ ข้อแนะนำสำหรับผู้ที่เขียน Shell script หรือ Bash script คือเปลี่ยนจากการเขียน script มาเป็น IaC ซะเพราะมันง่ายกว่าสิ่งที่คุณกำลังเขียนอยู่มากๆ

Declarative vs Imperative

การเขียน Code หรือ Script เพื่อจัดการกับ Infrastructure นั้นมีได้ 2 รูปแบบคือ

ในปัจจุบัน Infrastructure as Code(IaC) จะเป็นการเขียนแบบ Declarative

Idempotency คืออะไร?

Idempotency คือ เราเขียนสามารถ run command ซ้ำๆได้ โดยที่ไม่เกิด Error หรือการเปลี่ยนแปลงกับ state ของระบบ(Managed System) เนื่องจาก Infrastructure as Code ของเราเขียนแบบ Declarative จึงเริ่มต้นจากจุดไหนก็ได้ ในตัวอย่างเราจะเขียนคำว่า “foobar” ลงไปในไฟล์ชื่อว่า “myfile” ซึ่งเหมือนกับ command ในตัวอย่างนี้

echo foobar >> /tmp/myfile

ใน Code ชุดแรกจะเขียนด้วย puppet ซึ่งเป็น Infrastructure as Code แบบ declarative เราจะสามารถ run puppet apply ซ้ำๆได้ โดยที่เนื้อหาใน “myfile” จะยังคงมีคำว่า “foobar” บรรทัดเดียวเหมือนเดิม

puppet apply sample.pp

ไฟล์ sample.pp จะมีเนื้อหาแบบนี้

file_line { 'foobar':
  ensure => present,
  path   => '/tmp/myfile',
  line   => 'foobar',
}

แบบที่ 2 เราจะเขียนโดย shell script โดยใช้ชื่อว่า sample.sh ซึ่งจะมีเนื้อหาแบบนี้

#!/bin/sh

if ! grep -E '^foobar$' /tmp/myfile > /dev/null 2>&1; then 
  echo foobar >> /tmp/myfile
fi

ซึ่งทุกครั้งที่เรา Run shell script นี้ด้วยคำสั่งนี้ซ้ำๆ

./sample.sh

สิ่งที่เกิดขึ้นคือจะมีการเพิ่มคำว่า “foobar” เข้าไปใน myfile เรื่อยๆ นั่นก็คือ state ของ Managed System จะเปลี่ยนไปเรื่อยๆ ทุกครั้งที่ run

ดังนั้นความหมายของ Idempotency คือไม่ว่าเราจะ run Code กี่ครั้งก็ตาม state สุดท้ายจะตรงกันเสมอ

ข้อดีของ Infrastructure as Code

ซึ่งข้อดีของการทำ Infrastructure as Code มีดังนี้

ในปัจจุบบันเราจะนิยมการเขียนแบบ Declarative มากกว่า เพราะสั้น กระชับเข้าใจง่าย และที่สำคัญคือ error น้อยกว่า เพราะเราไม่ได้สนใจจุดตั้งต้น เราจะเริ่มจากจุดไหนก็ได้ แต่ imperative จะต้องเริ่มจากศูนย์เสมอ

Push vs Pull

Infrastructure as Code(Iac) จะถูกจัดออกเป็น 2 กลุ่มคือ Push และ Pull โดยที่ทั้ง 2 กลุ่มนี้จะต่างกันตรงที่

ความแตกต่างของ 2 Model นี้คือคนที่ตรวจสอบว่า Current State(สิ่งที่ระบบเป็นอยู่) กับ Desired State(สิ่งที่เราอยากได้) นั้นต่างกันยังไงคือ Push model จะใช้ controller (จะอยู่ในเครื่องที่ run command) แต่ถ้าเป็น Pull model จะใช้ Agent เป็นคนจัดการ

ความแตกต่างของ Infrastructure as Code แบบ Push และ Pull

ซึ่งเราจะจัดกลุ่มของ Infrastructure as Code ได้ดังนี้

หลังจากที่รู้จักกับ Infrastructure as Code(IaC) กันมาพอสมควรแล้วลองมาดูกันว่า IaC แต่ละตัวนั้นมีวิธีการติดตั้งและใช้งานยังไงบ้าง

ทำ Automation บน AWS ด้วย Terraform
Sep 4, 23

iac

ทำ Automation บน AWS ด้วย Terraform
ขั้นตอนการติดตั้ง terraform และ aws cli เพื่อสร้าง infrastructure บน aws แบบอัตโนมัติ
ใช้งาน Terraform Cloud แบบ Steps by Steps
Sep 3, 23

iac

ใช้งาน Terraform Cloud แบบ Steps by Steps
Terraform cloud เป็น SaaS ที่เราสามารถใช้บริการได้ฟรี เมื่อเราใช้ terraform cloud เราจะสามารภใช้งาน terraform โดยที่ไม่ต้องติดตั้ง terraform cli ลงในเครื่อง
เริ่มต้นใช้งาน Terraform ฉบับมือใหม่
Aug 25, 23

iac

เริ่มต้นใช้งาน Terraform ฉบับมือใหม่
Terraform คือเครื่องมือที่ทำ automated cloud infrastructure หมายถึงสร้าง resources ต่างๆบน cloud แบบอัตโนมัติ ซึ่ง terraform มี providers ให้เลือกมากมาย เช่น aws, azure และ gcp
Build และ deploy docker container ด้วย terraform
Aug 25, 23

iac

Build และ deploy docker container ด้วย terraform
นอกจากการใข้ terraform ในการ automated cloud infrastructure แล้วเรายังสามารถใช้ terraform ในการ build และ deploy docker container ได้อีกด้วย
Terraform Import
Aug 25, 23

iac

Terraform Import
ปัญหาส่วนใหญ่ของการใช้ terraform คือเราใช้cloud อยู่แล้วแต่อยากจะเปลี่ยน resources ต่างๆ ให้กลับมาอยู่บน terraform configuration ได้อย่างไร
รู้จักกับตัวแปรบน Terraform
Aug 25, 23

iac

รู้จักกับตัวแปรบน Terraform
ตัวแปรเป็นสิ่งที่ทำให้ Infrastructure as Code นั้นแตกต่างจากการใช้ shell script เพราะเราจะสามารถปรับเปลี่ยนค่าของตัวแปรได้ตามต้องการ โดยที่ code ยังเหมือนเดิม
Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security