
ที่มาภาพ: Unknown Source
วิธีตั้งค่า Azure DevOps Pipelines ร่วมกับ Terraform ปรับโครงสร้างพื้นฐานแบบ IaC อย่างปลอดภัย
⚡ สรุป 30 วิ
Azure DevOps Pipelines กับ Terraform เป็นการผสานความสามารถของ CI/CD เข้ากับ Infrastructure‑as‑Code (IaC) เพื่อจัดการโครงสร้างพื้นฐานอย่างอัตโนมัติและปลอดภัย บทความนี้จะพาคุณตั้งค่า pipeline ขั้นตอนครบ…
ภาพรวม — Overview
Azure DevOps Pipelines กับ Terraform เป็นการผสานความสามารถของ CI/CD เข้ากับ Infrastructure‑as‑Code (IaC) เพื่อจัดการโครงสร้างพื้นฐานอย่างอัตโนมัติและปลอดภัย บทความนี้จะพาคุณตั้งค่า pipeline ขั้นตอนครบถ้วน ตั้งค่าการเชื่อมต่อ, จัดการ secret, และทำให้กระบวนการ Deploy มีความเสถียร
**Tip: ควรทดลองในสภาพแวดล้อม “sandbox” ก่อนนำไปใช้จริง เพื่อลดความเสี่ยงของข้อผิดพลาดที่อาจส่งผลต่อ Production
ข้อกำหนดเบื้องต้น — Prerequisites
เพื่อเริ่มใช้งานคุณต้องมีสิ่งต่อไปนี้พร้อมแล้ว
- Azure Subscription ที่สามารถสร้าง Resource Group และ Service Principal ได้
- Azure DevOps Organization พร้อม Project ที่จะทำงาน
- Terraform CLI เวอร์ชันล่าสุดติดตั้งบน agent หรือใช้ Docker image ที่เตรียมไว้
- Git Repository เก็บไฟล์ `.tf` ของคุณ
**สำคัญ: ใช้ Service Principal แทนการใส่ credential ผู้ใช้ทั่วไป เพื่อจำกัดสิทธิ์ตามหลัก “least privilege”
สร้าง Service Connection ใน Azure DevOps — Create Service Connection
Service Connection ทำให้ Pipeline สามารถเรียกใช้งาน Azure ได้โดยไม่ต้องเก็บคีย์ในโค้ด
- ขั้นตอนที่ 1: เปิด Project Project settings Service connections**
- ขั้นตอนที่ 2: คลิก New service connection, เลือก Azure Resource Manager Service principal (automatic)
- **ขั้นตอนที่ 3: กรอกชื่อ, Subscription, และเลือก Permission “Contributor” หรือระดับต่ำกว่า ตามความต้องการของคุณ
- ขั้นตอนที่ 4: ตรวจสอบว่า Service Connection ทำงานโดยคลิก Verify**
**Tip: หากต้องการจำกัดทรัพยากรเฉพาะ Resource Group ให้เลือก “Scope: Resource group”
จัดเตรียมไฟล์ Terraform — Prepare Terraform Files
โครงสร้างโฟลเดอร์ควรเป็นมาตรฐานเพื่อให้ง่ายต่อการอ้างอิงใน Pipeline
``` /infra │ main.tf # แหล่งกำหนด resource หลัก │ variables.tf # ตัวแปรที่ใช้ได้ทั่วโครงการ │ outputs.tf # ค่าที่ต้องการส่งออกหลัง apply └───modules/ network/ storage/ ```
- **ขั้นตอนที่ 1: กำหนด `backend` ในไฟล์ `main.tf` เพื่อเก็บ state บน Azure Storage
```hcl terraform { backend "azurerm" { resource_group_name = "tfstate-rg" storage_account_name = "tfstatestorage" container_name = "tfstate" key = "prod.terraform.tfstate" } } ```
- **ขั้นตอนที่ 2: เพิ่ม `required_providers` เพื่อบังคับใช้เวอร์ชัน Terraform ที่รองรับ
ตั้งค่าไฟล์ pipeline (YAML) — Define Azure Pipeline
สร้างไฟล์ `azure-pipelines.yml` ใน root ของ repository
```yaml trigger: branches: include:
- main
variables: TF_VAR_client_id: $(client-id) TF_VAR_client_secret: $(client-secret)
stages:
- stage: TerraformInit
displayName: "Terraform Init" jobs:
- job: init
pool: vmImage: 'ubuntu-latest' steps:
- checkout: self
- task: TerraformInstaller@0
inputs: terraformVersion: '1.9.x'
- script: |
terraform init -input=false displayName: "Initialize Terraform"
- stage: TerraformPlan
displayName: "Terraform Plan" dependsOn: TerraformInit jobs:
- job: plan
pool: vmImage: 'ubuntu-latest' steps:
- checkout: self
- script: |
terraform plan -out=tfplan.out displayName: "Run terraform plan"
- stage: TerraformApply
displayName: "Terraform Apply" dependsOn: TerraformPlan condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) jobs:
- job: apply
pool: vmImage: 'ubuntu-latest' steps:
- checkout: self
- script: |
terraform apply -auto-approve tfplan.out displayName: "Apply Terraform plan" ```
- **ขั้นตอนที่ 1: ระบุ `trigger` เพื่อให้ pipeline ทำงานอัตโนมัติเมื่อมีการ push ไปยัง branch `main`
- ขั้นตอนที่ 2: ใช้ TerraformInstaller@0** เพื่อติดตั้งเวอร์ชันที่ต้องการโดยอัตโนมัติ
- **ขั้นตอนที่ 3: แบ่งกระบวนการเป็น 3 stage: Init Plan Apply เพื่อให้สามารถตรวจสอบผลลัพธ์ก่อน Deploy จริง
จัดการ Secrets ด้วย Azure Key Vault — Secure Secrets with Key Vault
ไม่ควรเก็บค่า credential ในนั้นของ pipeline โดยตรง
| วิธี | ข้อดี | ข้อเสีย |
|---|---|---|
| Variable Group (plain text) | ตั้งง่าย, ใช้ได้ทันที | ไม่เข้ารหัส, เสี่ยงต่อการรั่วไหล |
| Azure Key Vault | เข้ารหัสอัตโนมัติ, การควบคุมสิทธิ์ละเอียด | ต้องตั้ง Service Connection เพิ่มเติม |
- **ขั้นตอนที่ 1: สร้าง Key Vault ใน Azure แล้วเพิ่ม secret `client-id` และ `client-secret`
- ขั้นตอนที่ 2: ไปที่ Project settings Service connections** เพิ่ม “Azure Key Vault” เชื่อมต่อกับ Vault ที่สร้าง |เลือก “Allow access to all pipelines”|
- **ขั้นตอนที่ 3: ใน pipeline ใช้ `$(client-id)` และ `$(client-secret)` ตามตัวอย่าง YAML ด้านบน
Tip: เปิดใช้ Managed Identity** ของ agent pool เพื่อให้ Azure DevOps สามารถดึง secret ได้โดยไม่ต้องสร้าง Service Principal แยก
ตรวจสอบและแก้ไขข้อผิดพลาดทั่วไป — Troubleshooting
แม้ว่าการตั้งค่าจะเรียบง่าย แต่บางจุดอาจทำให้ pipeline ล้มเหลว
- **Error: `AuthorizationFailed` – เกิดจากสิทธิ์ของ Service Principal ไม่ครอบคลุม
- แก้: เพิ่มบทบาท “Contributor” หรือสร้าง Custom Role ที่มีเพียง `Microsoft.Resources/subscriptions/resourceGroups/write` และ `Microsoft.Storage/storageAccounts/*` ตามความจำเป็น
- **Error: `Failed to load backend config` – Backend storage ไม่พบหรือไม่มีสิทธิ์เข้าถึง
- แก้: ตรวจสอบว่า Service Principal มีบทบาท “Storage Blob Data Owner” บน container ของ Terraform state
- **Error: `terraform plan` returns non‑zero exit code แม้ว่าจะไม่มีการเปลี่ยนแปลง
- แก้: เพิ่ม `-detailed-exitcode` เพื่อให้ pipeline ตัดสินใจได้ว่าเป็น “no changes” หรือ “error”
สรุป — Summary
บทความนี้อธิบายขั้นตอนครบวงจรตั้งค่า Azure DevOps Pipelines ร่วมกับ Terraform เพื่อจัดการโครงสร้างพื้นฐานแบบ IaC อย่างปลอดภัย
- เตรียม Azure Subscription, DevOps Project และ Git repository
- สร้าง Service Connection ที่มีสิทธิ์จำกัด (least privilege)
- กำหนดไฟล์ Terraform พร้อม backend บน Azure Storage
- เขียน `azure-pipelines.yml` แบ่งเป็น stage Init‑Plan‑Apply
- ใช้ Azure Key Vault จัดการ secret อย่างเข้ารหัสและปลอดภัย
- ตรวจสอบข้อผิดพลาดทั่วไปและปรับสิทธิ์ตามที่จำเป็น
**สำคัญ: ควรทำการทดสอบในสภาพแวดล้อมแยก (dev / test) ก่อน Deploy ไปยัง Production เพื่อให้แน่ใจว่าทุกขั้นตอนทำงานได้สมบูรณ์และไม่มีข้อมูลลับถูกเปิดเผยโดยไม่ได้ตั้งใจ.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่า Azure DevOps Pipelines ร่วมกับ Terraform ปรับโครงสร้างพื้นฐานแบบ IaC อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 15 สิงหาคม 2569 เวลา 10:51



