การติดตั้ง และ วิธีการใช้ Terraform เบื้องต้น

การติดตั้ง และ วิธีการใช้ Terraform เบื้องต้น


Publish on May 10, 2022


บทนำ Terraform

เพื่อนๆ หลายคนคงเคยได้ยินชื่อนี้กันมาบ้างแต่ อาจจะยังสงสัยอยู่ว่า เจ้า Tool ตัวนี้มีไว้เพื่ออะไร แล้วทำไมต้องใช้ด้วย ใช้การ Clone เครื่องเอาก็ได้เปล่า หลักการเจ้า tool ตัวนี้มันดีกว่าการ Clone เครื่องยังไง เด่วผมจะอธิบายให้ไว้ในบทความนี้ครับ

ในการทำงาน ณ ปัจจุบัน ทางทีม infra ต้องมีการสร้างเครื่องจำนวนมากบ่อยครั้ง รวมถึงต้องเสียเวลา ลง OS ในแต่ละเครื่อง นอกจากนี้สิ่งที่เจ็บปวด จัดๆ เลยคือ เมื้อเวลาผ่านไป ตัวเครื่องที่เราสร้างไว้ Spec แบบไหน network อะไร เราจำไม่ได้ OMG นี้ยังไม่รวมการ สร้าง ข้าม Platform นะครับ อาทิสร้าง บน Proxmox และ ก็สร้างเครื่องเหมือนกัน บน Google Cloud ,หรือ AWS จากตรงนี้เราจะเห็นได้ว่า การ Clone เครื่องอาจทำไม่ได้ หรือ ทำได้ช้ากว่าการที่เรา เขียนโค้ด ให้มันสร้างใหม่ในแต่ละ Platform

วันนี้ผมเลยมานำเสนอ Tool ที่ชื่อว่า Terraform มันเป็นตัวที่เอาไว้เขียนโค้ดเพื่อสร้าง เครื่อง Server แถมใช้งานได้ทั้งบน cloud และ เซิฟเวอร์ของเราเอง(On-premise ,Proxmox ,VMware ) เท่าที่ผมลองเอามาใช้งานหลายโปรเจ็ค ก็ถือว่าเป็นตัวช่วยที่ดีมากๆเลยครับสำหรับพวกเราชาว Infra โดยที่บทความนี้ผมจะ เป็นการแชร์วิธีการทำงานของตัวโปรแกรม Terraform พร้อม โค้ดเบื้องต้น เพื่อให้ทุกคนลองทำ (Leaning by doing จะทำให้เราเข้าใจได้เร็ว )


สิ่งที่ต้องเตรียม

ในบทความนี้ ผมจะใช้ตัว Window ที่ลง sub-system(Ubuntu) เป็นตัวเขียน Terraform และ deploy

หากใครยังไม่มี ubuntu บน window ให้ติดตั้งตามวิธีนี้ ครับ


1. การเตรียมความพร้อม

ตัว on Premise ที่ผมใช้ในบริษัทจะเป็นตัวที่ชื่อว่า Proxmox (https://proxmox.com/en/ ตัวนี้ฟรีครับ) ถ้าบางบริษัทใช้ VMware ก็สามารถใช้ได้เหมือนกันนะ แต่อาจต้องเปลี่ยน Provider ไปใช้ตัวนี้แทนครับ (https://registry.terraform.io/providers/hashicorp/vsphere/latest ) ให้เรานึกว่ามันจะประมาณ plugin Terraform ที่เชื่อมต่อกับระบบต่างๆ)

โดยขอบเขตใน lab นี้คือเราจะใช้ Terraform สร้าง เครื่องบน Proxmox โดยระบุบสเปค และ สร้าง username, password พร้อม Network จำนวน 2 เครื่อง ,โดยมีสเปค ตามนี้ครับ


Cpu 2 core
Ram 4G
Os: ubuntu 18.04
Hdd: 20G

2. ติดตั้ง terraform

การติดตั้ง Terraform บน notebook เรากัน

เริ่มต้นลองใช้คำสั่ง : terraform -help
ระบบจะแจ้ง Error : terraform: command not found เนื่องจากไม่มีโปรแกรมดั่งกล่าวอยู่ในเครื่องเรา

image

วิธีติดตั้ง Terraform แยกตาม Os ต่างๆ วิธีติดตั้งจะไม่มีเหมือนกัน ให้เราอิงตามเอกสาร โดยแบ่งตาม os ต่างๆครับ https://learn.hashicorp.com/tutorials/terraform/install-cli

image

จากนั้นทำการติด ตั้งด้วย command

$  apt-get update && sudo apt-get install terraform

Verify การติดตั้ง terraform ด้วย command

$ terraform -help

image

Trick

การติดตั้ง Autocomplete ( ตัวนี้จะช่วยประหยัดเวลาในการพิมพ์ เช่น เราจะพิมพ์ว่า terraform validate เราสามารถ พิมพ์ ย่อๆเหลือแค่ “terraform v “ แล้วกด tab ได้เลยครับ ตัวโปรแกรมจะหาคำที่ใกล้เคียงที่สุดมาต่อ ให้ )

$ terraform -install-autocomplete

เมื่อเราทำการติดตั้งเรียบร้อยแล้ว ให้ทำการปิดและเปิด terminal อีกครั้งเพื่อทำการ reload คำสั่ง หลังจากที่เราได้ติดตั้ง Autocomplete ไปครับ


3. เริ่มต้นการใช้งาน

ทำการ clone code ตัวอย่างในการเขียน Terraform จาก Github ของผมได้เลย https://github.com/s4wet/myterra ซึ่งตัวไฟล์จะประกอบไปด้วย 3 ไฟล์ ดั้งนี้

image

อธิบายความหมาย ตามไฟล์

  1. Variable.tf เป็นไฟล์ เก็บค่าตัวแปร ต่างๆในการใช้สร้าง เครื่อง บน promox เช่น url ของ proxmox ,public key ,username ,password ในการ login

2.provider.tf
เป็นการเรียก ใช้ Provider ในการเชื่อมต่อ ไปยัง proxmox โดยใช้ provider ชื่อ ondrejsika/proxmox

*** ตรงนี้อาจมีการเปลี่ยน แปลง Provider เป็นตัวนี้ แทน https://registry.terraform.io/providers/Telmate/proxmox/latest/docs
เนื่องจาก ตอนที่ผมเริ่มเขียนบนความ ตัว lib นี้ยังไม่ได้ release ออกมา

***

image

image

3.main.tf

ไฟล์นี้จะเป็น ไฟล์ที่กำหนด resouce ต่างๆที่ใช้ในการสร้างเครื่อง เช่น Ram, CPU , DISK , Network

image

Proxmox_vm_qemu คือสร้างแบบ VM guest (Proxmox จะ สร้าง VM ได้สองแบบคือ Lxc และ แบบ VM guest) กรณีจะสร้างแบบ LXC ให้ปรับเป็น proxmox_lxc

ส่วนตัวแปรอื่นๆ สามารถดูรายละเอียดได้ใน

https://registry.terraform.io/providers/Telmate/proxmox/latest/docs/resources/vm_qemu

จากนั้นให้ใช้คำสั่ง

$ terraform init

เพื่อทำการติดตั้ง Provider (เสมือนเรา ใช้ npm install lib ใน javascript)

image

จากนั้น ใช้คำสั่ง

$ terraform apply

เป็นอันเสร็จสิ้นขั้นตอน