ทำความเข้าใจเครื่องมือ IaC: Cloudformation กับ Terraform
เผยแพร่แล้ว: 2022-03-10AWS CloudFormation และ Terraform – ไม่แน่ใจว่าจะเลือกอันไหนดี? บทความนี้จะช่วยให้คุณตัดสินใจได้อย่างชาญฉลาด
Cloud Computing ได้ปฏิวัติโลกของ DevOps มันไม่ใช่แค่คำศัพท์อีกต่อไป อยู่ที่นี่และอยู่ที่นี่เพื่อเปลี่ยนวิธีที่เราพัฒนาและบำรุงรักษาแอปพลิเคชันของเรา แม้ว่าจะมีเหตุผลมากมายว่าทำไมคุณจึงควรใช้การประมวลผลแบบคลาวด์สำหรับธุรกิจทุกขนาด แต่ก็มีข้อจำกัดเล็กน้อย แต่คุณต้องจัดเตรียมโครงสร้างพื้นฐานของคุณด้วยตนเอง
คุณต้องไปที่คอนโซลของผู้ให้บริการคลาวด์ของคุณและบอกพวกเขาว่าคุณต้องการอะไร วิธีนี้ใช้ได้ผลดีสำหรับกรณีการใช้งานขนาดเล็ก แต่ถ้าคุณมีคนที่แตกต่างกันที่ทำการเปลี่ยนแปลงการกำหนดค่าในคอนโซล คุณอาจลงเอยด้วยโครงสร้างพื้นฐานที่ซับซ้อนมากซึ่งจะยากขึ้นและยากขึ้นในการบำรุงรักษาเท่านั้น ไม่มีวิธีที่มีประสิทธิภาพในการทำงานร่วมกันหรือติดตามการเปลี่ยนแปลงของโครงสร้างพื้นฐานในระบบคลาวด์ ก็มีอยู่จริง โครงสร้างพื้นฐานเป็นรหัส
โครงสร้างพื้นฐานเป็นรหัสเป็นคำศัพท์ที่นิยมมากในการประมวลผลแบบคลาวด์ เป็นกระบวนการในการจัดการโครงสร้างพื้นฐานด้านไอทีของคุณโดยใช้โค้ด ใช่ถูกต้อง แทนที่จะไปที่คอนโซลและทำทุกอย่างด้วยตนเอง โครงสร้างพื้นฐานเป็นรหัส หรือที่เรียกว่า IAAC หรือ IAC ช่วยให้คุณสามารถเขียนไฟล์การกำหนดค่า ซึ่งจะจัดเตรียมโครงสร้างพื้นฐานระบบคลาวด์ของคุณ IAC ให้ประโยชน์แก่เรา เช่น ความสม่ำเสมอ การบำรุงรักษาที่ง่ายและรวดเร็ว และไม่มีที่ว่างสำหรับข้อผิดพลาดของมนุษย์
การใช้ IAC กับ Amazon Web Services
AWS เป็นบริการคลาวด์คอมพิวติ้งชั้นนำของโลก โดยมีส่วนแบ่งการตลาดเป็นสองเท่าเมื่อเทียบกับผู้ให้บริการคลาวด์รายถัดไป มีบริการกว่า 200 รายการบน AWS ที่สามารถรองรับกรณีการใช้งานได้หลายร้อยกรณี
เมื่อเริ่มใช้ IAC กับ AWS คุณมักจะจำกัดตัวเลือกของคุณให้แคบลงเหลือเพียง AWS CloudFormation และเครื่องมือโอเพนซอร์ซ Terraform เมื่อพยายามจะเลือกระหว่างสองสิ่งนี้ การทำความเข้าใจคุณลักษณะมากมายที่เครื่องมือทั้งสองมีให้นั้นอาจเป็นเรื่องยากทีเดียว ในบทความนี้ เราจะมาดูความแตกต่างระหว่าง AWS CloudFormation และ Terraform เพื่อช่วยคุณตัดสินใจว่าเครื่องมือใดเหมาะกับความต้องการของคุณมากกว่า
Terraform กับ AWS CloudFormation: ความแตกต่าง
ความเป็นโมดูล
เมื่อใช้ IAC ในโมดูลองค์กรขนาดใหญ่อาจเป็นปัจจัยสำคัญในการเลือกเครื่องมือที่เหมาะสม
CloudFormation
CloudFormation ไม่มีการสนับสนุนดั้งเดิมสำหรับโมดูล ช่วยให้คุณใช้สิ่งที่เรียกว่า nested stacks เป็นโมดูลได้
ตัวอย่างเช่น คุณสามารถมีการกำหนดค่ามาตรฐานว่าคุณต้องการจัดเตรียมบัคเก็ต S3 ในองค์กรของคุณอย่างไร ดังนั้น คุณจึงสร้างเทมเพลต CloudFormation มาตรฐานที่สร้างบัคเก็ต S3 เมื่อผู้ใช้ปลายทางต้องการสร้างบัคเก็ต S3 พวกเขาสามารถใช้เทมเพลต CloudFormation นี้เป็นสแต็กที่ซ้อนกันและสร้างบัคเก็ต S3 มาตรฐานได้
นอกจากนี้ยังมีบริการที่ไม่ค่อยมีใครรู้จักของ AWS ซึ่งเป็น AWS Service Catalog ที่สามารถช่วยคุณเกี่ยวกับโมดูลาร์ของ AWS CloudFormation ของคุณได้ Service Catalog คือบริการของ AWS ที่ออกแบบมาโดยเฉพาะสำหรับองค์กรที่ต้องการจำกัดขอบเขตของบริการของ AWS เพื่อให้เป็นไปตามข้อกำหนด ความปลอดภัย ต้นทุน หรือข้อกำหนดด้านประสิทธิภาพ และคาดเดาอะไร? AWS Service Catalog ใช้เทมเพลต CloudFormation ในแบ็กเอนด์
ให้เราเข้าใจสิ่งนี้อย่างรวดเร็วด้วยตัวอย่าง ที่ฝากข้อมูล S3 หากใช้ไม่ถูกต้อง อาจเป็นหายนะสำหรับข้อมูลลับของคุณในเร็วๆ นี้ ให้เรายกตัวอย่างเดียวกัน คุณต้องการมีวิธีมาตรฐานของวิธีที่คุณต้องการใช้ S3 ในองค์กรของคุณ ตัวเลือกแรกคือการสร้างเทมเพลตสแต็กที่ซ้อนกัน ซึ่งสามารถใช้ได้ภายในสแต็ก CloudFormation อื่น ๆ และดีพอ ๆ กัน
หากคุณไม่ต้องการให้ผู้ใช้ต้องใช้เทมเพลตมาตรฐานนี้เป็นสแต็กที่ซ้อนกัน คุณสามารถใช้ AWS Service Catalog Service Catalog จะอนุญาตให้ผู้ใช้ใช้เทมเพลตมาตรฐานนี้จาก UI ของคอนโซลและระบุพารามิเตอร์บางอย่างสำหรับการปรับแต่งเล็กน้อย ซึ่งจะช่วยให้คุณสามารถควบคุมวิธีการจัดเตรียมโครงสร้างพื้นฐานในบัญชี AWS ของคุณและป้องกันสถานการณ์ที่ไม่ต้องการได้
Terraform
Terraform มีการรองรับโมดูลดั้งเดิม ช่วยให้คุณสร้างการกำหนดค่ามาตรฐานได้เหมือนกับ AWS CloudFormation และใช้ในการกำหนดค่า Terraform อื่นๆ
เนื่องจาก Terraform เป็นเครื่องมือโอเพนซอร์ซ คุณจึงสามารถค้นหาและใช้โมดูลโอเพ่นซอร์สที่สร้างไว้ล่วงหน้าใน Terraform Registry ได้ คุณยังสามารถสร้างโมดูลของคุณเองด้วยการกำหนดค่าของคุณเอง และโฮสต์โมดูลเหล่านั้นในรีจิสทรีของโมดูลส่วนตัว
โดยส่วนตัวแล้ว ฉันต้องการใช้ Terraform มากกว่า CloudFormation หากโมดูลาร์เป็นข้อกำหนดขนาดใหญ่
การใช้สแต็กที่ซ้อนกันใน CloudFormation นั้นไม่ง่ายเหมือนการใช้โมดูลใน Terraform ปัจจัยหลักคือการส่งผ่านข้อมูลจากเทมเพลต CFN ไปยังสแต็กที่ซ้อนกันนั้นค่อนข้างซับซ้อน
ไม่มีสถานที่มาตรฐานที่สามารถแชร์เทมเพลต CloudFormation คุณมี AWS Service Catalog แต่นั่นเป็นเพียงวิธีการบังคับใช้กฎบางอย่างสำหรับการสร้างโครงสร้างพื้นฐานผ่านคอนโซล เราทุกคนเกี่ยวกับรหัส เมื่อใช้ Service Catalog แม้ว่างานที่ซับซ้อนบางอย่างจะถูกห่อหุ้มด้วยไฟล์ CloudFormation คุณยังต้องดำเนินการด้วยตนเองในการไปที่คอนโซลและระบุพารามิเตอร์เพื่อสร้างโครงสร้างพื้นฐานของคุณ

ในทางกลับกัน Terraform มีวิธีการที่กำหนดไว้ในการสร้าง บำรุงรักษา และแบ่งปันโมดูล คุณสามารถดูข้อกำหนดที่แน่นอนของโมดูลใน Terraform Module Registry และใช้ในไฟล์ terraform ของคุณได้อย่างง่ายดาย
การควบคุมและการกำกับดูแลโครงสร้างพื้นฐาน
หากคุณต้องการจำกัดทรัพยากรที่บุคลากรของคุณสามารถสร้างได้ในบัญชี AWS: ทั้ง AWS CloudFormation และ Terraform มีวิธีการให้คุณทำเช่นนั้น
ให้เราพูดถึง CloudFormation ก่อน CloudFormation ในตัวเองไม่ได้ให้การควบคุมใดๆ เกี่ยวกับวิธีการใช้เทมเพลต แต่คุณสามารถใช้นโยบาย AWS IAM เพื่ออนุญาตให้ผู้ใช้ในบัญชี AWS ของคุณใช้เฉพาะเทมเพลต CloudFormation มาตรฐานสำหรับการสร้างทรัพยากรเท่านั้น ในตัวอย่างบัคเก็ต S3 ของเรา คุณอาจต้องการจำกัดสิทธิ์ "S3 Create" ทั้งหมดสำหรับผู้ใช้ และอนุญาตให้ผู้ใช้สร้างบัคเก็ต S3 จาก AWS Service Catalog หรือ Nested Stacks เท่านั้น
Terraform ให้คุณควบคุมทรัพยากรที่ผู้ใช้สร้างได้โดยใช้ นโยบายเป็นเครื่องมือเข้ารหัส Sentinel Sentinel อนุญาตให้คุณบังคับใช้นโยบายที่ละเอียดและอิงตามตรรกะ เพื่ออนุญาตหรือปฏิเสธการกระทำของผู้ใช้ผ่าน Terraform ตัวอย่างเช่น คุณสามารถปฏิเสธทรัพยากรทั้งหมดที่สร้างบัคเก็ต S3 และอนุญาตให้ผู้ใช้สร้างบัคเก็ต S3 จากโมดูลมาตรฐานเท่านั้น
การจัดการของรัฐ
ทั้ง AWS CloudFormation และ Terraform จำเป็นต้องติดตามทรัพยากรที่ดูแลอยู่
Terraform เก็บสถานะของโครงสร้างพื้นฐานของคุณในไฟล์สถานะ ไฟล์นี้ถูกจัดเก็บในเครื่องโดยค่าเริ่มต้น อย่างไรก็ตาม คุณสามารถจัดเก็บไว้ในแบ็กเอนด์ระยะไกล เช่น S3 และให้ผู้ใช้หลายคนทำการเปลี่ยนแปลงกับโครงสร้างพื้นฐานชุดเดียวกัน
CloudFormation ไม่ได้รักษาไฟล์สถานะ อย่างน้อยก็ไม่ใช่ไฟล์ที่เราสามารถมองเห็นได้ CloudFormation เป็นบริการที่มีการจัดการ ดังนั้นจะทำหน้าที่บำรุงรักษาสถานะและตรวจสอบในเบื้องหลังทั้งหมด
ทั้ง AWS CloudFormation และ Terraform มีวิธีให้คุณตรวจสอบว่าจะมีการเปลี่ยนแปลงใดบ้างกับโครงสร้างพื้นฐานของคุณ ใน Terraform คุณสามารถเรียกใช้คำสั่ง - "แผนภูมิประเทศ" และวิธีที่ Terraform วางแผนที่จะใช้การเปลี่ยนแปลงการกำหนดค่าของคุณ ใน CloudFormation ผู้ใช้สามารถดูข้อมูลนี้ผ่าน Change Sets
ภาษา
Terraform ใช้ภาษาการกำหนดค่า HashiCorp, HCL ซึ่งเป็นภาษาที่สร้างโดย HashiCorp คล้ายกับ JSON มากที่มีคุณสมบัติและความสามารถในตัวเพิ่มเติม
เทมเพลต CloudFormation เขียนในรูปแบบ YAML หรือ JSON
การบันทึกและการย้อนกลับ
ทั้ง AWS CloudFormation และ Terraform มีความสามารถในการบันทึกที่ดี จากประสบการณ์ของผม ข้อผิดพลาดและปัญหาตรงไปตรงมา (โดยส่วนใหญ่)
CloudFormation: ตามค่าเริ่มต้น CloudFormation จะย้อนกลับการเปลี่ยนแปลงทั้งหมดของคุณในกรณีที่การเปลี่ยนแปลงสแต็กล้มเหลว นี่เป็นคุณลักษณะที่ดีและสามารถปิดใช้งานเพื่อวัตถุประสงค์ในการดีบักได้
Terraform: Terraform จะไม่ย้อนกลับการเปลี่ยนแปลงของคุณโดยอัตโนมัติในกรณีที่ล้มเหลว นี่ไม่ใช่ปัญหาเพราะคุณสามารถเรียกใช้คำสั่ง terraform destroy เพื่อลบการกำหนดค่าแบบ half-provision และรีสตาร์ท Terraform อีกครั้ง
ขอบเขต
Terraform ไม่จำกัดเพียง AWS Cloud ปัจจัยที่สำคัญที่สุดในการเลือกระหว่าง Terraform และ CloudFormation คือ Terraform รองรับผู้ให้บริการและบริการคลาวด์อื่นๆ
ดังนั้น หากคุณวางแผนที่จะใช้ IAC สำหรับหลายแพลตฟอร์มระบบคลาวด์ Terraform คือตัวเลือกที่ดีที่สุดของคุณ CloudFormation แม้จะเป็นเครื่องมือที่ทรงพลัง แต่ก็จำกัดอยู่ที่ AWS เท่านั้น ด้วยการใช้ Terraform คุณสามารถตั้งค่าโครงสร้างพื้นฐานและปรับใช้แอปพลิเคชันของคุณในหลายแพลตฟอร์มคลาวด์ ซึ่งจะทำให้แอปพลิเคชันของคุณพร้อมใช้งานและมีประสิทธิภาพมากขึ้น
รองรับคุณสมบัติ
โดยปกติ เมื่อ AWS เปิดตัวบริการและฟีเจอร์ใหม่ๆ CloudFormation จะได้รับการอัปเดตก่อน Terraform เนื่องจากเป็นบริการของ AWS ณ ตอนนี้ เครื่องมือทั้งสองครอบคลุมบริการและคุณลักษณะส่วนใหญ่ของบริการเหล่านี้ นี่อาจเป็นข้อเสียเล็กน้อยของการใช้ Terraform แต่เรามีวิธีแก้ไข
ยังมีความเป็นไปได้สำหรับคุณที่จะสร้าง CloudFormation stack ภายในโค้ด Terraform ของคุณ ดังนั้น หากคุณใช้ Terraform และไม่มีคุณลักษณะ คุณสามารถตั้งค่า CloudFormation stack ภายในโค้ด Terraform ได้ชั่วคราว
การสนับสนุนทางเทคนิค
แผนการสนับสนุนทางเทคนิคของ AWS แบบชำระเงินยังครอบคลุมการสนับสนุน CloudFormation ด้วย
HashiCorp ได้จ่ายเงินสำหรับแผนการสนับสนุนทางเทคนิคบน Terraform เช่นกัน
บทสรุป
ทั้ง AWS CloudFormation และ Terraform เป็นเครื่องมือที่ทรงพลังและได้รับการพัฒนาอย่างเต็มที่ ความแตกต่างข้างต้นจะช่วยให้คุณมีข้อมูลประกอบการตัดสินใจเลือกเครื่องมือตามความต้องการของคุณ ตามคำแนะนำส่วนตัว หากคุณวางแผนที่จะใช้หลายแพลตฟอร์มคลาวด์ในอนาคตหรือกำลังใช้หลายคลาวด์ คุณควรใช้ Terraform เป็นร้านค้าครบวงจรสำหรับทุกความต้องการของคุณ หากคุณกำลังมองหาเครื่องมือ IAC สำหรับ AWS ทั้ง AWS CloudFormation และ Terraform เป็นเกมที่ยุติธรรม
หากคุณสนใจที่จะเรียนรู้ Terraform โปรดดูหลักสูตรออนไลน์เหล่านี้