Azure Resource Manager The Series : ตอนที่ 8 – การสร้าง Instance จำนวนมากใน ARM Template

0
301

 

หลังจากที่ในตอนที่แล้วได้อธิบายถึงประโยชน์ และหลักการในการสร้าง Customized ARM Template ไปแล้วนั้น ในตอนนี้จะพาไปดูวิธีการสร้าง ARM Template ที่มีความสลับซับซ้อนมากขึ้น เช่นมีการ deploy ทรัพยากรจำนวนมาก (หรือที่เรียกว่า multiple instance นั่นเองครับ)

ในตอนนี้ผมจะพาทุกท่านไปดูวิธีการสร้าง ARM Template เพื่อทำการ deploy Virtual Machine (VM) จำนวน 3 VM เพื่อใช้ในการทำงานของระบบที่เราต้องการครับ

ซึ่งในการทำงานในรูปแบบ Multiple Instance นั้นเราจะมี Keyword ที่สามารถนำมาช่วยงานได้มากๆ อยู่ 2 Keyword ด้วยกันคือ

  1. CopyIndex()  เป็น Keyword ที่ช่วยให้สามารถนับจำนวนของ Instance ได้ว่าตอนนี้กำลังทำงานกับ Instance ไหนอยู่ หรืออธิบายงานๆ ในภาษาการเขียนโปรแกรมก็คือการนับ loop (นับรอบนั่นเอง) โดยตัวนับเริ่มต้นของ CopyIndex() นั้นจะเริ่มจาก 0 ครับ
    ส่วนการทำการ copy ทรัพยากรหรือ Resource ต่างๆ นั้น เราสามารถทำได้โดยการใช้ Method “Copy” และระบุจำนวนที่ต้องการ โดยใช้ Property “Count”
  2. Concat()  เป็น Keyword ในการนำข้อความมาต่อกัน

ตัวอย่างการใช้งานของ Keyword ทั้ง 2 นั้น เป็นดังนี้

    {
      "apiVersion": "[variables('apiVersion')]",
      "type": "Microsoft.Compute/virtualMachines",
	  "name": "[concat(parameters('vmName'),copyIndex())]",
	  "copy": {
        "name": "vmLoop",
        "count": "[parameters('count')]"
       },

ความหมายของตัวอย่างนั้นแบ่งเป็นตอนๆ ดังนี้

count": "[parameters('count')]"

เป็นการกำหนดจำนวนรอบในการทำงาน (ในที่นี้ก็คือจำนวน VM) โดยใช้ Property ชื่อ Count ซึ่งค่าของ Property นี้นั้น จะมีการรับมาจาก Parameter file อีกขั้นตอนหนึ่ง สมมุติเบื้องต้นว่าเป็น 10

  "name": "[concat(parameters('vmName'),copyIndex())]",

จากนั้นมีการใช้ copyIndex() เพื่อวนซ้ำให้ทำการสร้าง VM เริ่มตั้ง 0,1,2,3,4,5,6,7,8,9   (อย่าลืมว่านับจาก 0 นะครับ) และนำ CopyIndex ไปต่อกับพารามิเตอร์ VMName (สมมุติว่ามีค่าเป็น testvm) เพื่อนำไปใช้เป็นชื่อของ Virtual Machine ดังนั้นก็จะทำให้เกิด testvm0, testvm1, testvm2, จนถึง testvm9 ตามจำนวนรอบที่ต้องการครับ
ซึ่ง 2 บรรทัดหลังสุด คือ name นั้นใช้ในการกำหนดชื่อของการวน loop (ชื่อภายในเฉยๆ เพื่อใช้ในการอ้างอิง) และ count .ใช้กำหนดจำนวน VM ที่ต้องการ ดังได้กล่าวไปแล้วครับ

ซึ่งใน ARM Template ตัวอย่างที่ผมเตรียมไว้ให้นั้นจะมีการพารามิเตอร์ต่างๆ  ดัง

Parameter Name

Value

 ResourceGroupToDeploy ชื่อของ Resource Group ที่ต้องการ Deploy
location Location ของ Azure Datacenter ที่ต้องการ Deploy สำหรับประเทศไทย นั้น Datacenter ที่ใกล้ที่สุดคือ southeastasia
 virtualMachineName ชื่อขึ้นต้นของ Virtual Machine ซึ่ง จะมีการนำหมายเลขของ VM ที่ได้จาก copyIndex() มาต่อท้ายด้วย
virtualMachineSize ขนาดของ Virtual Machine ที่ต้องการจะ Deploy
adminUsername ชื่อ Administrative Account สำหรับ Remote Desktop ไปทำงานกับ VM
virtualNetworkName ชื่อของ Virtual Network ที่จะใช้ในการ Deploy
networkInterfaceName ชื่อของ Network Interface ที่สร้างชึ้น เพื่อใช้งานกับ VM จะมีการนำหมายเลขของ VM ที่ได้จาก copyIndex() มาต่อท้ายด้วย
networkSecurityGroupName ชื่อของ Network Security Group ที่สร้างชึ้น เพื่อใช้งานกับ Network Interface จะมีการนำหมายเลขของ VM ที่ได้จาก copyIndex() มาต่อท้ายด้วย
adminPassword Password สำหรับ Administrative Account
storageAccountName ชื่อของ Storage Account ที่สร้างชึ้น เพื่อเก็บ Virtual Hard Disk ของ VM ซึ่ง จะมีการนำหมายเลขของ VM ที่ได้จาก copyIndex() มาต่อท้ายด้วย
storageAccountType ประเภทของ Storage Account ที่สร้างขึ้น
diagnosticsStorageAccountName ชื่อของ Storage Account ที่สร้างชึ้น เพื่อเก็บข้อมูลในการทำงานเกี่ยวกับการ Diagnostic ต่างๆ
diagnosticsStorageAccountType ประเภทของ Storage Account ที่สร้างชึ้น เพื่อเก็บข้อมูลในการทำงานเกี่ยวกับการ Diagnostic ต่างๆ
addressPrefix หมายเลข Address Space (Subnet และ Subnet mask) สำหรับ Virtual Network ที่สร้างขึ้น
subnetname ชื่อ sub-Network
subnetPrefix หมายเลข Subnet และ Subnet mask สำหรับ subnet ที่จะ deploy VM
publicIpAddressName ชื่อของ public IP Address ที่สร้างขึ้น เพื่อใช้กับ Network Interface ของ VM ซึ่งจะมีการนำหมายเลขของ VM ที่ได้จาก copyIndex() มาต่อท้ายด้วย
publicIpAddressType ประเภทของ public IP Address ที่สร้างขึ้น
vmcount จำนวนของ VM ที่ต้องการสร้าง

ซึ่งจากตัวอย่าง เมื่อทำการ Deploy ตาม Template ตัวอย่าง และกำหนด Parameters ต่างๆ ตาม Default ที่มีให้ Parameters file แล้วจะได้ผลของการ Deployment ดังรูป

ตัวอย่างผลการ Deploy โดยใช้ Azure CLI 2.0

Download ตัวอย่าง Template สำหรับการ Deploy ในรูปแบบ Multi Instance

แหล่งข้อมูลอ่านเพิ่มเติม
Design patterns for Azure Resource Manager templates when deploying complex solutions
World Class Azure Resource Manager Templates Considerations and Proven Practices