0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · บทเรียน

การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล

ทำความเข้าใจสถานะ Terraform กำหนดค่าแบ็กเอนด์ระยะไกลที่ปลอดภัย จัดการการล็อกสถานะ และหลีกเลี่ยงสถานะเสียหายในไปป์ไลน์ IaC ที่ทำงานร่วมกัน

การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล เป็นบทเรียน CI/CD with GitHub Actions & DevOps Pipelines ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CI/CD with GitHub Actions & DevOps Pipelines และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน

State ของ Terraform คืออะไร

Terraform บันทึกสิ่งที่สร้างไว้ใน ไฟล์ state (terraform.tfstate) โดยจับคู่การกำหนดค่าของคุณกับทรัพยากรคลาวด์จริง

หากไม่มี state, Terraform จะไม่ทราบว่าทรัพยากรใดมีอยู่แล้ว และอาจสร้างรายการซ้ำหรือไม่สามารถอัปเดตได้

เหตุใด State ในเครื่องจึงใช้กับทีมไม่ได้

โดยค่าเริ่มต้น state จะอยู่ในดิสก์ภายในเครื่องของคุณ ซึ่งไม่เหมาะเมื่อทำงานเป็นทีมหรือทำงานใน CI:

  • ผู้อื่นไม่สามารถเห็น state ของคุณได้
  • การทำงานพร้อมกันอาจทำให้ไฟล์เสียหาย
  • ไฟล์เก็บข้อมูลลับเป็นข้อความธรรมดา และอาจถูกส่งเข้าแหล่งเก็บโค้ดโดยไม่ตั้งใจ

วิธีแก้คือใช้ แบ็กเอนด์ระยะไกล

แบ็กเอนด์ระยะไกล

แบ็กเอนด์ระยะไกล จะจัดเก็บ state ไว้ในตำแหน่งที่ใช้ร่วมกันและคงทน เช่น บักเก็ต S3, Azure Blob, GCS หรือ Terraform Cloud

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

terraform {
  backend "s3" {
    bucket = "my-tf-state"
    key    = "prod/terraform.tfstate"
    region = "us-east-1"
  }
}

การล็อก State

หากการทำงานของไปป์ไลน์สองรายการใช้คำสั่ง apply พร้อมกัน อาจทำให้ state เสียหายได้ การล็อก State ป้องกันปัญหานี้โดยอนุญาตให้เขียนได้ครั้งละรายการเท่านั้น

เมื่อใช้แบ็กเอนด์ S3 ตาราง DynamoDB จะทำหน้าที่เป็นตัวล็อก ส่วน Terraform Cloud จะล็อกให้โดยอัตโนมัติ

  backend "s3" {
    bucket         = "my-tf-state"
    key            = "prod/terraform.tfstate"
    dynamodb_table = "tf-locks"
  }

การเข้ารหัส State

ไฟล์ State มักมีค่าที่ละเอียดอ่อน เช่น รหัสผ่านและคีย์ ควร เข้ารหัส State ขณะจัดเก็บเสมอ

สำหรับแบ็กเอนด์ S3 ให้เปิดใช้การเข้ารหัสของบักเก็ต และกำหนด encrypt = true ในการกำหนดค่าแบ็กเอนด์

  backend "s3" {
    bucket  = "my-tf-state"
    key     = "prod/terraform.tfstate"
    encrypt = true
  }

Workspace สำหรับสภาพแวดล้อม

Workspace ของ Terraform ช่วยให้การกำหนดค่าเดียวจัดการไฟล์ State หลายไฟล์ได้ โดยแยกไฟล์ละหนึ่งสภาพแวดล้อม

สลับระหว่าง Workspace เพื่อไม่ให้สภาพแวดล้อมทดสอบและสภาพแวดล้อมจริงใช้ State เดียวกัน

terraform workspace new staging
terraform workspace select production

Plan และ Apply ใน CI

ในไปป์ไลน์ ให้เรียกใช้ terraform plan เพื่อดูตัวอย่างการเปลี่ยนแปลงล่วงหน้า (มักทำใน PR) และใช้ terraform apply เพื่อดำเนินการเปลี่ยนแปลง (เมื่อรวมเข้ากับ main)

บันทึกแผนลงในไฟล์ เพื่อให้ apply ใช้สิ่งที่ผ่านการตรวจสอบแล้วแบบตรงกันทุกประการ

terraform plan -out=tfplan
terraform apply -auto-approve tfplan

การตรวจสอบ State

คุณสามารถสอบถาม State เพื่อดูว่า Terraform กำลังติดตามสิ่งใดอยู่

  • terraform state list — แสดงรายการทรัพยากรที่จัดการอยู่
  • terraform state show <addr> — แสดงรายละเอียดของทรัพยากรหนึ่งรายการ

หลีกเลี่ยงการแก้ไข State ด้วยตนเอง ให้ใช้คำสั่งแทน

terraform state list
terraform state show aws_instance.web

การนำเข้าทรัพยากรที่มีอยู่แล้ว

หากทรัพยากรถูกสร้างนอก Terraform ให้นำทรัพยากรนั้นมาอยู่ภายใต้การจัดการด้วย terraform import แทนการสร้างใหม่

วิธีนี้ป้องกันการสร้างทรัพยากรซ้ำจนเกิดความเสียหาย เมื่อนำ IaC มาใช้กับโครงสร้างพื้นฐานที่มีอยู่แล้ว

terraform import aws_s3_bucket.logs my-existing-bucket

การจัดการความคลาดเคลื่อน

ความคลาดเคลื่อนเกิดขึ้นเมื่อมีผู้เปลี่ยนแปลงโครงสร้างพื้นฐานด้วยตนเอง จนสภาพจริงไม่ตรงกับ State อีกต่อไป

เรียกใช้ terraform plan เป็นประจำเพื่อตรวจหาความคลาดเคลื่อน จากนั้นใช้การนำไปใช้ซ้ำเพื่อคืนสภาพ หรืออัปเดตการกำหนดค่าให้ตรงกัน

ห้ามส่ง State เข้าแหล่งเก็บโค้ด

แม้จะใช้แบ็กเอนด์ระยะไกล ก็ควรตรวจสอบให้แน่ใจว่า State และไฟล์แผนในเครื่องถูกยกเว้นจาก Git ด้วยไฟล์ git-ignore เพราะไฟล์เหล่านี้มีข้อมูลลับ

ไฟล์ .gitignore ที่จัดทำอย่างเหมาะสมจะช่วยป้องกันข้อมูลรั่วไหลโดยไม่ตั้งใจ

# .gitignore
*.tfstate
*.tfstate.*
tfplan
.terraform/

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับ State ของ Terraform

สรุปทบทวน

คุณได้เรียนรู้การจัดการ State ของ Terraform อย่างปลอดภัย

  • State จับคู่การกำหนดค่ากับทรัพยากรจริง อย่าแก้ไขด้วยตนเอง
  • แบ็กเอนด์ระยะไกลช่วยให้ทีมและ CI ใช้ State ร่วมกัน
  • การล็อกและการเข้ารหัสช่วยป้องกันความเสียหายและข้อมูลรั่วไหล
  • Workspace แยกสภาพแวดล้อมออกจากกัน ส่วน plan ใช้ตรวจหาความคลาดเคลื่อน

การจัดการ State ที่มั่นคงเป็นรากฐานของไปป์ไลน์ IaC ที่เชื่อถือได้

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

บทเรียน “การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CI/CD with GitHub Actions & DevOps Pipelines ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CI/CD with GitHub Actions & DevOps Pipelines มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล”

ทำความเข้าใจสถานะ Terraform กำหนดค่าแบ็กเอนด์ระยะไกลที่ปลอดภัย จัดการการล็อกสถานะ และหลีกเลี่ยงสถานะเสียหายในไปป์ไลน์ IaC ที่ทำงานร่วมกัน คุณปฏิบัติ CI/CD with GitHub Actions & DevOps Pipelines ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CI/CD with GitHub Actions & DevOps Pipelines หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน CI/CD with GitHub Actions & DevOps Pipelines บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน CI/CD with GitHub Actions & DevOps Pipelines นี้ได้ไหม

ได้ บทเรียน CI/CD with GitHub Actions & DevOps Pipelines ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. IaC ด้วย Terraform และ GitHub Actions
  2. การจัดการทรัพยากรคลาวด์
  3. การทำให้การอัปเดตโครงสร้างพื้นฐานเป็นอัตโนมัติ
  4. การจัดการสถานะ Terraform และแบ็กเอนด์ระยะไกล
← กลับไปที่ CI/CD with GitHub Actions & DevOps Pipelines