วิธีตั้งค่าและใช้งาน Terraform บน GitHub Actions เพื่อทำ IaC อัตโนมัติอย่างปลอดภัย

ที่มาภาพ: 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/EnterpriseUI ดูแล State, มี Policy Enforcementค่าใช้จ่ายเพิ่มเติม
  • ใช้ Remote Backend ที่มีการล็อก (Lock) เช่น S3 + DynamoDB เพื่อลดความเสี่ยงของ race condition
  • ตั้งค่าการเข้าถึง Bucket ด้วยนโยบาย IAM ให้เฉพาะ Action Runner เท่านั้น
  • อย่าให้ไฟล์ State อยู่ใน Repository หรือเก็บไว้เป็น plaintext
**Warning: การเปิดเผย `terraform.tfstate` อาจทำให้ข้อมูลลับ (เช่น รหัสผ่าน, IP) ถูกเปิดเผยต่อสาธารณะ

ด้านล่างคือขั้นตอนการเพิ่มขั้นตอนตรวจสอบ 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

Related

บทความที่เกี่ยวข้อง

วิธีตั้งค่าและใช้งาน AWS Glue Data Catalog กับ Amazon Athena เพื่อสร้าง Data Lake แบบ Server‑less อย่างปลอดภัยGrowth
29 สิงหาคม 2569 เวลา 20:30

วิธีตั้งค่าและใช้งาน AWS Glue Data Catalog กับ Amazon Athena เพื่อสร้าง Data Lake แบบ Server‑less อย่างปลอดภัย

AWS Glue Data Catalog และ Amazon Athena ช่วยให้คุณสร้าง **Data Lake แบบ Server‑less** ที่ปลอดภัยและจัดการได้ง่าย ไม่ต้องดูแลโครงสร้างพื้นฐานเอง สามารถสืบค้นข้อมูลด้วย SQL ทันทีจากไฟล์ใน S3

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีตั้งค่า Rust Analyzer บน VS Code เพื่อเพิ่มประสิทธิภาพการพัฒนาและความปลอดภัยของโค้ด RustGrowth
29 สิงหาคม 2569 เวลา 19:00

วิธีตั้งค่า Rust Analyzer บน VS Code เพื่อเพิ่มประสิทธิภาพการพัฒนาและความปลอดภัยของโค้ด Rust

**บทความนี้จะช่วยให้คุณตั้งค่า Rust Analyzer บน VS Code อย่างเต็มที่ เพื่อเร่งการพัฒนาและเพิ่มระดับความปลอดภัยของโค้ด Rust**

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีตั้งค่าและใช้งาน Firebase Cloud Messaging เพื่อส่งการแจ้งเตือนแบบ Push ให้แอป Android ด้วยความปลอดภัยและประหยัดพลังงานGrowth
29 สิงหาคม 2569 เวลา 11:30

วิธีตั้งค่าและใช้งาน Firebase Cloud Messaging เพื่อส่งการแจ้งเตือนแบบ Push ให้แอป Android ด้วยความปลอดภัยและประหยัดพลังงาน

**บทความนี้อธิบายวิธีตั้งค่าและใช้งาน Firebase Cloud Messaging (FCM) เพื่อส่งการแจ้งเตือนแบบ Push ให้กับแอป Android อย่างปลอดภัย และช่วยลดค่าใช้จ่ายของโครงการ**

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีตั้งค่าระบบตรวจจับพฤติกรรมผู้ใช้แบบ UEBA บน Splunk อย่างปลอดภัยGrowth
28 สิงหาคม 2569 เวลา 20:30

วิธีตั้งค่าระบบตรวจจับพฤติกรรมผู้ใช้แบบ UEBA บน Splunk อย่างปลอดภัย

ระบบ UEBA (User and Entity Behavior Analytics) ช่วยตรวจจับพฤติกรรมแปลกใหม่ของผู้ใช้และอุปกรณ์บน Splunk โดยใช้การวิเคราะห์เชิงสถิติและแมชชีนเลิร์นนิ่ง. การตั้งค่าที่ถูกต้องจะทำให้คุณระบุเหตุการณ์ร้ายแร…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
คัดลอกลิงก์แล้ว!