การเขียนเทมเพลต ARM
สร้างเทมเพลต ARM แบบใช้พารามิเตอร์ใน JSON เพื่อปรับใช้บัญชีพื้นที่จัดเก็บและ VM พร้อมใช้ฟังก์ชันและตัวแปรของเทมเพลตเพื่อทำให้เทมเพลตนำกลับมาใช้ได้
การเขียนเทมเพลต ARM เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนเทมเพลต ARM”
สร้างเทมเพลต ARM แบบใช้พารามิเตอร์ใน JSON เพื่อปรับใช้บัญชีพื้นที่จัดเก็บและ VM พร้อมใช้ฟังก์ชันและตัวแปรของเทมเพลตเพื่อทำให้เทมเพลตนำกลับมาใช้ได้ คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนเทมเพลต ARM” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำงานของ Azure Resource Manager
- การเขียนเทมเพลต ARM
- Bicep: IaC สมัยใหม่สำหรับ Azure
- Terraform บน Azure