กลับมาต่อกันกับ Azure Resource Manager หลังจากห่างหายไปนานนะครับ ในตอนนี้ผมจะพาทุกท่านไปทำความรู้จักกับการสร้าง Template ขึ้นมาใช้งานเอง (หรือที่เราเรียกว่า Customized Template) ซึ่งจริงๆ แล้วการสร้าง Customized Image นี้นับได้ว่าเป็นศิลปะอย่างหนึ่งเลยทีเดียว ซึ่งจะช่วยให้การทำงานกับ Azure ทำงานได้ง่ายขึ้น
หลังจากที่ผมได้กล่าวถึงวิธีการในการสร้าง deploy Azure template ซึ่งมีอยู่แล้วใน Azure Quick Start Template ได้แล้วนั้นเราจะเห็นได้ว่าตัว Quick Start Template นั้นจะช่วยอำนวยความสะดวกในการทำงานได้มาก แต่อาจจะติดขัดในบางกรณีที่ว่าถ้าเราอยากจะ deploy การทำงานที่แตกต่างไปจากใน Quick Start Template เราจะทำอย่างไร ซึ่งในคราวนี้ผมจะมีคำตอบมาให้ครับ
ประโยชน์ของการสร้าง Customized Template ขึ้นใช้งาน
การสร้าง Customized Template นั้นจะมีประโยชน์ที่สำคัญสรุปดังต่อไปนี้
- อำนวยความสะดวกในการ deploy ทรัพยากรต่างๆ เพื่อทำงาน environment ที่คล้ายๆ กันให้รวดเร็ว และลดข้อผิดพลาดในการทำงาน เช่นในบางบริษัทเราอาจจะมีการ deploy environment ในการพัฒนาซอฟต์แวร์ ใน 3 ระดับเช่น Development Environment (สำหรับการพัฒนาซอฟต์แวร์), Test Environment (สำหรับการทดสอบระบบ) และ Production Environment (สำหรับการใช้งานจริงของซอฟต์แวร์) ซึ่งบางครั้งเราอาจจะต้องมีการ deploy ระบบต่างๆ เหล่านี้ซ้ำๆ ดังนั้นการใช้ Customized Template จะช่วยให้สามารถ deploy ได้เร็วขึ้น และลดความผิดพลาดได้
- อำนวยความสะดวกในการจัดการทรัพยากรต่างๆ ที่อยู่ใน Resource Group ให้สามารถจัดการผ่าน Template ได้ง่ายขึ้น
- อำนวยความสะดวกในการจัดการกับ Permission ของทรัพยากรต่างๆ ให้ถูกต้อง เหมาะสมกับการใช้งานขององค์กร
- สามารถที่จะติด tag ให้กับทรัพยากรต่างๆ เพื่อความสะดวกในการคิดค่าใช้จ่ายแยกตามทรัพยากร/ ตามหน่วยงานได้อย่างเหมาะสม
สิ่งที่ต้องพิจารณาในการสร้าง Customized Template
สิ่งสำคัญที่ผู้สร้าง Customized Template จะต้องทราบ และต้องมีการออกแบบไว้ก่อนล่วงหน้า นั้นก็จะแตกต่างกันไปตามแต่ละองค์กร และตามแต่จุดมุ่งหมายของ Customized Template นั้น แต่จากประสบการณ์ของผมเองนั้นสิ่งที่เราจะต้องมองไว้ล่วงหน้าก็จะประกอบไปด้วยสิ่งต่างๆ ดังต่อไปนี้
- Resource Group ซึ่งตรงนี้เราต้องออกแบบไว้ล่วงหน้าเลยว่าใน Customized Template นั้นจะต้องมีทรัพยากรอะไรอยู่บ้าง
- Size / Capacity / Pricing Model หลังจากที่เราออกแบบมาแล้วทรัพยากรที่ต้องมีใน Resource Group ต้องมีอะไรบ้างแล้วนั้น สิ่งถัดไปก็ต้องมาดูเรื่องของ Size & Capacity ของทรัพยากรนั้นๆ ซึ่งอาจจะต่างกันออกไปตามแต่ละทรัพยากร เช่น
- Virtual Machine (VM) ซึ่ง VM แต่ละ Size กันนั้นก็จะมีจำนวนของ CPU Core, Memory ตลอดจน Disk ที่แตกต่างกันออกไป ขึ้นอยู่กับ Series และ Size ของ VM นั้นๆ
- Storage Account ก็จะต้องดูในเรื่องของพื้นที่ความจุข้อมูลกี่ GB, TB ตลอดจน Redundancy Model (LRS, GRS เป็นต้น) ซึ่งแต่ละแบบก็จะมีราคาต่อ GB ที่แตกต่างกันออกไป
- Virtual Network (VNET) สิ่งที่ต้องดูก็คือในเรื่องของ IP Address, Subnet mask ที่จะใช้ในการเชื่อมต่อของ VNET
นอกจากนี้สิ่งที่เราต้องทราบในหัวข้อนี้อีกอย่างหนึ่งก็คือ Pricing Model ของแต่ละ ทรัพยากร ซึ่ง Microsoft Azure จะมีการคิดราคาแตกต่างกันออกไปตามแต่ละทรัพยากร โดยบางทรัพยากรนั้นจะมีการอนุญาติให้ใช้ฟรี และบางทรัพยากรจะมีการลดราคาให้
- Parameters & Variables เป็นส่วนสำคัญอีกส่วนหนึ่งที่จะช่วยให้การ deploy Customized Template เป็นไปได้อย่างสะดวก มีความยืดหยุ่น และถูกต้อง ซึ่งเราจะมีหลักการในการออกแบบง่ายๆ ดังนี้ครับ
- Parameters เป็นการกำหนดข้อมูลต่างๆ ที่อนุญาติให้ผู้ใช้งานสามารถทำการเปลี่ยนข้อมูลได้ เช่น ชื่อของ Resource Group, ชื่อของ Resource และ Managed item ต่างๆ เช่นชื่อ virtual machine name, storage account name เป็นต้น โดยเราจะทำการสร้างเก็บไว้ใน Parameter File ดังที่ได้กล่าวไปแล้วในตอนก่อนหน้านี้
- Variables เป็นตัวแปรที่ใช้ในการทำงานชั่วคราวของ Customized Template ซึ่งตัวแปรต่างๆ เหล่านี้จะมีการเปลี่ยนค่าต่างๆ ไปตามการทำงานของ Customized Template ในขั้นตอนต่างๆ โดยอัตโนมัติ เช่นตัวนับรอบการทำงาน (Loop counter), สถานะการทำงานต่างๆ เป็นต้น
- ลำดับการขึ้นต่อกันของทรัพยากร (Resource Dependencies) เป็นอีกสิ่งสำคัญอีกสิ่งหนึ่งที่จะช่วยให้ทรัพยากต่างๆ ของเราสามารถทำงานได้อย่างถูกต้อง เนื่องจากลำดับการขึ้นต่อับของทรัพยากรนี้จะเป็นการกำหนดให้ Microsoft Azure ได้ทราบว่าก่อนที่จะมีการเปิดใช้งานทรัพยากรต่างๆ ได้นั้น ต้องมีทรัพยากรใดเกิดขึ้นก่อนบ้าง
ยกตัวอย่างเช่น Virtual Machine (VM) เราก็จะยกตัวอย่างได้ว่าการที่จะเปิดใช้งาน VM ได้นั้นจะต้องมีทรัพยากรอื่นๆ มาก่อนได้แก่
- OS Disk และ Data Disk ซึ่งจะต้องมีการทำงานอยู่บน Storage Account อีกชั้นหนึ่ง
- Network Interface Card (NIC) ซึ่งจะต้องมีการสร้าง Virtual Network ขึ้นมาก่อนอีกชั้นหนึ่ง
การระบุลำดับการขึ้นต่อกับของทรัพยากรใน Azure Template นั้นเรา สามารถกำหนดได้โดยการใช้ Keyword “dependsOn” ดังตัวอย่างนี้จะแสดงให้เห็นว่าทรัพยาที่เป็น Virtual Machine นั้นจะขึ้นอยู่กับทรัพยากรอื่น 3 รายการคือ Network Interface, Storage Account และ DiagnosticsStorageAccount
"resources": [ { "name": "[parameters('virtualMachineName')]", "type": "Microsoft.Compute/virtualMachines", "apiVersion": "2016-04-30-preview", "location": "[parameters('location')]", "dependsOn": [ "[concat('Microsoft.Network/networkInterfaces/', parameters('networkInterfaceName'))]", "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]", "[concat('Microsoft.Storage/storageAccounts/', parameters('diagnosticsStorageAccountName'))]"
ซึ่งข้อมูลเกี่ยวกับการขึ้นต่อกับของทรัพยากรแต่ละอย่างนั้นก็จะแตกต่างกันออกไป ซึ่งผู้ใช้งานจะต้องไปศึกษารายละเอียดจาก Azure Template ที่ทาง Microsoft เตรียมไว้ให้ใน Quick Start Template แล้วมาประยุกต์ใช้เอานะครับ
เอาล่ะครับ ถึงตรงนี้ก็น่าะจะมีแนวคิดในการออกแบบ และการทำงาน Azure Resource Manager Template ที่เป็น Customized Template แล้วจะได้ประโยชน์อย่างไร และเราน่าจะสามารถทำการออกแบบ template ของเราได้เลยครับ
สำหรับบทความในตอนต่อไปผมจะพาไปดูการสร้าง Customized Template ที่มีความยาก และซับซ้อนมากขึ้น ได้แก่การสร้าง Resource จำนวนมากๆ โดยการวน loop และการ PowerShell Desired Stage Configuration ต่อไปครับ
แหล่งข้อมูลอ่านเพิ่มเติม