
ที่มาภาพ: Unknown Source
วิธีตั้งค่าและใช้งาน Terraform บน GitHub Actions เพื่อทำ IaC อัตโนมัติอย่างปลอดภัย
⚡ สรุป 30 วิ
Terraform เป็นเครื่องมือ IaC (Infrastructure as Code) ที่ช่วยให้คุณสร้างและจัดการโครงสร้างพื้นฐานด้วยไฟล์คอนฟิกแบบ Declarative การทำงานร่วมกับ GitHub Actions ช่วยให้กระบวนการ Deploy สามารถอัตโนมัติได้…
ทำความเข้าใจพื้นฐาน — Understanding the Basics
Terraform เป็นเครื่องมือ IaC (Infrastructure as Code) ที่ช่วยให้คุณสร้างและจัดการโครงสร้างพื้นฐานด้วยไฟล์คอนฟิกแบบ Declarative การทำงานร่วมกับ GitHub Actions ช่วยให้กระบวนการ Deploy สามารถอัตโนมัติได้ทุกครั้งที่มีการเปลี่ยนแปลงใน Repository
- IaC ทำให้โค้ดเป็นความจริงเดียวของสภาพแวดล้อม
- GitHub Actions ให้คุณกำหนดขั้นตอน CI/CD ภายในไฟล์ YAML ที่อยู่ใน `.github/workflows`
- การผสานสองเครื่องมือนี้ทำให้สามารถตรวจสอบ, แก้ไข, และ Deploy โครงสร้างพื้นฐานอย่างปลอดภัยโดยไม่ต้องใช้เซิร์ฟเวอร์กลาง
เตรียม Repository และ Secrets — Repository and Secrets Preparation
ก่อนจะเริ่มเขียน Workflow คุณต้องเตรียม Repository ให้พร้อมเก็บโค้ด Terraform พร้อมกับข้อมูลลับ (Secrets) ที่จำเป็นต่อการเชื่อมต่อกับ Cloud Provider
- สร้างไฟล์ `main.tf`, `variables.tf` และ `outputs.tf` ในโฟลเดอร์ `infra/`
- ไปที่ Settings > Secrets and variables > Actions แล้วเพิ่ม Secret สำหรับ:
- `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` (หรือคีย์ของ Provider อื่น)
- `TF_BACKEND_BUCKET` (หากใช้ S3 เป็น Backend)
- `TF_VAR_...` ตามตัวแปรที่ต้องการให้เป็น secret
**Tip: ตั้งค่าการเข้าถึง Secret ให้เฉพาะ Branch ที่จำเป็นเท่านั้น เพื่อลดความเสี่ยงจากการรั่วไหล
สร้าง Workflow สำหรับ Terraform — Creating Terraform Workflow
Workflow ของ GitHub Actions ประกอบด้วย Job หลายขั้นตอน ซึ่งจะทำงานบน Runner ที่เลือกได้ (Ubuntu, Windows หรือ macOS)
- **ไฟล์ YAML ตัวอย่าง (`terraform.yml`)
```yaml name: Terraform CI/CD
on: push: paths:
- 'infra/'
- '.github/workflows/terraform.yml'
jobs: terraform: runs-on: ubuntu-latest steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2 with: terraform_version: "1.9.0"
- name: Initialise backend
run: terraform init -backend-config="bucket=${{ secrets.TF_BACKEND_BUCKET }}"
- name: Validate configuration
run: terraform validate
- name: Plan changes
id: plan run: terraform plan -no-color
- name: Apply on main branch
if: github.ref == 'refs/heads/main' && github.event_name == 'push' run: terraform apply -auto-approve ```
- ขั้นตอนสำคัญ
- `actions/checkout` ดึงโค้ดจาก Repository
- `hashicorp/setup-terraform` ติดตั้งเวอร์ชันที่ต้องการโดยอัตโนมัติ
- `terraform init` กำหนด Backend และดาวน์โหลด Provider ต่าง ๆ
- `terraform validate` ตรวจสอบความถูกต้องของไฟล์คอนฟิก
- `terraform plan` แสดงผลลัพธ์ว่ามีการเปลี่ยนแปลงอะไรบ้าง
- `terraform apply` ทำจริงเฉพาะเมื่อโค้ดอยู่บน branch `main`
การจัดการ State อย่างปลอดภัย — Secure State Management
State File (`terraform.tfstate`) ถือเป็นข้อมูลสำคัญที่บรรจุรายละเอียดของทรัพยากรทั้งหมด หากไม่มีการป้องกันอาจทำให้ผู้ไม่ประสงค์ดีแก้ไขโครงสร้างพื้นฐานได้
| วิธีจัดเก็บ | ข้อดี | ข้อเสีย |
|---|---|---|
| Remote Backend (S3 + DynamoDB) | ปลอดภัย, รองรับ Locking, สามารถแชร์ระหว่างทีม | ต้องตั้งค่า IAM อย่างละเอียด |
| GitHub Encrypted Secrets | ง่ายต่อการตั้งค่า, ไม่ต้องจัดหา Storage เพิ่ม | ไม่เหมาะกับไฟล์ขนาดใหญ่, ไม่มี Locking |
| Terraform Cloud/Enterprise | UI ดูแล State, มี Policy Enforcement | ค่าใช้จ่ายเพิ่มเติม |
- ใช้ Remote Backend ที่มีการล็อก (Lock) เช่น S3 + DynamoDB เพื่อลดความเสี่ยงของ race condition
- ตั้งค่าการเข้าถึง Bucket ด้วยนโยบาย IAM ให้เฉพาะ Action Runner เท่านั้น
- อย่าให้ไฟล์ State อยู่ใน Repository หรือเก็บไว้เป็น plaintext
**Warning: การเปิดเผย `terraform.tfstate` อาจทำให้ข้อมูลลับ (เช่น รหัสผ่าน, IP) ถูกเปิดเผยต่อสาธารณะ
ตัวอย่าง Pipeline ที่แนะนำ — Recommended Pipeline Example
ด้านล่างคือขั้นตอนการเพิ่มขั้นตอนตรวจสอบ Security Scan ก่อน Deploy
```yaml
- name: Trivy scan for Terraform files
uses: aquasecurity/trivy-action@master with: scan-type: "config" config-dir: "./infra" ```
- ผลลัพธ์ จะทำให้ Workflow หยุดถ้าพบ Misconfiguration ที่อาจเป็นช่องโหว่
- สามารถผสานกับ `GitHub Code Scanning` เพื่อแสดงผลใน UI ของ Repository
Tips & Common Pitfalls
Tip: ใช้ Branch Protection Rules บน `main` ให้ต้องผ่าน Pull Request ก่อนจึงจะทำ Apply ได้ > Pitfall: อย่าลืมตั้งค่า `working-directory: ./infra` ในขั้นตอน Terraform หากไฟล์อยู่ในโฟลเดอร์ย่อย มิฉะนั้น Action จะไม่พบคอนฟิก
Summary — Key Takeaways
- ตั้ง Repository ให้มีโครงสร้างแยกไฟล์ Terraform ชัดเจน
- เก็บข้อมูลลับทั้งหมดใน GitHub Secrets และใช้ Remote Backend ที่รองรับ Locking
- ใช้ `hashicorp/setup-terraform` เพื่อติดตั้งเวอร์ชันอัตโนมัติและสอดคล้องกับโค้ด
- กำหนด Workflow ให้ทำ Validate Plan Apply ตามลำดับ พร้อมเงื่อนไขการ Deploy เฉพาะ branch ที่ปลอดภัย
- เพิ่มขั้นตอน Security Scan (เช่น Trivy) เพื่อป้องกัน Misconfiguration ก่อนเปลี่ยนแปลงสภาพแวดล้อม
ด้วยแนวทางเหล่านี้ คุณสามารถสร้างระบบ CI/CD สำหรับ Terraform บน GitHub Actions ที่ อัตโนมัติ, ปลอดภัย, และเป็นมาตรฐาน ให้ทีมของคุณทำ IaC ได้อย่างมั่นใจ.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่าและใช้งาน Terraform บน GitHub Actions เพื่อทำ IaC อัตโนมัติอย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 29 สิงหาคม 2569 เวลา 19:50



