0Pricing
Azure Fundamentals · บทเรียน

การเขียนเทมเพลต ARM

สร้างเทมเพลต ARM แบบใช้พารามิเตอร์ใน JSON เพื่อปรับใช้บัญชีพื้นที่จัดเก็บและ VM พร้อมใช้ฟังก์ชันและตัวแปรของเทมเพลตเพื่อทำให้เทมเพลตนำกลับมาใช้ได้

การเขียนเทมเพลต ARM เป็นบทเรียน Azure Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Azure Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงควรใช้เทมเพลต ARM

เทมเพลต ARMช่วยให้คุณกำหนดโครงสร้างพื้นฐาน Azure เป็นโค้ดในรูปแบบ JSON ได้ จึงสามารถปรับใช้ซ้ำได้อย่างสม่ำเสมอ และควบคุมเวอร์ชันร่วมกับโค้ดแอปพลิเคชันของคุณได้ เทมเพลตมีคุณสมบัติการทำงานซ้ำโดยให้ผลลัพธ์เดิม การเรียกใช้เทมเพลตเดิมหลายครั้งจึงให้ผลลัพธ์เดียวกัน ทำให้สามารถนำมาใช้ใหม่ได้อย่างปลอดภัยหลังการเปลี่ยนแปลง

โครงร่างเทมเพลตและสคีมา

เทมเพลต ARM ทุกชุดเริ่มต้นด้วยคุณสมบัติ $schema ที่ชี้ไปยัง URL ของสคีมาเทมเพลต ตามด้วยสตริง contentVersion สคีมาจะบอกพอร์ทัล Azure และส่วนขยายตัวแก้ไขว่าจะตรวจสอบและให้ IntelliSense แก่เทมเพลตของคุณอย่างไร ห้าส่วนหลักถัดมาคือ พารามิเตอร์ ตัวแปร ฟังก์ชัน ทรัพยากร และ เอาต์พุต

{
  '$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#',
  'contentVersion': '1.0.0.0',
  'parameters': {},
  'variables': {},
  'functions': [],
  'resources': [],
  'outputs': {}
}

การกำหนดพารามิเตอร์

พารามิเตอร์ทำให้เทมเพลตใช้ซ้ำได้ โดยรับข้อมูลนำเข้าในเวลาปรับใช้ พารามิเตอร์แต่ละรายการมี type (string, int, bool, object, array, secureString) มี defaultValue ซึ่งเป็นตัวเลือก และมี allowedValues ซึ่งเป็นตัวเลือกสำหรับการตรวจสอบความถูกต้อง การใช้ secureString กับรหัสผ่านช่วยให้มั่นใจได้ว่าค่าดังกล่าวจะไม่ถูกบันทึกลงในประวัติการปรับใช้

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24,
    "metadata": { "description": "Globally unique storage account name" }
  },
  "sku": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": ["Standard_LRS", "Standard_GRS", "Premium_LRS"]
  }
}

การใช้ตัวแปรสำหรับค่าที่คำนวณแล้ว

ตัวแปรใช้เก็บค่าที่คำนวณจากพารามิเตอร์หรือฟังก์ชันของเทมเพลต ช่วยลดการเขียนซ้ำและทำให้ดูแลรักษาเทมเพลตได้ง่ายขึ้น ตัวแปรจะถูกประเมินเพียงครั้งเดียวและอ้างอิงตลอดส่วน resources โดยใช้นิพจน์ [variables('name')] รูปแบบที่ใช้กันทั่วไปคือการสร้างชื่อทรัพยากรด้วยการนำพารามิเตอร์มาต่อกับส่วนต่อท้ายที่ไม่ซ้ำกัน

"variables": {
  "uniqueStorageName": "[concat(parameters('storageAccountName'), uniqueString(resourceGroup().id))]",
  "location": "[resourceGroup().location]"
}

การกำหนดทรัพยากร

อาร์เรย์ resources คือหัวใจของเทมเพลต ARM แต่ละองค์ประกอบอธิบายทรัพยากร Azure หนึ่งรายการ โดยมีฟิลด์บังคับ ได้แก่ type apiVersion name และ location ค่า apiVersion จะกำหนดเวอร์ชันสคีมาของผู้ให้บริการทรัพยากรแบบตายตัว ควรใช้เวอร์ชันเสถียรล่าสุดเสมอเพื่อเข้าถึงฟีเจอร์ล่าสุดและหลีกเลี่ยงคุณสมบัติที่เลิกใช้แล้ว

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2023-01-01",
    "name": "[variables('uniqueStorageName')]",
    "location": "[variables('location')]",
    "sku": { "name": "[parameters('sku')]" },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true,
      "minimumTlsVersion": "TLS1_2"
    }
  }
]

ฟังก์ชันและนิพจน์ของเทมเพลต

นิพจน์ในเทมเพลต ARM จะอยู่ภายในวงเล็บเหลี่ยม [...] และรองรับฟังก์ชันในตัวสำหรับสตริง อาร์เรย์ ออบเจ็กต์ และ ID ทรัพยากร ฟังก์ชันที่ใช้บ่อยได้แก่ concat() resourceGroup() resourceId() uniqueString() และ parameters() ARM จะประเมินฟังก์ชันเหล่านี้บนเซิร์ฟเวอร์ในเวลาปรับใช้ ไม่ใช่ประเมินภายในเครื่อง

// Reference a resource ID inside a template
"subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'myVNet', 'mySubnet')]"

// Build a unique, deterministic name
"name": "[concat('storage', uniqueString(resourceGroup().id))]"

// Conditionally include a resource
"condition": "[equals(parameters('deployStorage'), true)]"

เอาต์พุต: การส่งคืนค่า

ส่วน outputs ใช้กำหนดค่าที่ ARM จะส่งคืนหลังการปรับใช้สำเร็จ เอาต์พุตมีความสำคัญต่อการเชื่อมต่อเทมเพลตเข้าด้วยกัน ตัวอย่างเช่น คุณปรับใช้เทมเพลตเครือข่ายและส่งคืน ID ทรัพยากรของซับเน็ต จากนั้นส่ง ID ดังกล่าวเป็นพารามิเตอร์ให้เทมเพลต VM เอาต์พุตสามารถอ้างอิงนิพจน์ใด ๆ ได้ รวมถึงคุณสมบัติทรัพยากรจากการปรับใช้

"outputs": {
  "storageAccountName": {
    "type": "string",
    "value": "[variables('uniqueStorageName')]"
  },
  "blobEndpoint": {
    "type": "string",
    "value": "[reference(variables('uniqueStorageName')).primaryEndpoints.blob]"
  }
}

เทมเพลตที่เชื่อมโยงและเทมเพลตซ้อน

สำหรับสถาปัตยกรรมที่ซับซ้อน ARM รองรับทั้งเทมเพลตที่เชื่อมโยง (อ้างอิง URL ของเทมเพลตภายนอก) และเทมเพลตซ้อน (ฝังเทมเพลตไว้ภายในอาร์เรย์ resources โดยใช้ชนิด Microsoft.Resources/deployments) วิธีนี้ช่วยให้คุณแบ่งการปรับใช้โครงสร้างพื้นฐานขนาดใหญ่ออกเป็นส่วนย่อยแบบโมดูลาร์ที่นำกลับมาใช้ซ้ำได้ โดยยังคงมีเทมเพลตประสานงานเพียงชุดเดียวเป็นจุดเริ่มต้น

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2021-04-01",
  "name": "networkDeploy",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "https://raw.githubusercontent.com/contoso/templates/main/network.json",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      "vnetName": { "value": "[parameters('vnetName')]" }
    }
  }
}

ไฟล์พารามิเตอร์

แทนที่จะส่งพารามิเตอร์ผ่านบรรทัดคำสั่ง ให้เก็บพารามิเตอร์ไว้ในไฟล์พารามิเตอร์แยกต่างหาก ซึ่งเป็นไฟล์ JSON ที่มีออบเจ็กต์ parameters ซึ่งประกอบด้วยคู่ชื่อกับค่า ไฟล์พารามิเตอร์สามารถเจาะจงตามสภาพแวดล้อมได้ (เช่น dev.parameters.json และ prod.parameters.json) และบันทึกไว้ในการควบคุมซอร์สได้ โดยเก็บค่าที่มีความละเอียดอ่อนไว้ในการอ้างอิง Azure Key Vault แทนการเก็บเป็นข้อความธรรมดา

// dev.parameters.json
{
  '$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#',
  'contentVersion': '1.0.0.0',
  'parameters': {
    'storageAccountName': { 'value': 'devstorageacct' },
    'sku': { 'value': 'Standard_LRS' }
  }
}

// Deploy with parameters file
// az deployment group create -g MyRG -f azuredeploy.json -p dev.parameters.json

การปรับใช้และตรวจสอบความถูกต้องของเทมเพลต

ใช้คำสั่ง Azure CLI az deployment group create เพื่อปรับใช้เทมเพลตไปยังกลุ่มทรัพยากร ก่อนปรับใช้ไปยังสภาพแวดล้อมการใช้งานจริง ให้เรียกใช้ az deployment group validate เพื่อค้นหาข้อผิดพลาดของสคีมาและตรรกะ และใช้ az deployment group what-if เพื่อดูตัวอย่างการเปลี่ยนแปลงทรัพยากร คำสั่งทั้งสามนี้ประกอบกันเป็นไปป์ไลน์การปรับใช้ที่ปลอดภัย ได้แก่ ตรวจสอบความถูกต้อง แสดงตัวอย่าง และปรับใช้

# Step 1: Validate the template syntax
az deployment group validate \
  --resource-group MyRG \
  --template-file azuredeploy.json \
  --parameters @dev.parameters.json

# Step 2: Preview changes
az deployment group what-if \
  --resource-group MyRG \
  --template-file azuredeploy.json \
  --parameters @dev.parameters.json

# Step 3: Deploy
az deployment group create \
  --resource-group MyRG \
  --template-file azuredeploy.json \
  --parameters @dev.parameters.json

แนวทางปฏิบัติที่ดีที่สุดสำหรับเทมเพลต ARM

ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับเทมเพลต ARM ดังนี้ ใช้พารามิเตอร์สำหรับค่าที่แตกต่างกันตามสภาพแวดล้อม ใช้ตัวแปรเพื่อหลีกเลี่ยงการเขียนซ้ำ กำหนดเวอร์ชัน API แบบตายตัวให้เป็นเวอร์ชันเสถียร ใช้ secureStringสำหรับรหัสผ่าน เพิ่มคำอธิบายข้อมูลเมตาให้พารามิเตอร์ และ แยกเทมเพลตขนาดใหญ่ออกเป็นโมดูลที่เชื่อมโยงกัน จัดเก็บเทมเพลตไว้ในที่เก็บ Git และปรับใช้ผ่านไปป์ไลน์ CI/CD เพื่อให้ตรวจสอบย้อนหลังได้

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า เทมเพลต ARMคือเอกสาร JSON ที่กำหนดโครงสร้างพื้นฐาน Azure แบบ Declarative พารามิเตอร์และตัวแปรช่วยให้เทมเพลตนำกลับมาใช้ซ้ำและดูแลรักษาได้ และเวิร์กโฟลว์ ตรวจสอบความถูกต้อง แสดงตัวอย่าง และปรับใช้ช่วยให้การปรับใช้ปลอดภัยและทำซ้ำได้ บทถัดไปเราจะเรียนรู้ Bicep ซึ่งเป็นชั้นนามธรรมสมัยใหม่เหนือ ARM JSON

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

บทเรียน “การเขียนเทมเพลต ARM” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเขียนเทมเพลต ARM” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Azure Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเขียนเทมเพลต ARM”

สร้างเทมเพลต ARM แบบใช้พารามิเตอร์ใน JSON เพื่อปรับใช้บัญชีพื้นที่จัดเก็บและ VM พร้อมใช้ฟังก์ชันและตัวแปรของเทมเพลตเพื่อทำให้เทมเพลตนำกลับมาใช้ได้ คุณปฏิบัติ Azure Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Azure Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Azure Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การเขียนเทมเพลต ARM” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Azure Fundamentals นี้ได้ไหม

ได้ บทเรียน Azure Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การทำงานของ Azure Resource Manager
  2. การเขียนเทมเพลต ARM
  3. Bicep: IaC สมัยใหม่สำหรับ Azure
  4. Terraform บน Azure
← กลับไปที่ Azure Fundamentals