Terraform กับ CloudFormation: การเปรียบเทียบโครงสร้างพื้นฐานทั้งสองเป็นข้อเสนอรหัส (2022)
เผยแพร่แล้ว: 2022-04-10โครงสร้างพื้นฐานอย่างโค้ด [IaC] ได้รับความนิยมเพิ่มขึ้นเรื่อยๆ ในช่วงไม่กี่ปีที่ผ่านมา และไม่แปลกใจเลยว่าทำไม IaC หรือที่เรียกว่าโครงสร้างพื้นฐานที่กำหนดโดยซอฟต์แวร์ คือการตั้งค่าไอทีที่นักพัฒนาหรือทีมปฏิบัติการสามารถใช้เพื่อจัดการและจัดหาสแต็คเทคโนโลยีสำหรับแอปพลิเคชันผ่านซอฟต์แวร์โดยอัตโนมัติ
ด้วย IaC ไม่จำเป็นต้องใช้กระบวนการด้วยตนเองเพื่อกำหนดค่าอุปกรณ์ฮาร์ดแวร์และระบบปฏิบัติการแบบแยกส่วน นอกจากนี้ยังเป็นหนึ่งในพื้นฐานของ DevOps ซึ่งช่วยเพิ่มประสิทธิภาพและคุณภาพของงาน เครื่องมือสองอย่างที่ใช้มากที่สุดสำหรับการนำ IaC ไปใช้งานบน AWS คือเครื่องมือโอเพ่นซอร์ส Terraform และ CloudFormation
Terraform คืออะไร?
- Terraform อนุญาตให้คุณกำหนดทรัพยากรภายในองค์กรและบนคลาวด์ในไฟล์การกำหนดค่าที่อ่านได้ ซึ่งคุณสามารถแชร์ แก้ไข และนำกลับมาใช้ใหม่ได้อย่างง่ายดาย

- มีเวิร์กโฟลว์ที่คงทนและสม่ำเสมอในการจัดหาและจัดการโครงสร้างพื้นฐานทั้งหมดของคุณ
- Terraform สามารถจัดการส่วนประกอบระดับต่ำได้ เช่น:
- การคำนวณ
- ทรัพยากรเครือข่าย
- พื้นที่จัดเก็บ
Terraform ทำงานอย่างไร?
- Terraform สามารถสร้างและจัดการทรัพยากรผ่าน Application Programming Interface (API) บนแพลตฟอร์มคลาวด์และบริการต่างๆ
- ผู้ให้บริการทำให้สามารถทำงานร่วมกับแพลตฟอร์มหรือบริการใดๆ ก็ได้ที่มี API ที่เข้าถึงได้
- ชุมชน Terraform ทำงานร่วมกับผู้ให้บริการมากกว่า 1,700 ราย และจัดการบริการและทรัพยากรนับพันประเภท และบริษัทยังคงขยายตัวอย่างต่อเนื่อง
- คุณสามารถค้นหาผู้ให้บริการที่เปิดเผยต่อสาธารณะทั้งหมดได้ที่ Terraform Registry :
- บริการเว็บอเมซอน (AWS)
- Azure, แพลตฟอร์ม Google Cloud (GCP)
- คูเบอร์เนเตส
- เฮลม
- GitHub
- Splunk
- DataDog
เวิร์กโฟลว์ Core Terraform ประกอบด้วยสามขั้นตอน:
- เขียน: กำหนดทรัพยากรของคุณที่สามารถทำงานได้ผ่านบริการและผู้ให้บริการระบบคลาวด์หลายราย
- แผน: Terraform จะรวบรวมแผนปฏิบัติการโดยสรุปโครงสร้างพื้นฐานที่จะสร้าง อัปเดต หรือทำลายตามโครงสร้างพื้นฐานที่มีอยู่และการกำหนดค่าของคุณ
- ใช้: เมื่อได้รับการอนุมัติ Terraform จะดำเนินการตามที่เสนอทั้งหมดตามลำดับที่ถูกต้อง และพิจารณาการพึ่งพาทรัพยากรใดๆ
ทำไมต้อง Terraform?
- จัดการโครงสร้างพื้นฐานใดๆ
Terraform ใช้ แนวทางที่ลบล้างไม่ได้กับโครงสร้างพื้นฐาน เพื่อลดความซับซ้อนในการปรับเปลี่ยนหรืออัปเดตโครงสร้างพื้นฐานและบริการของคุณ นอกจากนี้ยังติดตามโครงสร้างพื้นฐานที่แท้จริงของคุณใน ไฟล์สถานะ ไฟล์นี้จะกำหนดการเปลี่ยนแปลงที่จำเป็นทั้งหมดที่ต้องทำกับโครงสร้างพื้นฐานของคุณ โดยสอดคล้องกับไฟล์การกำหนดค่าของคุณ ไฟล์เหล่านี้อธิบายสถานะสิ้นสุดของโครงสร้างพื้นฐานของคุณ เนื่องจาก Terraform ควบคุมตรรกะพื้นฐาน คุณจึงไม่จำเป็นต้องเขียนคำแนะนำโดยละเอียดเพื่อสร้างทรัพยากร จะสร้างกราฟทรัพยากรที่ควบคุมการพึ่งพาทรัพยากร มันจะสร้างหรือแก้ไขทรัพยากรที่ไม่ขึ้นกับ ช่วยให้คุณติดตามทรัพยากรทั้งหมดของคุณได้อย่างง่ายดาย
- กำหนดค่ามาตรฐาน
Terraform มีประสิทธิภาพสูงเนื่องจากรองรับ โมดูล หรือส่วนประกอบการกำหนดค่าที่นำกลับมาใช้ใหม่ได้ โมดูลนำเสนอวิธีที่ไม่ยุ่งยากในการจัดแพ็คเกจและนำโค้ดกลับมาใช้ใหม่ และเทียบเท่ากับวิธีการหรือฟังก์ชันในภาษาโปรแกรมหรือภาษาสคริปต์ โมดูลถือเป็นอินเทอร์เฟซมาตรฐานเนื่องจากสร้างทรัพยากรโดยการจัดสรรอินพุตและส่งคืนเอาต์พุต สิ่งนี้ทำให้โครงการง่ายขึ้นอย่างมากโดยเพิ่มความสามารถในการอ่านและอนุญาตให้ทีมใช้บล็อกเชิงตรรกะเพื่อจัดระเบียบโครงสร้างพื้นฐาน
ข้อดีอีกประการของโมดูลคือสามารถจัดหาและใช้ร่วมกันในโครงการ Terraform ได้อย่างง่ายดาย โดยทั่วไปแล้วโมดูลจะใช้เป็นส่วนต่อประสานสำหรับการจัดการและสร้างทรัพยากรหลายอย่าง วิธีนี้ช่วยลดจำนวนโค้ดที่ซ้ำกันในโปรเจ็กต์ลงได้อย่างมาก แต่การคัดลอกและวางส่วนของโค้ดไปรอบๆ ในขณะที่เปลี่ยนเฉพาะพารามิเตอร์ที่เลือกไว้เท่านั้นจึงจะซ้ำซากจำเจได้ ด้วยการใช้ตัวแปรอินพุต คุณสามารถปรับแต่งการทำงานของโมดูล และอาจรวมถึงวิธีการติดป้ายกำกับทรัพยากร โมดูล Terraform ยังสามารถส่งคืนเอาต์พุต ซึ่งสามารถทำหน้าที่เป็นอินพุตในโมดูลหรือทรัพยากรต่างๆ
เมื่อใช้งานโครงสร้างพื้นฐานทุกขนาด จะต้องมีส่วนประกอบและการกำหนดค่าจำนวนมากอย่างไม่ต้องสงสัย นั่นอาจเป็นเรื่องยุ่งยากเนื่องจากมีรูปแบบที่ละเอียดอ่อนมากมายภายในโครงสร้างพื้นฐานที่ใช้โดยทีมต่างๆ ภายในองค์กร สิ่งนี้อาจทำให้สิ่งต่าง ๆ ซับซ้อนยิ่งขึ้นเนื่องจากโครงสร้างพื้นฐานอาจครอบคลุมภูมิประเทศที่หลากหลายตั้งแต่ในองค์กรไปจนถึงผู้จำหน่ายระบบคลาวด์จำนวนมาก ด้วยเหตุนี้ การจัดและบำรุงรักษาโครงสร้างพื้นฐานจึงเป็นกระบวนการที่ซับซ้อน

AWS CloudFormation คืออะไร
AWS CloudFormation ช่วยให้ธุรกิจและนักพัฒนามีวิธีง่ายๆ ในการสร้าง AWS ที่เกี่ยวข้องและทรัพยากรอื่นๆ ที่หลากหลาย นักพัฒนาสามารถติดตั้งและอัปเดตฐานข้อมูล คำนวณ และทรัพยากรอื่นๆ ในรูปแบบที่เปิดเผยและตรงไปตรงมา ขจัดความท้าทายในการกำหนด API ทรัพยากรเฉพาะ Cloudformation ยังจัดการวงจรชีวิตของทรัพยากรอย่างสม่ำเสมอ คาดเดาได้ และปลอดภัย นอกจากนี้ยังอนุญาตให้ย้อนกลับโดยอัตโนมัติ การจัดการสถานะอัตโนมัติ และการจัดการทรัพยากรสำหรับบัญชีและภูมิภาคทั้งหมด

CloudFormation ช่วยให้คุณใช้เวลามากขึ้นโดยมุ่งเน้นที่แอปพลิเคชันที่ทำงานใน AWS และใช้เวลาน้อยลงในการจัดการทรัพยากรของคุณ คุณสามารถออกแบบเทมเพลตที่กำหนดทรัพยากร AWS ทั้งหมดที่คุณต้องการ รวมถึงอินสแตนซ์ Amazon EC2 หรืออินสแตนซ์ Amazon RDS DB เป็นต้น CloudFormation จะดูแลการจัดเตรียมและกำหนดค่าทรัพยากรของคุณ นอกจากนี้ยังจัดการการสร้างและกำหนดค่าทรัพยากร AWS และค้นหาลอจิสติกส์การพึ่งพาทั้งหมด
ทำไมต้อง CloudFormation?
- ลดความซับซ้อนของการจัดการโครงสร้างพื้นฐาน
ในการสร้างเว็บแอปพลิเคชันที่ปรับขนาดได้ซึ่งมีฐานข้อมูลแบ็กเอนด์ คุณอาจใช้ฐานข้อมูลเชิงสัมพันธ์ของ Amazon อินสแตนซ์ฐานข้อมูลบริการ หรือกลุ่มการปรับขนาดอัตโนมัติ หลังจากสร้างทรัพยากรด้วยบริการเพื่อจัดเตรียมที่คุณเลือก คุณจะต้องกำหนดค่าให้ทำงานร่วมกัน ขั้นตอนเพิ่มเติมเหล่านี้อาจทำให้ขั้นตอนการสมัครของคุณยุ่งยากและช้าลง CloudFormation ช่วยให้คุณสร้างเทมเพลตหรือแก้ไขเทมเพลตที่มีอยู่ได้ เทมเพลตจะกำหนดทรัพยากรทั้งหมดของคุณและส่วนประกอบทั้งหมด
การใช้เทมเพลตนั้นเพื่อสร้าง CloudFormation stack จะอนุญาตให้บริการควบคุมกลุ่ม Auto Scaling, ตัวโหลดบาลานซ์ และฐานข้อมูลได้อย่างสมบูรณ์ ทรัพยากร AWS ของคุณจะทำงานได้อย่างสมบูรณ์เมื่อสร้างสแตกสำเร็จแล้ว การลบสแต็กนั้นง่าย แต่โปรดจำไว้ว่าการลบสแต็กหมายถึงการลบทรัพยากรทั้งหมดที่มันมีอยู่ โดยรวมแล้ว CloudFormation ทำให้การจัดการคอลเลกชันของทรัพยากรในหน่วยเดียวเป็นประสบการณ์ที่ง่ายดาย
- จำลองโครงสร้างพื้นฐานของคุณอย่างรวดเร็ว
หากแอปพลิเคชันของคุณต้องการความพร้อมใช้งานเพิ่มเติม คุณสามารถทำซ้ำได้ในหลายภูมิภาค เพื่อที่ว่าหากภูมิภาคใดภูมิภาคหนึ่งไม่พร้อมใช้งาน ผู้คนยังสามารถใช้แอปพลิเคชันของคุณที่อื่นได้ พูดง่ายกว่าทำ การจำลองแอปพลิเคชันของคุณอาจเป็นเรื่องยาก เนื่องจากคุณต้องทำซ้ำทรัพยากรของคุณด้วย คุณต้องบันทึกทรัพยากรทั้งหมดที่แอปพลิเคชันของคุณต้องการในขณะที่จัดการและกำหนดค่าทรัพยากรเหล่านั้นในแต่ละภูมิภาค
เทมเพลต CloudFormation นั้นยอดเยี่ยมเพราะคุณสามารถใช้ซ้ำเพื่อสร้างทรัพยากรของคุณอย่างสม่ำเสมอและซ้ำๆ ในการดำเนินการนี้ คุณต้องกำหนดทรัพยากรของคุณหนึ่งครั้ง จากนั้นจึงจัดเตรียมทรัพยากรเหล่านั้นอย่างต่อเนื่องในหลายภูมิภาค CloudFormation มีการปรับตัวอย่างต่อเนื่อง และการอัปเดตล่าสุดและตัวเลือกใหม่ทำให้สามารถสร้างทรัพยากรได้หลายวิธี ซึ่งรวมถึงการใช้ AWS CDK สำหรับการเข้ารหัสในภาษาระดับขั้นสูง การตรวจจับการเบี่ยงเบนของการกำหนดค่า และการนำเข้าทรัพยากรที่มีอยู่ ขณะนี้มี Registry ที่ทำให้สะดวกในการสร้างประเภทที่กำหนดเองซึ่งมีประโยชน์หลักมากมายของ Cloudformation
CloudFormation สี่แนวคิดหลัก
- เทมเพลตคือไฟล์ข้อความรูปแบบ JSON หรือ YAML ที่อธิบายสถานะที่ต้องการของทรัพยากรทั้งหมดที่คุณต้องการเพื่อเรียกใช้แอปพลิเคชันของคุณให้สำเร็จ ประกอบด้วยรายการต่อไปนี้:
- รายการตัวเลือกของพารามิเตอร์เทมเพลต (ค่าอินพุตที่ให้ไว้ ณ เวลาที่สร้างสแต็ก)
- รายการทางเลือกของค่าเอาต์พุต (เช่น URL ที่สมบูรณ์ของเว็บแอปพลิเคชัน)
- รายการตารางข้อมูลทางเลือกจะใช้เพื่อค้นหาค่าการกำหนดค่าคงที่ (เช่น ชื่อ AMI)
- รายการทรัพยากร AWS และค่าการกำหนดค่า
2. รูปแบบไฟล์เทมเพลต หมายเลขเวอร์ชัน
3. สแต็กบังคับใช้และจัดการทรัพยากรทั้งหมดในเทมเพลตของคุณ ซึ่งอนุญาตให้จัดการสถานะและการพึ่งพาของทรัพยากรเหล่านั้นร่วมกัน
4. ชุดการแก้ไขคือการแสดงตัวอย่างการอัปเดตทั้งหมดที่จะดำเนินการโดยการดำเนินการสแต็กเพื่อสร้าง อัปเดต หรือลบทรัพยากร
5. ชุดสแต็กคือกลุ่มของสแต็คที่คุณจัดการพร้อมกันซึ่งสามารถคัดลอกกลุ่มได้