วิธีตั้งค่า Azure DevOps Pipelines ร่วมกับ Terraform ปรับโครงสร้างพื้นฐานแบบ IaC อย่างปลอดภัย

ที่มาภาพ: 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

Related

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

วิธีใช้ AI สร้าง Dockerfile อัตโนมัติและสแกนช่องโหว่ด้วย Trivy อย่างปลอดภัยGrowth
15 สิงหาคม 2569 เวลา 11:30

วิธีใช้ AI สร้าง Dockerfile อัตโนมัติและสแกนช่องโหว่ด้วย Trivy อย่างปลอดภัย

การสร้าง Dockerfile ด้วยตนเองอาจใช้เวลานานและเสี่ยงต่อข้อผิดพลาดด้านความปลอดภัย โดยเฉพาะเมื่อต้องกำหนดเวอร์ชันฐาน‑image หรือแพ็กเกจต่าง ๆ อย่างแม่นยำ AI สามารถช่วยเขียน Dockerfile ให้ตรงตามความต้องการ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีสร้าง Data Pipeline แบบ Real time ด้วย Apache Kafka บน Kubernetes อย่างปลอดภัยGrowth
14 สิงหาคม 2569 เวลา 20:30

วิธีสร้าง Data Pipeline แบบ Real time ด้วย Apache Kafka บน Kubernetes อย่างปลอดภัย

การสร้าง Data Pipeline แบบ Real‑time บนคลาวด์ต้องอาศัยเครื่องมือที่ทำงานได้อย่างต่อเนื่องและปลอดภัย **Apache Kafka** ร่วมกับ **Kubernetes** เป็นสถาปัตยกรรมที่ตอบโจทย์นี้ได้ดี ในบทความนี้เราจะพาคุณผ่าน…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีตั้งค่า Cloudflare Pages พร้อม Functions เพื่อสร้างเว็บไซต์สเตติกแบบ Server‑less อย่างปลอดภัยGrowth
14 สิงหาคม 2569 เวลา 19:00

วิธีตั้งค่า Cloudflare Pages พร้อม Functions เพื่อสร้างเว็บไซต์สเตติกแบบ Server‑less อย่างปลอดภัย

Cloudflare Pages เป็นแพลตฟอร์มที่ให้บริการโฮสต์เว็บไซต์สเตติกได้อย่างเร็วและปลอดภัย การเพิ่ม **Functions** เข้าไปทำให้เราสามารถรันโค้ดฝั่งเซิร์ฟเวอร์แบบ Server‑less ได้โดยไม่ต้องจัดการเครื่องเซิร์ฟเวอ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีย้ายแอปพลิเคชันจาก Docker Compose ไปใช้ Kubernetes ด้วย Kustomize อย่างปลอดภัยGrowth
14 สิงหาคม 2569 เวลา 11:30

วิธีย้ายแอปพลิเคชันจาก Docker Compose ไปใช้ Kubernetes ด้วย Kustomize อย่างปลอดภัย

การย้ายแอปพลิเคชันจาก Docker Compose ไปยัง Kubernetes ไม่ใช่เรื่องยาก ถ้าจัดระเบียบไฟล์และตั้งค่าให้เป็นระบบ วิธีนี้ช่วยเพิ่มความทนทานต่อข้อผิดพลาดและทำให้การขยายตัว (scaling) ง่ายขึ้น **Kustomize** เ…

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