วลี "โครงสร้างพื้นฐานเป็นรหัส" ถูกกล่าวถึงหลายครั้งในช่วงสองสัปดาห์ที่ผ่านมาในบริบทที่แตกต่างกัน ในความเป็นจริงแล้วการมีโครงสร้างพื้นฐานเป็นจรรยาบรรณหมายความว่าอย่างไร
วลี "โครงสร้างพื้นฐานเป็นรหัส" ถูกกล่าวถึงหลายครั้งในช่วงสองสัปดาห์ที่ผ่านมาในบริบทที่แตกต่างกัน ในความเป็นจริงแล้วการมีโครงสร้างพื้นฐานเป็นจรรยาบรรณหมายความว่าอย่างไร
คำตอบ:
TL; DR : โครงสร้างพื้นฐานเป็นรหัสเป็นวิธีการอัตโนมัติและสำรองสภาพแวดล้อมของคุณ ในกรณีที่เหมาะสมหลังจากเกิดภัยพิบัติคุณสามารถคืนค่าโครงสร้างพื้นฐานของคุณได้อย่างเต็มที่และอัตโนมัติโดยการจัดเตรียมทรัพยากรใหม่การกู้คืนการกำหนดค่าจากที่เก็บรหัสและการกู้คืนข้อมูลจากการสำรองข้อมูล
โครงสร้างพื้นฐานเป็นรหัสอาศัยแนวคิดหลักสามประการ:
การดำเนินการอัตโนมัติของการจัดการการกำหนดค่าที่เรียกว่าการกำหนดค่าอัตโนมัติอย่างต่อเนื่องซึ่งเป็นฟิลด์ที่บุกเบิกโดยศาสตราจารย์ มาร์คเบอร์เจส
ที่เก็บรหัสสำหรับการเปลี่ยนแปลงโครงสร้างพื้นฐานที่มีการเปลี่ยนแปลงครั้งแรกจัดทำบันทึกตรวจสอบทดสอบและปรับใช้ผ่านระบบอัตโนมัติ
การจัดเตรียมโครงสร้างพื้นฐานที่มีการจัดการ โครงสร้างพื้นฐานเป็นบริการ (IaaS) ทั้งผ่านCloud Computing , Private หรือ Managed Cloudหรือ Managed Datacenter Services
การจัดการการกำหนดค่าอยู่ในเครื่องมือรุ่นที่ 3 การสร้าง CFEngine เครื่องมือชุดใหม่สำหรับการจัดการการกำหนดค่าอัตโนมัติกำลังถูกปรับใช้อย่างกว้างขวางในขณะนี้ ที่นิยมมากที่สุดตามลำดับตัวอักษรมีเบิ้ล, cfengine, Chef, หุ่นกระบอก PowerShell DSC และ SaltStack แต่ละคนจะมีภาษาในการอธิบายสถานะของโครงสร้างพื้นฐานของคุณ, โมดูลโค้ดเพื่อใช้การเปลี่ยนแปลงเหล่านั้นและให้ความสามารถในการขยายเครื่องมือบางตัวแทนในการดำเนินการผู้ที่อยู่ในเซิร์ฟเวอร์และพื้นที่เก็บข้อมูลกลางของข้อมูล
โดยทั่วไปแล้วพวกเขาจะทำงานในโหมดผลักหรือดึงทั้งการเชื่อมต่อกับเซิร์ฟเวอร์จากที่ตั้งส่วนกลางและดำเนินการเปลี่ยนแปลงจากระยะไกลหรือทำงานบนเซิร์ฟเวอร์แต่ละเครื่องและดึงข้อมูลเกี่ยวกับสถานะจากที่ตั้งส่วนกลางและทั้งในรูปแบบไคลเอนต์ / เซิร์ฟเวอร์หรือกระจาย ทาง
แนวคิดที่สำคัญสำหรับผู้ดูแลระบบหรือวิศวกรความน่าเชื่อถือของเว็บไซต์เพื่อไม่ทำการเปลี่ยนแปลงโดยตรงกับโครงสร้างพื้นฐาน แต่ให้อัตโนมัติจะเปลี่ยนแปลง สิ่งใดก็ตามที่มนุษย์ทำขึ้นด้วยตนเองควรได้รับการพิจารณาว่าเน่าเสียง่ายถูกแก้ไขโดยระบบอัตโนมัติหรือในรูปแบบที่เข้มงวดซึ่งละเมิดความสมบูรณ์ของโครงสร้างพื้นฐานและก่อให้เกิดการทำลายและสร้างส่วนประกอบที่ได้รับผลกระทบ
รหัสพื้นที่เก็บข้อมูลแยกต่างหากจากที่เก็บซอฟต์แวร์จะใช้ในการจัดการการเปลี่ยนแปลงทั้งหมดในโครงสร้างพื้นฐานและระบบอัตโนมัติที่เกี่ยวข้อง ควรเก็บไฟล์และแม่แบบการกำหนดค่า Playbooks (Cookbooks) อธิบายกระบวนการเปลี่ยนแปลงที่จะตรวจสอบรหัสการขยายเครื่องมืออัตโนมัติ CM การกำหนดค่าการจัดเตรียมการทดสอบโครงสร้างพื้นฐานและการแจ้งเตือนการทดสอบ Staging / การปรับใช้เอกสารอธิบายด้วยตนเอง (ยังไม่อัตโนมัติ) .
แนวคิดที่สำคัญคือการจัดทำบทวิจารณ์เพียร์สำหรับการเปลี่ยนแปลงเพื่อให้มีการบันทึกการเปลี่ยนแปลงทั้งหมดและความสามารถในการย้อนกลับสู่สถานะก่อนหน้าโดยอัตโนมัติในกรณีที่ไม่สามารถคาดการณ์ได้และ / หรือปัญหาที่ยังไม่ทดลองความสามารถในการปรับใช้ การเปลี่ยนแปลงโดยไม่มีการเปลี่ยนแปลงที่เกิดจากข้อผิดพลาดของมนุษย์
การจัดการโครงสร้างพื้นฐานทางกายภาพเป็นงานในโลกแห่งความจริงที่เหนือกว่าซอฟต์แวร์และต้องการทักษะที่แตกต่างกันมาก ด้วยความสามารถในการทำให้เลเยอร์นี้ผ่าน Cloud Computing หรือ Managed Datacenter คุณจะต้องให้ความสำคัญกับทีมของคุณในส่วนของการจัดการโครงสร้างพื้นฐานที่เพิ่มมูลค่าทางธุรกิจ
ในขณะที่ Cloud Computing นำเสนอวิธีการเริ่มต้นและปรับขนาดอย่างรวดเร็วในระยะต่อมา บริษัท มักจะตระหนักถึงประโยชน์บางประการและแม้แต่การประหยัดที่สำคัญในการเคลื่อนย้ายส่วนต่างๆของโครงสร้างพื้นฐานในศูนย์ข้อมูลของตนเองสำหรับรุ่นไฮบริด การเป็นเจ้าของหรือการเช่าฮาร์ดแวร์ไม่ได้หมายความว่าคุณต้องจ้างคนที่จัดการด้วย ในระดับนี้คุณต้องการศูนย์ข้อมูลที่กระจายอยู่ทั่วโลกและการมีผู้คนที่มีทักษะที่จำเป็นในทุกสถานที่จะมีราคาแพงมาก การบินทั่วโลกช่วยเพิ่มความหน่วงแฝงให้กับการเปลี่ยนแปลงและระดับความไร้ประสิทธิภาพในการปฏิบัติงานซึ่งเป็นอีกเหตุผลหนึ่งที่ทำให้การจัดการศูนย์ข้อมูล
สิ่งที่สำคัญก็คือโครงสร้างพื้นฐานทางกายภาพที่มีการจัดการมักจะถูกลืมหรือมองข้ามแนวคิดแต่ก็สำคัญเช่นกัน แม้ว่าคุณจะมีทุกอย่างอัตโนมัติการกำหนดค่าทั้งหมดเก็บไว้ในที่เก็บรหัสสำรองเว้นแต่คุณจะมีวิธีการจัดเตรียมอย่างรวดเร็วคุณมีคอขวดขนาดใหญ่ซึ่งสามารถลบผลประโยชน์ทั้งหมดที่คุณได้รับจากอีกสองขั้นตอนได้อย่างง่ายดาย.
ก่อนที่จะอธิบายว่ามันคืออะไรให้ฉันพูดคำจำกัดความที่ดีจริงๆตรงจาก Wikipedia :
Infrastructure as Code (IaC) เป็นกระบวนการของการจัดการและการจัดเตรียมโครงสร้างพื้นฐานการคำนวณ (กระบวนการเซิร์ฟเวอร์ที่ไม่มีโลหะเซิร์ฟเวอร์เสมือน ฯลฯ ) และการกำหนดค่าของพวกเขาผ่านไฟล์คำจำกัดความของเครื่องที่ประมวลผลได้มากกว่าการกำหนดค่าฮาร์ดแวร์ทางกายภาพหรือการใช้การกำหนดค่าแบบโต้ตอบ เครื่องมือ
เอาล่ะตอนนี้เรามาดูเครื่องมือ IaC หนึ่งตัว Terraform เพื่อทำความเข้าใจแนวคิดที่ดีกว่า: https://www.terraform.io/
นอกจากนี้นี่คือสิ่งที่ Terraform พูดเกี่ยวกับตัวเอง:
Terraform ช่วยให้คุณสามารถสร้างเปลี่ยนแปลงและปรับปรุงโครงสร้างพื้นฐานการผลิตได้อย่างปลอดภัยและคาดการณ์ได้ มันเป็นเครื่องมือโอเพนซอร์ซที่แปลงรหัส API ให้เป็นไฟล์การกำหนดค่าที่เปิดเผยซึ่งสามารถใช้ร่วมกันระหว่างสมาชิกในทีมโดยถือว่าเป็นโค้ด, แก้ไข, ตรวจสอบและกำหนดเวอร์ชัน
ซึ่งหมายความว่าเราสามารถเขียนรหัสทั้งหมดได้ ซึ่งรวมถึงการสร้างทรัพยากรระบบคลาวด์ (/ infra) เช่นอินสแตนซ์ของเซิร์ฟเวอร์โหลดบาลานเซอร์ ฯลฯ รวมถึงการกำหนดค่าที่สมบูรณ์ (ซึ่งรวมถึงการปรับแต่งการตั้งค่าพื้นฐานการตั้งค่าความปลอดภัยภูมิภาค ฯลฯ ) เป็นรหัสซึ่งสามารถแก้ไขได้ แน่นอนตรวจสอบได้
นี่คือตัวอย่างของรหัส Terraform สำหรับการจัดสรรทรัพยากร AWS:
resource "aws_elb" "frontend" {
name = "frontend-load-balancer"
listener {
instance_port = 8000
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
instances = ["${aws_instance.app.*.id}"]
}
resource "aws_instance" "app" {
count = 5
ami = "ami-408c7f28"
instance_type = "t1.micro"
}
โบนัส PS : นอกจากนี้หนึ่งความต้องการที่จะเข้าใจความแตกต่างระหว่างการจัดเตรียมและประสานเครื่องมือ Devs สร้างความสับสนให้กับผู้อื่นบ่อยครั้งมากและมักจะทำผิดพลาดในการพยายามปรับแต่งและใช้เครื่องมือสำหรับสิ่งที่มันไม่ได้ตั้งใจจะใช้