Infrastructure Testing Terratest Guide IT General

Infrastructure Testing Terratest Guide

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

Infrastructure Testing Terratest Guide

Infrastructure Testing Terratest Guide คืออะไร / ทำไมถึงสำคัญ

น้องๆ หลายคนอาจจะคุ้นเคยกับการเทสต์โค้ดโปรแกรม แต่พอเป็นเรื่อง Infrastructure as Code (IaC) อย่าง Terraform, Ansible, หรือ CloudFormation หลายคนอาจจะงงๆ ว่ามันเทสต์ยังไงวะ? สมัยผมทำร้านเน็ต SiamCafe รุ่นแรกๆ นี่คือลงมือแก้ config กันสดๆ พังก็ roll back กันไป (หัวเราะ) แต่ยุคนี้มันต้อง automated และมั่นใจได้ก่อน deploy จริง

Terratest เนี่ย มันคือ Go library ที่ช่วยให้เราเขียน integration tests สำหรับ infrastructure ได้ง่ายขึ้น คิดง่ายๆ ว่ามันเป็น "unit test" สำหรับ infrastructure นั่นแหละ สำคัญยังไงน่ะเหรอ? ลองนึกภาพ deploy infrastructure ผิดพลาดขึ้น production สิครับ...หายนะชัดๆ! Terratest ช่วยให้เราจับ bug ได้ตั้งแต่เนิ่นๆ ก่อนจะไปสร้างความเสียหายร้ายแรง

อีกอย่างที่สำคัญคือ มันช่วยให้เราสร้าง infrastructure ที่ repeatable และ predictable ได้ ลองนึกภาพทีมเรามีหลายคน แต่ละคน deploy infrastructure ไม่เหมือนกัน มั่วไปหมด! Terratest ช่วยให้เรามั่นใจได้ว่าไม่ว่าใครจะ deploy ก็จะได้ environment ที่เหมือนกันเป๊ะๆ

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

ก่อนจะไปลุย Terratest กันเต็มที่ เรามาปูพื้นฐานกันก่อนนิดนึงนะ

Go Programming Language

Terratest เขียนด้วยภาษา Go ครับ ดังนั้นถ้าเราพอมีพื้นฐาน Go มาบ้างก็จะช่วยให้เข้าใจโค้ด Terratest ได้ง่ายขึ้น แต่ไม่ต้องถึงกับ expert ก็ได้นะ แค่พออ่านออกเขียนได้ก็พอ

สมัยผมเริ่มเขียน Go ใหม่ๆ ก็งงๆ เหมือนกัน แต่พอใช้ไปเรื่อยๆ ก็เริ่มชิน Go มันเป็นภาษาที่ compile เร็ว run เร็ว เหมาะกับงาน infrastructure มากๆ

Infrastructure as Code (IaC)

Terratest เอาไว้เทสต์ IaC ครับ ดังนั้นเราต้องเข้าใจ concept ของ IaC ก่อน IaC คือการจัดการ infrastructure ด้วยโค้ด แทนที่จะคลิกๆ ใน UI ของ cloud provider

เครื่องมือ IaC ที่ดังๆ ก็จะมี Terraform, Ansible, CloudFormation พวกนี้แหละ แต่ Terratest ซัพพอร์ตหลายตัวนะ ไม่ต้องห่วง

Testing Concepts

สุดท้ายคือเราต้องเข้าใจ concept ของ testing ครับ พวก unit test, integration test, end-to-end test อะไรพวกนี้ ถ้าเราเข้าใจความแตกต่างของ test แต่ละแบบ เราก็จะเลือกใช้ Terratest ได้อย่างเหมาะสม

Unit test ก็คือเทสต์ component เล็กๆ ของเรา, Integration test คือเทสต์การทำงานร่วมกันของหลายๆ component, End-to-end test คือเทสต์ทั้งระบบตั้งแต่ต้นจนจบ

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

มาถึงส่วนที่หลายคนรอคอย นั่นก็คือการใช้งาน Terratest นั่นเอง! ผมจะสอนแบบ step-by-step เลยนะ

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

เราจะลองเทสต์ Terraform module ง่ายๆ กันนะครับ สมมติว่าเรามี Terraform module ที่สร้าง AWS S3 bucket

สร้าง Terraform Module

ก่อนอื่นเราต้องมี Terraform module ก่อนนะ สร้างไฟล์ main.tf ใน directory s3-bucket:


resource "aws_s3_bucket" "example" {
  bucket = "my-unique-bucket-name" # เปลี่ยนตรงนี้ด้วยนะ
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

อย่าลืมเปลี่ยน bucket เป็นชื่อที่ไม่ซ้ำกับใครนะ! ไม่งั้น Terraform จะ error

เขียน Terratest

สร้างไฟล์ s3_bucket_test.go ใน directory test:


package test

import (
	"testing"

	"github.com/gruntwork-io/terratest/modules/terraform"
	"github.com/stretchr/testify/assert"
)

func TestS3Bucket(t *testing.T) {
	t.Parallel()

	terraformOptions := &terraform.Options{
		TerraformDir: "../s3-bucket",
	}

	defer terraform.Destroy(t, terraformOptions)

	terraform.InitAndApply(t, terraformOptions)

	bucketName := terraform.Output(t, terraformOptions, "bucket")

	assert.NotEmpty(t, bucketName)
}

โค้ดนี้จะ init, apply Terraform module, และเช็คว่า output bucket ไม่ว่าง

รัน Terratest

เปิด terminal แล้วรันคำสั่ง:


go test -v .

ถ้าทุกอย่างเรียบร้อย test ควรจะ pass ครับ!

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

Terratest ไม่ใช่เครื่องมือเดียวที่ใช้เทสต์ infrastructure ได้ ยังมีทางเลือกอื่นอีกมากมาย แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป

เครื่องมือ ข้อดี ข้อเสีย
Terratest เขียนด้วย Go, integrate กับ Terraform ได้ดี, flexibility สูง ต้องเขียนโค้ดเยอะ, learning curve สูง
InSpec เน้น compliance, DSL เข้าใจง่าย integrate กับ Terraform ได้ไม่ดีเท่า Terratest
Serverspec เขียนด้วย Ruby, เน้น server configuration integrate กับ Terraform ได้ไม่ดีเท่า Terratest

สรุปคือถ้าเราใช้ Terraform เป็นหลัก และอยากได้ flexibility สูง Terratest คือตัวเลือกที่ดี แต่ถ้าเราเน้น compliance และอยากได้ DSL ที่เข้าใจง่าย InSpec ก็เป็นตัวเลือกที่น่าสนใจ

อย่าลืมแวะไปอ่านบทความอื่นๆ ใน SiamCafe Blog นะครับ มีเรื่อง IT อีกเยอะแยะ

หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ ถ้ามีคำถามอะไร ถามมาได้เลย!

และอย่าลืมติดตาม SiamCafe Blog เพื่ออัพเดทข่าวสารวงการไอทีกันต่อไปนะครับ

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

เอาล่ะน้องๆ มาถึงตรงนี้แล้ว แสดงว่าพอเข้าใจ Terratest ระดับนึงแล้วนะ สมัยผมทำร้านเน็ตฯ สิ่งสำคัญคือ "ของต้องพร้อมใช้เสมอ" Infrastructure ก็เหมือนกัน ถ้าเว็บโหลดไม่ได้ ลูกค้าหายหมด! ดังนั้น Test ให้ละเอียด สำคัญมาก!

จำไว้เลยว่า Test เร็ว Fail เร็ว แก้ไขได้เร็ว อย่ารอให้ Production เจ๊งแล้วค่อยมาแก้ มันไม่ทันกิน

3 เทคนิคที่ใช้ได้จริง

  1. ใช้ Mock Services ให้เป็นประโยชน์: สมัยก่อน RAM แพงมาก Server ก็สเปคไม่แรงเท่าสมัยนี้ การ Test จริงๆ กับทุก Components มันกิน Resources มหาศาล ดังนั้นถ้า Component ไหน Test ยาก หรือใช้ Resources เยอะ ให้ Mock มันซะ!
  2. 
            // Example Mock Service in Go
            type MockService struct {
                ExpectedInput string
                ReturnResult  string
            }
    
            func (m *MockService) DoSomething(input string) string {
                if input == m.ExpectedInput {
                    return m.ReturnResult
                }
                return "Error"
            }
        
  3. Test Chains: อย่า Test แค่ Component เดียว ต้อง Test การทำงานร่วมกันของ Components ด้วย เช่น Web Server คุยกับ Database ได้ไหม Database ตอบสนองเร็วพอไหม เคยเจอเคส Database ล่ม เพราะ Query ผิดพลาดตอน Deploy นี่แหละ
  4. Cleanup Resource ทุกครั้ง: สำคัญมากกกกกกกก! ไม่งั้น AWS Bill บานแน่ๆ Terratest มันสร้าง Infrastructure ขึ้นมา Test แล้วต้อง Destroy ทิ้งทุกครั้ง ไม่งั้นเจ๊ง! สมัยก่อน Cloud ไม่แพงเท่านี้ แต่ก็ต้องประหยัดนะน้อง

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

Terratest ใช้ได้กับทุก Cloud Provider ไหม?

เกือบทุก Provider หลักๆ เลยนะ AWS, Azure, GCP นี่สบายๆ แต่ถ้า Provider เล็กๆ อาจจะต้องเขียน Custom Code เพิ่มเติมเอง

Test นานแค่ไหนถึงจะพอดี?

อันนี้แล้วแต่ Complexity ของ Infrastructure เลยน้อง แต่พยายามทำให้ Test เร็วที่สุดเท่าที่จะทำได้ Test พวก Security ก็ต้องละเอียดหน่อยนะ

ถ้า Test Failed ต้องทำยังไง?

ไล่ Log ดูเลยน้อง Terratest มันจะบอกว่าตรงไหน Failed พยายามอ่าน Error Message ให้เข้าใจ แล้ว Debug ไปทีละ Step สมัยก่อน Debug นี่คือ Skill สำคัญเลยนะ!

ต้อง Test Environment Production ด้วยไหม?

ถ้าทำได้ก็ดี แต่ส่วนใหญ่จะ Test ใน Staging Environment ก่อน แล้วค่อย Promote ไป Production แต่ต้องมั่นใจว่า Staging เหมือน Production เป๊ะๆ นะ

สรุป

Terratest เป็น Tool ที่ดีมากในการ Test Infrastructure ช่วยให้เรามั่นใจได้ว่า Infrastructure ของเราทำงานได้อย่างถูกต้องและปลอดภัย แต่ต้องใช้ให้เป็นนะน้อง อย่าลืม Cleanup Resource ทุกครั้ง และ Test อย่างสม่ำเสมอ iCafeForex ก็ใช้หลักการคล้ายๆ กันในการเทรด คือต้อง Test Strategy ก่อนลงสนามจริง

หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย หรือเข้าไปดู SiamCafe Blog ได้เลย