โครงสร้างพื้นฐานเป็นโค้ดคืออะไร
ระบบจะขอให้คุณประเมินว่าโครงสร้างพื้นฐานเป็นโค้ดอาจเป็นวิธีการที่มีประโยชน์ในการจัดเตรียมทรัพยากรในบริษัทของคุณหรือไม่ คุณกําลังตรวจทานตัวเลือกที่พร้อมใช้งานสําหรับการปรับใช้ รวมถึง:
- พอร์ทัล Azure
- Azure CLI
- Azure PowerShell
- เทมเพลต Azure Resource Manager (JSON และ Bicep)
คุณกําลังมองหาตัวเลือกที่ทําซ้ําได้ และคุณต้องตัดสินใจว่าจะใช้เทคโนโลยีใดในการปรับใช้โครงสร้างพื้นฐาน Azure ของคุณ
ในหน่วยนี้ คุณจะได้เรียนรู้วิธีและสาเหตุที่โครงสร้างพื้นฐานเป็นโค้ดสามารถช่วยให้คุณปรับใช้โครงสร้างพื้นฐาน Azure ของคุณด้วยวิธีที่เป็นอัตโนมัติและทําซ้ําได้
ใช้คําสั่ง Azure CLI เพื่อแสดงแนวคิด คุณเรียนรู้เพิ่มเติมเกี่ยวกับการใช้คําสั่งเพื่อปรับใช้ทรัพยากรในโมดูลอื่น ๆ ของเส้นทางการเรียนรู้ Bicep
การกําหนดโครงสร้างพื้นฐานเป็นโค้ด
บริษัทของคุณออกแบบของเล่นใหม่เพื่อออกสู่ตลาดและของเล่นใหม่ส่วนใหญ่จําเป็นต้องมีแอสเซมบลีหลังจากซื้อ ทีมออกแบบของ บริษัท สร้างคู่มือการเรียนการสอนเพื่อรวมกับของเล่นแต่ละอย่าง คู่มือแต่ละตัวให้รายละเอียดเกี่ยวกับวิธีการประกอบของเล่นอย่างถูกต้อง
คุณสามารถนึกภาพว่าโครงสร้างพื้นฐานเป็นโค้ดเหมือนกับคู่มือคําแนะนําสําหรับโครงสร้างพื้นฐานของคุณ รายละเอียดการกําหนดค่าสิ้นสุดของทรัพยากรของคุณด้วยตนเอง และวิธีการเข้าถึงสถานะการกําหนดค่านั้น
โครงสร้างพื้นฐานเป็นโค้ดคือกระบวนการในการเตรียมโครงสร้างพื้นฐานของคุณโดยอัตโนมัติ ซึ่งใช้ภาษาการเขียนโค้ดเชิงพรรณาและระบบการกําหนดรุ่นที่คล้ายกับสิ่งที่ใช้สําหรับโค้ดต้นฉบับ เมื่อคุณสร้างแอปพลิเคชัน ซอร์สโค้ดของคุณจะสร้างผลลัพธ์เดียวกันในแต่ละครั้งที่คุณคอมไพล์ ในลักษณะที่คล้ายกัน การปรับใช้โครงสร้างพื้นฐานแบบเป็นโค้ดจะเป็นไปโดยอัตโนมัติ สอดคล้อง และสามารถทําซ้ําได้ โครงสร้างพื้นฐานเป็นโค้ดสามารถทําให้การปรับใช้ทรัพยากรโครงสร้างพื้นฐานของคุณเป็นแบบอัตโนมัติ เช่น เครือข่ายเสมือน เครื่องเสมือน แอปพลิเคชัน และที่เก็บข้อมูล
หากคุณจําคู่มือการเรียนการสอนสําหรับของเล่นใหม่ มีหลายวิธีในการเขียนคู่มือการเรียนการสอน ตัวเลือกหนึ่งคือให้รายละเอียดแต่ละขั้นตอนของกระบวนการสร้าง ตัวเลือกอื่นคือการแสดงมุมมองที่กระจายของชิ้นและชิ้นส่วนที่จําเป็นในการประกอบของเล่น ต่อมาในหน่วยนี้ คุณจะได้เรียนรู้เกี่ยวกับความแตกต่างระหว่างรหัสเชิงคําสั่งและรหัสเชิงประกาศและความสัมพันธ์ระหว่างรหัสดังกล่าวกับคู่มือคําแนะนําของบริษัทของคุณ
เหตุใดจึงใช้โครงสร้างพื้นฐานเป็นโค้ด
การนําโครงสร้างพื้นฐานมาใช้เป็นวิธีการเขียนโค้ดมีประโยชน์มากมายในการเตรียมใช้งานทรัพยากร ด้วยโครงสร้างพื้นฐานเป็นโค้ด คุณสามารถ:
- เพิ่มความมั่นใจในการปรับใช้ของคุณ
- จัดการหลายสภาพแวดล้อม
- เข้าใจทรัพยากรระบบคลาวด์ของคุณให้ดียิ่งขึ้น
เพิ่มความมั่นใจ
หนึ่งในประโยชน์ของการใช้โครงสร้างพื้นฐานเป็นโค้ดคือระดับความเชื่อมั่นที่คุณได้รับจากการปรับใช้ของคุณจากการปรับปรุงความสอดคล้องและการรักษาความปลอดภัย
การรวมกับกระบวนการปัจจุบัน: ถ้าองค์กรของคุณใช้แนวทางปฏิบัติในการพัฒนาซอฟต์แวร์มาตรฐานแล้ว คุณสามารถนํากระบวนการเดียวกันนั้นไปใช้สําหรับการปรับใช้โครงสร้างพื้นฐานของคุณได้ ตัวอย่างเช่น การตรวจสอบโดยเพียร์สามารถช่วยในการตรวจหาปัญหาในการกําหนดค่าที่อาจยากต่อการตรวจหาเมื่อทําการเปลี่ยนแปลงด้วยตนเอง
ความสอดคล้อง: การนําโครงสร้างพื้นฐานมาใช้เป็นแนวทางโค้ดช่วยให้ทีมของคุณติดตามกระบวนการที่กําหนดไว้อย่างดีเพื่อปรับใช้โครงสร้างพื้นฐาน ด้วยการทําตามกระบวนการเหล่านี้ ความรับผิดชอบจะเปลี่ยนจากบุคคลกลุ่มเล็ก ๆ ไปยังกระบวนการและเครื่องมืออัตโนมัติของคุณ โครงสร้างพื้นฐานเป็นโค้ดช่วยลดข้อผิดพลาดของมนุษย์ในการจัดเตรียมทรัพยากรและรับประกันการปรับใช้ที่สอดคล้องกัน
Automated scanned: คุณสามารถสแกนการกําหนดค่า Infrastructure-as-code ด้วยเครื่องมืออัตโนมัติที่สามารถตรวจสอบข้อผิดพลาดในโค้ดได้ การใช้เครื่องมืออัตโนมัติยังสามารถตรวจสอบการเปลี่ยนแปลงที่เสนอเพื่อให้แน่ใจว่ามีการปฏิบัติตามการรักษาความปลอดภัยและแนวทางปฏิบัติด้านประสิทธิภาพ
การจัดการความลับ : โซลูชันจํานวนมากต้องการความลับ เช่น สตริงการเชื่อมต่อ คีย์การเข้ารหัส ข้อมูลลับของไคลเอ็นต์ และใบรับรอง ใน Azure ชุดเก็บคีย์ของ Azure คือบริการที่ใช้เพื่อจัดเก็บข้อมูลลับเหล่านี้ได้อย่างปลอดภัย เครื่องมือที่ใช้โครงสร้างพื้นฐานเป็นโค้ดจํานวนมากสามารถรวมกับ Key Vault เพื่อเข้าถึงความลับเหล่านี้ได้อย่างปลอดภัยในการปรับใช้
ควบคุมการเข้าถึง: ด้วยการปรับใช้โครงสร้างพื้นฐานเป็นโค้ด คุณมีตัวเลือกในการใช้ข้อมูลประจําตัวที่มีการจัดการหรือบัญชีบริการเพื่อจัดเตรียมทรัพยากรโดยอัตโนมัติ กระบวนการนี้ทําให้แน่ใจว่าเฉพาะข้อมูลประจําตัวเหล่านี้เท่านั้นที่สามารถปรับเปลี่ยนทรัพยากรระบบคลาวด์ของคุณได้ นอกจากนี้ยังช่วยป้องกันการกําหนดค่าที่ไม่ถูกต้องที่ปรับใช้กับการผลิต หากจําเป็น คุณสามารถแทนที่กระบวนการนี้ได้โดยใช้บัญชีการเข้าถึงฉุกเฉิน (มักเรียกว่า แบ่งบัญชีกระจก) หรือโดยใช้คุณลักษณะ Microsoft Entra ID Privileged Identity Management
หลีกเลี่ยงการกําหนดค่า : Idempotence เป็นคําที่เกี่ยวข้องกับโครงสร้างพื้นฐานเป็นรหัส เมื่อการดําเนินการเป็นนิจพล นั่นหมายความว่าการดําเนินการให้ผลลัพธ์เดียวกันทุกครั้งที่คุณเรียกใช้ หากคุณเลือกการใช้เครื่องมือที่ใช้การดําเนินการที่มีนิจพล คุณสามารถหลีกเลี่ยงการล่องลอยการกําหนดค่าได้
เป็นตัวอย่างของนิจพล พิจารณาคําสั่ง Azure CLI ต่อไปนี้ คําสั่งสร้างกลุ่มทรัพยากร Azure ที่มีชื่อ storage-resource-group ในภูมิภาคสหรัฐอเมริกาตะวันออก
az group create \
--name storage-resource-group \
--location eastus
ถ้าคุณเรียกใช้คําสั่งนี้เป็นครั้งที่สอง คุณจะได้รับผลลัพธ์เดียวกันที่แน่นอนเนื่องจากคําสั่ง Azure CLI นี้ถูกออกแบบมาเพื่อเป็นนิจพล คุณไม่ได้รับข้อผิดพลาดหรือกลุ่มทรัพยากรที่ซ้ํากัน
เมื่อคุณใช้โครงสร้างพื้นฐานเป็นโค้ด คุณสามารถปรับใช้สภาพแวดล้อมของคุณใหม่ในแต่ละรุ่นของโซลูชันของคุณได้ การเผยแพร่เหล่านี้อาจรวมการเปลี่ยนแปลงการกําหนดค่าขนาดเล็กหรือแม้แต่การอัปเดตที่สําคัญ กระบวนการนี้จะช่วยหลีกเลี่ยงการล่องลอยการกําหนดค่า ถ้ามีการเปลี่ยนแปลงไปยังทรัพยากรโดยไม่ได้ตั้งใจ จะสามารถแก้ไขได้โดยการปรับใช้การกําหนดค่าใหม่ ด้วยการทําตามวิธีนี้ คุณกําลังบันทึกสภาพแวดล้อมของคุณโดยใช้รหัส
จัดการหลายสภาพแวดล้อม
องค์กรจํานวนมากรักษาสภาพแวดล้อมของแอปพลิเคชันไว้หลายรายการ นักพัฒนาในบริษัทของเล่นของคุณอาจมีรหัสแอปพลิเคชันหลายเวอร์ชันที่จัดลําดับขั้นในที่เก็บสําหรับการเผยแพร่ไปยังสภาพแวดล้อมที่แตกต่างกัน สภาพแวดล้อมอาจรวมถึงการพัฒนา การทดสอบ และการผลิต บางองค์กรยังคงรักษาสภาพแวดล้อมการผลิตหลายรายการสําหรับแอปพลิเคชันที่มีการกระจายอยู่ทั่วโลก องค์กรอื่น ๆ เช่น ผู้จัดจําหน่ายซอฟต์แวร์อิสระ (ISV) รักษาสภาพแวดล้อมของผู้เช่าหลายรายสําหรับลูกค้าของพวกเขา
นี่คือบางส่วนของวิธีสําคัญที่โครงสร้างพื้นฐานเป็นโค้ดสามารถช่วยให้คุณจัดการสภาพแวดล้อมของคุณได้:
เตรียมใช้งานสภาพแวดล้อมใหม่: หนึ่งในประโยชน์หลักของการประมวลผลแบบคลาวด์คือความสามารถในการปรับขนาด โครงสร้างพื้นฐานเป็นโค้ดสามารถช่วยให้คุณปรับขนาดไปยังอินสแตนซ์ของแอปพลิเคชันของคุณได้หลายอินสแตนซ์ อินสแตนซ์เหล่านี้สามารถช่วยในช่วงเวลาของการโหลดที่เพิ่มขึ้น หรือคุณสามารถปรับใช้อินสแตนซ์เหล่านี้สําหรับผู้ใช้ในพื้นที่อื่น ๆ ของโลก ความคล่องตัวนี้ยังเป็นประโยชน์เมื่อคุณทดสอบแอปพลิเคชันของคุณ เช่น ระหว่างการทดสอบการเจาะ การทดสอบโหลด และการทดสอบข้อบกพร่อง ด้วยฐานโค้ดที่กําหนดไว้อย่างดี คุณสามารถเตรียมใช้งานสภาพแวดล้อมใหม่เหล่านี้แบบไดนามิกในลักษณะที่สอดคล้องกันได้
สภาพแวดล้อมการไม่สืบพันธุ์: ปัญหาที่พบได้ทั่วไปในองค์กรต้องเผชิญคือ ความแตกต่างระหว่างสภาพแวดล้อมการผลิตและการไม่ผลิตผล เมื่อคุณเตรียมใช้งานทรัพยากรด้วยตนเองในสภาพแวดล้อมที่แยกต่างหาก อาจเป็นไปได้ว่าการกําหนดค่าสิ้นสุดไม่ตรงกัน ตัวอย่างคือเมื่อคุณปรับใช้คุณลักษณะใหม่กับสภาพแวดล้อมการไม่แสวงหาผลที่แตกต่างจากสภาพแวดล้อมการผลิต อาจเป็นไปได้ว่าคุณลักษณะใหม่ไม่ทํางานตามที่คาดไว้ในสภาพแวดล้อมการผลิตเนื่องจากความแตกต่างระหว่างสองสภาพแวดล้อม การใช้โครงสร้างพื้นฐานเป็นโค้ดสามารถช่วยลดปัญหาเหล่านี้ได้ คุณสามารถใช้ไฟล์การกําหนดค่าเดียวกันสําหรับแต่ละสภาพแวดล้อม แต่ใส่พารามิเตอร์การป้อนข้อมูลที่แตกต่างกันเพื่อสร้างการไม่ซ้ํากัน
การกู้คืนจากภัยพิบัติ: ในบางสถานการณ์ โครงสร้างพื้นฐานในฐานะโค้ดสามารถใช้เป็นส่วนหนึ่งของแผนการกู้คืนข้อมูลจากภัยพิบัติขององค์กรได้ ตัวอย่างเช่น คุณอาจจําเป็นต้องสร้างสภาพแวดล้อมของคุณในภูมิภาคอื่นอีกครั้งเนื่องจากบริการขัดข้อง ด้วยการใช้โครงสร้างพื้นฐานเป็นโค้ด คุณสามารถเตรียมใช้งานอินสแตนซ์ใหม่เพื่อล้มเหลวแทนการปรับใช้และกําหนดค่าใหม่ทั้งหมดด้วยตนเองได้
เข้าใจทรัพยากรระบบคลาวด์ของคุณได้ดียิ่งขึ้น
โครงสร้างพื้นฐานเป็นโค้ดสามารถช่วยให้คุณเข้าใจสถานะของทรัพยากรระบบคลาวด์ของคุณได้ดีขึ้น:
บันทึกการตรวจสอบ: การเปลี่ยนแปลงการกําหนดค่าโครงสร้างพื้นฐานเป็นโค้ดจะถูกควบคุมในลักษณะเดียวกับโค้ดต้นฉบับของแอปพลิเคชัน การเปลี่ยนแปลงเหล่านี้จะถูกติดตามในเครื่องมือของคุณ เช่น ประวัติเวอร์ชันของ Git บันทึกการตรวจสอบนี้หมายความว่าคุณสามารถตรวจสอบรายละเอียดของการเปลี่ยนแปลงแต่ละรายการ ผู้ที่ทําการเปลี่ยนแปลง และเมื่อมีการเปลี่ยนแปลง
คู่มือ: คุณสามารถใช้การกําหนดค่าโครงสร้างพื้นฐานเป็นโค้ดจํานวนมากเพื่อเพิ่มเมตาดาต้า เช่น ข้อคิดเห็น ซึ่งอธิบายวัตถุประสงค์ของโค้ดในการกําหนดค่าของคุณ หากองค์กรของคุณปฏิบัติตามกระบวนการจัดทําเอกสารโค้ดแล้ว ให้พิจารณาการใช้ขั้นตอนเดียวกันนี้กับโค้ดโครงสร้างพื้นฐานของคุณ
ระบบแบบรวม : หลายครั้งเมื่อนักพัฒนากําลังทํางานกับคุณลักษณะใหม่ พวกเขาต้องทําการเปลี่ยนแปลงโค้ดแอปพลิเคชันและโค้ดโครงสร้างพื้นฐาน เมื่อคุณใช้ระบบทั่วไป องค์กรของคุณสามารถทําความเข้าใจความสัมพันธ์ระหว่างแอปพลิเคชันของคุณและโครงสร้างพื้นฐานของคุณได้ดีขึ้น
ความเข้าใจที่ดีขึ้นเกี่ยวกับโครงสร้างพื้นฐานของระบบคลาวด์: เมื่อคุณใช้พอร์ทัล Azure เพื่อเตรียมใช้งานทรัพยากร กระบวนการจํานวนมากจะถูกนามธรรมจากมุมมอง โครงสร้างพื้นฐานเป็นโค้ดสามารถช่วยให้เข้าใจวิธีการทํางานของ Azure และวิธีการแก้ไขปัญหาที่อาจเกิดขึ้นได้ดียิ่งขึ้น ตัวอย่างเช่น เมื่อคุณสร้างเครื่องเสมือนโดยใช้พอร์ทัล Azure ทรัพยากรที่สร้างขึ้นบางอย่างจะถูกนามธรรมจากมุมมอง ดิสก์ที่มีการจัดการและการ์ดอินเทอร์เฟซเครือข่ายจะถูกปรับใช้ในเบื้องหลัง เมื่อคุณปรับใช้เครื่องเสมือนเดียวกันโดยใช้โครงสร้างพื้นฐานเป็นโค้ด คุณสามารถควบคุมทรัพยากรทั้งหมดที่สร้างขึ้นได้
รหัสเชิงประกาศและเชิงประกาศ
คุณสามารถเขียนคู่มือการเรียนการสอนสําหรับแอสเซมบลีของ toy ใหม่ด้วยวิธีต่างๆ เมื่อคุณปรับใช้บริการและโครงสร้างพื้นฐานโดยอัตโนมัติ คุณสามารถใช้สองวิธี: เชิงคําสั่งและเชิงประกาศ
ด้วย โค้ดเชิงคําสั่งคุณจะดําเนินการตามลําดับคําสั่งตามลําดับเฉพาะเพื่อให้ถึงการกําหนดค่าสิ้นสุด กระบวนการนี้จะกําหนดว่ารหัสควรทําอะไรให้สําเร็จ และกําหนดวิธีการทํางานนี้ให้สําเร็จ วิธีการเชิงคําสั่งเหมือนกับคู่มือการเรียนการสอนทีละขั้นตอน
ด้วยรหัสที่เปิดเผย คุณสามารถระบุเฉพาะการกําหนดค่าสิ้นสุดได้ รหัสไม่ได้กําหนดวิธีการทํางานนี้ให้สําเร็จ วิธีการเชิงประกาศเหมือนกับคู่มือการเรียนการสอนมุมมองแบบขยาย
เมื่อคุณเลือกระหว่างการใช้วิธีการเชิงประกาศและวิธีการเชิงประกาศในการเตรียมใช้งานทรัพยากร ให้พิจารณาเครื่องมือที่อาจมีการใช้งานอยู่แล้วในองค์กรของคุณ นอกจากนี้ ให้พิจารณาว่าวิธีการใดที่อาจตรงกับทักษะของคุณเอง
โค้ดเชิงกลาง
ใน Azure วิธีเขียนโค้ดเชิงคําสั่งสามารถทําได้โดยทางโปรแกรมโดยใช้ภาษาการเขียนสคริปต์ เช่น Bash หรือ Azure PowerShell สคริปต์จะดําเนินการชุดของขั้นตอนในการสร้าง แก้ไข และแม้แต่นําทรัพยากรของคุณออก
ตัวอย่างนี้แสดงคําสั่ง Azure CLI สองคําสั่งที่สร้างกลุ่มทรัพยากรและบัญชีเก็บข้อมูล
#!/usr/bin/env bash
az group create \
--name storage-resource-group \
--location eastus
az storage account create \
--name mystorageaccount \
--resource-group storage-resource-group \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot \
--https-only true
คําสั่งแรกจะสร้างกลุ่มทรัพยากรที่ชื่อ storage-resource-group ในภูมิภาคสหรัฐอเมริกาตะวันออก คําสั่งที่สองสร้างบัญชีเก็บข้อมูลชื่อ mystorageaccount ในกลุ่มทรัพยากร storage-resource-group ที่ถูกสร้างขึ้นในคําสั่งแรก คําสั่งที่สองยังกําหนดค่าคุณสมบัติบางอย่างสําหรับบัญชีเก็บข้อมูล รวมถึงชนิดของบัญชีที่เก็บข้อมูลและระดับการเข้าถึง
คุณสามารถใช้วิธีการเชิงคําสั่งในการจัดเตรียมทรัพยากรโดยอัตโนมัติเต็มรูปแบบ แต่วิธีการนี้มีข้อเสียบางอย่าง เมื่อสถาปัตยกรรมของคุณเติบโตขึ้น สคริปต์อาจซับซ้อนในการจัดการ คําสั่งอาจมีการอัปเดตหรือเลิกใช้แล้วได้ ซึ่งจําเป็นต้องมีการตรวจสอบสคริปต์ที่มีอยู่
รหัสเชิงประกาศ
ใน Azure คุณสามารถทําแนวทางโค้ดที่ประกาศได้โดยใช้เทมเพลต มีเทมเพลตหลายชนิดที่พร้อมใช้งาน รวมถึง:
- JSON
- Bicep
- Ansible, โดย RedHat
- Terraform โดย HashiCorp
โน้ต
โมดูลนี้มุ่งเน้นไปที่การใช้เทมเพลต Bicep
ดูตัวอย่างต่อไปนี้ของเทมเพลต Bicep ที่กําหนดค่าบัญชีเก็บข้อมูล การกําหนดค่าของบัญชีเก็บข้อมูลตรงกับตัวอย่าง Azure CLI
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: 'mystorageaccount'
location: 'eastus'
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
supportsHttpsTrafficOnly: true
}
}
ส่วนทรัพยากรจะกําหนดการกําหนดค่าบัญชีเก็บข้อมูล ส่วนนี้ประกอบด้วยชื่อ ตําแหน่งที่ตั้ง และคุณสมบัติของบัญชีเก็บข้อมูล รวมถึง SKU และชนิดของบัญชี
คุณอาจสังเกตเห็นว่าเทมเพลต Bicep ไม่ได้ระบุวิธีการปรับใช้บัญชีเก็บข้อมูล ซึ่งระบุลักษณะของบัญชีที่เก็บข้อมูลเท่านั้น ขั้นตอนจริงๆ ที่ดําเนินการอยู่เบื้องหลังเพื่อสร้างบัญชีที่เก็บข้อมูลนี้ หรืออัปเดตเพื่อให้ตรงกับข้อกําหนดที่เหลืออยู่สําหรับ Azure เพื่อตัดสินใจ