Terraform บน Azure
กำหนดค่าผู้ให้บริการ AzureRM Terraform เขียนแผนโครงสร้างพื้นฐานพื้นฐาน และทำความเข้าใจว่าเมื่อใดควรเลือก Terraform แทนเครื่องมือ ARM/Bicep ดั้งเดิม
Terraform บน Azure เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
Terraform คืออะไร และเหตุใดจึงใช้กับ Azure
Terraformคือเครื่องมือโครงสร้างพื้นฐานในรูปแบบโค้ดแบบโอเพนซอร์สที่พัฒนาโดย HashiCorp ต่างจาก Bicep ตรงที่ Terraform ไม่ผูกกับผู้ให้บริการคลาวด์รายใดรายหนึ่ง โค้ด Terraform ชุดเดียวสามารถจัดการทรัพยากรบน Azure, AWS, GCP และผู้ให้บริการรายอื่น ๆ ได้พร้อมกัน บน Azure Terraform ใช้ผู้ให้บริการ AzureRMเพื่อโต้ตอบกับ ARM API จึงเป็นตัวเลือกยอดนิยมสำหรับองค์กรที่ใช้หลายคลาวด์
ผู้ให้บริการ AzureRM ของ Terraform
ผู้ให้บริการ AzureRMคือปลั๊กอินที่ Terraform ดาวน์โหลดและใช้แปลงการกำหนดค่า Terraform ให้เป็นการเรียกใช้ ARM API โดยดูแลร่วมกันโดย HashiCorp และ Microsoft และเป็นวิธีอย่างเป็นทางการสำหรับจัดการทรัพยากร Azure ด้วย Terraform ให้กำหนดค่าผู้ให้บริการด้วย ID การสมัครใช้งานและวิธีการยืนยันตัวตน จากนั้นเรียกใช้ terraform init เพื่อดาวน์โหลดปลั๊กอิน
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}โครงสร้างไฟล์ Terraform
โครงการ Terraform บน Azure โดยทั่วไปจะแบ่งออกเป็นไฟล์ .tf หลายไฟล์ ได้แก่ main.tf สำหรับประกาศทรัพยากร variables.tf สำหรับกำหนดตัวแปรอินพุต outputs.tf สำหรับกำหนดค่าเอาต์พุต และ terraform.tfvars สำหรับระบุค่าตัวแปรของ Environment ใด Environment หนึ่ง Terraform จะโหลดไฟล์ .tf ทั้งหมดในไดเรกทอรีปัจจุบันโดยอัตโนมัติ ดังนั้นการแบ่งเป็นหลายไฟล์จึงทำเพื่อให้อ่านง่ายเท่านั้น
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}การประกาศทรัพยากร Azure
ใน Terraform คุณประกาศทรัพยากร Azure โดยใช้บล็อก resource ชนิดของบล็อกคือ resource ตามด้วยชนิดทรัพยากร AzureRM เช่น 'azurerm_resource_group' และชื่อภายในที่ใช้สำหรับอ้างอิงทรัพยากรนั้นภายในการกำหนดค่า ชื่อคุณสมบัติใน Terraform ใช้รูปแบบ snake_case แทน camelCase หรือ PascalCase ที่ใช้ใน ARM JSON
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}เวิร์กโฟลว์ Terraform: Initialise, Plan และ Apply
เวิร์กโฟลว์หลักของ Terraform มีสามขั้นตอน terraform init จะดาวน์โหลดผู้ให้บริการ AzureRM และตั้งค่าแบ็กเอนด์ terraform plan จะเปรียบเทียบการกำหนดค่าของคุณกับสถานะปัจจุบัน และแสดงความแตกต่างของสิ่งที่จะถูกสร้าง เปลี่ยนแปลง หรือทำลาย ซึ่งคล้ายกับ what-if ของ ARM terraform apply จะดำเนินการตามแผนและปรับปรุง Azure ให้ตรงกับการกำหนดค่าของคุณ
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyสถานะ Terraform
Terraform จะดูแลไฟล์สถานะ (terraform.tfstate) ซึ่งบันทึกสถานะปัจจุบันของทรัพยากรทั้งหมดที่จัดการอยู่ และจับคู่ทรัพยากรเหล่านั้นกับการกำหนดค่าของคุณ ไฟล์นี้ช่วยให้ Terraform ตรวจจับความคลาดเคลื่อนระหว่างสิ่งที่กำหนดค่าไว้กับสิ่งที่มีอยู่ใน Azure ใน Environment ที่ทำงานเป็นทีม ควรจัดเก็บสถานะจากระยะไกลในบัญชี Storage ของ Azure (แบ็กเอนด์ของ Terraform) เพื่อให้สมาชิกทุกคนใช้ไฟล์สถานะเดียวกัน
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}การยืนยันตัวตนกับ Azure ใน Terraform
Terraform รองรับวิธีการยืนยันตัวตนกับ Azure หลายวิธี ระหว่างการพัฒนาในเครื่อง ให้ใช้ az login (การยืนยันตัวตนผ่าน Azure CLI) โดย Terraform จะดึงข้อมูลประจำตัวมาใช้โดยอัตโนมัติ ในไปป์ไลน์ CI/CD ให้ใช้ข้อมูลประจำตัวของ Serviceพร้อมข้อมูลลับของไคลเอนต์หรือใบรับรอง โดยส่งผ่านตัวแปร Environment สำหรับเอเจนต์หรือ VM ที่โฮสต์บน Azure ให้ใช้ข้อมูลประจำตัวที่จัดการโดยระบบเพื่อการยืนยันตัวตนที่ปลอดภัยที่สุดโดยไม่ต้องใช้ข้อมูลลับ
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planโมดูล Terraform สำหรับการนำกลับมาใช้ใหม่
เช่นเดียวกับโมดูล Bicep โมดูล Terraformช่วยให้คุณจัดแพ็กเกจและนำรูปแบบโครงสร้างพื้นฐานกลับมาใช้ใหม่ โมดูลคือไดเรกทอรีที่มีไฟล์ .tf อยู่ภายใน คุณอ้างอิงโมดูลด้วยบล็อก module ส่งอินพุตผ่าน variables และนำเอาต์พุตมาใช้ Terraform Registry มีโมดูล Azure ที่สร้างโดยชุมชนและผ่านการตรวจสอบแล้วหลายร้อยรายการให้คุณเรียกใช้ได้โดยตรง เช่น โมดูลเครือข่าย AzureRM
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}ควรเลือก Terraform หรือ Bicep เมื่อใด
เลือกใช้ Bicep เมื่อองค์กรของคุณใช้ Azure เท่านั้นและต้องการการผสานรวมกับฟีเจอร์ใหม่ของ Azure อย่างใกล้ชิดที่สุด (Bicep จะรองรับชนิดทรัพยากรใหม่ตั้งแต่วันแรก) เลือกใช้ Terraform เมื่อคุณจัดการทรัพยากรข้ามผู้ให้บริการคลาวด์หลายราย ต้องการระบบนิเวศขนาดใหญ่ของโมดูลจากชุมชน หรือต้องการไวยากรณ์ HCL และชุดเครื่องมือของ HashiCorp ทั้งสองแบบเหมาะสมสำหรับการ Deploy บน Azure เท่านั้น โดยบ่อยครั้งความต้องการขององค์กรจะเป็นตัวตัดสิน
การนำเข้าทรัพยากรที่มีอยู่
หากมีทรัพยากรอยู่ใน Azure ก่อนที่คุณจะเริ่มใช้ Terraform คุณสามารถนำทรัพยากรเหล่านั้นมาอยู่ภายใต้การจัดการของ Terraform ได้โดยใช้ terraform import คำสั่งนี้จะดึงสถานะปัจจุบันของทรัพยากรและเพิ่มลงในไฟล์สถานะของ Terraform หลังจากนำเข้าแล้ว คุณต้องเขียนบล็อกการกำหนดค่าที่สอดคล้องกันด้วยตนเองให้ตรงกับทรัพยากรที่นำเข้า จากนั้นเรียกใช้ terraform plan เพื่อยืนยันว่าไม่มีความแตกต่าง
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}แนวปฏิบัติที่ดีสำหรับ Terraform บน Azure
ปฏิบัติตามแนวทางที่ดีต่อไปนี้สำหรับ Terraform บน Azure: จัดเก็บสถานะจากระยะไกลใน Azure Blob Storage พร้อมเปิดใช้การล็อกสถานะ ใช้เวิร์กสเปซหรือไฟล์สถานะแยกกันสำหรับแต่ละ Environment อย่า Commit ข้อมูลลับลงในการควบคุมซอร์สโค้ด แต่ให้ใช้แหล่งข้อมูล Azure Key Vault แทน ล็อกเวอร์ชันของผู้ให้บริการเพื่อหลีกเลี่ยงการเปลี่ยนแปลงที่ทำให้ระบบใช้งานไม่ได้ และเรียกใช้ Terraform ในไปป์ไลน์ CI/CD (Azure Pipelines หรือ GitHub Actions) พร้อมขั้นตอนอนุมัติแผน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Terraformเป็นเครื่องมือ IaC ที่ไม่ผูกกับผู้ให้บริการคลาวด์รายใดรายหนึ่ง และใช้ผู้ให้บริการ AzureRM เพื่อจัดการทรัพยากร Azure เวิร์กโฟลว์การ Initialise, Plan และ Applyช่วยให้การ Deploy ปลอดภัยและคาดการณ์ได้ และสถานะจากระยะไกลใน Azure Blob Storage มีความสำคัญต่อการทำงานร่วมกันเป็นทีม ต่อไปเราจะสำรวจการสร้างแผน App Service และ Web App
เรียนรู้ Cloud & IT Cert Prep ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 150
- บทเรียน
- 600
คำถามที่พบบ่อย
บทเรียน “Terraform บน Azure” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Terraform บน Azure” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Terraform บน Azure”
กำหนดค่าผู้ให้บริการ AzureRM Terraform เขียนแผนโครงสร้างพื้นฐานพื้นฐาน และทำความเข้าใจว่าเมื่อใดควรเลือก Terraform แทนเครื่องมือ ARM/Bicep ดั้งเดิม คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “Terraform บน Azure” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำงานของ Azure Resource Manager
- การเขียนเทมเพลต ARM
- Bicep: IaC สมัยใหม่สำหรับ Azure
- Terraform บน Azure