Cloudformation / Serverless vs Terraform ใน AWS
ฉันต้องการเข้าใจความจำเป็นของเครื่องมือเช่น Terraform เมื่อเรามีเทมเพลต Cloudformation และสามารถสร้าง / อัปเดตบริการ AWS ทั้งหมดได้ด้วยสิ่งนั้นจุดสำคัญในการใช้บริการเช่น Terraform คืออะไร กรุณาแนะนำ.
คำตอบ
CloudFormation (CFN) และ Terraform (CF) ต่างก็เป็นเครื่องมือพัฒนาโครงสร้างพื้นฐานเป็นรหัส (IaC)
อย่างไรก็ตามCFN มีไว้สำหรับ AWSเท่านั้น คุณไม่สามารถใช้กับ Azure, GCP หรือสิ่งอื่นใดนอกระบบนิเวศของ AWS ในทางตรงกันข้ามTF เป็นเมฆที่ไม่เชื่อเรื่องพระเจ้า คุณสามารถใช้งานได้กับผู้ให้บริการคลาวด์หลายรายเท่านั้น แต่ยังทำงานร่วมกับผลิตภัณฑ์ที่ไม่ใช่ระบบคลาวด์เช่นนักเทียบท่าฐานข้อมูลต่างๆและแม้แต่โดมิโนพิซซ่าก็ได้หากคุณต้องการ
ดังนั้นข้อได้เปรียบหลักของ TF คือเมื่อคุณเรียนรู้เพียงครั้งเดียวคุณสามารถนำไปใช้กับผู้ให้บริการคลาวด์หลายรายได้ CFN มีประโยชน์ใน AWS เท่านั้นและเมื่อคุณหยุดใช้ CFN คุณต้องเรียนรู้สิ่งใหม่เพื่อทำงานกับคลาวด์อื่น ๆ
นอกจากนี้ยังมีความแตกต่างในการทำงานของ TF และ CFN พวกเขาทั้งสองมีจุดแข็งและวันหยุดสุดสัปดาห์ ตัวอย่างเช่น:
เมื่อคุณปรับใช้โดยใช้ CFN ทรัพยากรทั้งหมดจะพร้อมให้ดูในตำแหน่งศูนย์กลางเดียวใน AWS พร้อมกับซอร์สโค้ดของเทมเพลต ในขณะที่ TF ไม่มีสถานที่ดังกล่าว หากคุณลงชื่อเข้าใช้คอนโซล AWS คุณจะไม่รู้ว่าอะไรถูกสร้างขึ้นโดย TF ใช้ซอร์สโค้ดอะไร ฯลฯ
TF มีลูปและโครงสร้างข้อมูลที่ซับซ้อนและเงื่อนไขในขณะที่ CFN ไม่มี
CFN มีนโยบายการสร้างและนโยบายการอัปเดต TF ไม่มี
คุณสามารถควบคุมการเข้าถึง CFN โดยใช้นโยบาย CFN และนโยบาย IAM คุณไม่สามารถทำเช่นเดียวกันกับ TF ได้เนื่องจาก "มีชีวิต" อยู่นอก AWS
มีสาเหตุสองสามประการที่คุณอาจเลือก Terraform ผ่าน CloudFormation:
- ผู้ขายไม่เชื่อเรื่องพระเจ้า:อาจมีจุดในอนาคตที่คุณต้องย้ายโครงสร้างพื้นฐานระบบคลาวด์ของคุณ อาจเกิดจากสาเหตุหลายประการ (เช่นค่าใช้จ่ายการปฏิบัติตามกฎข้อบังคับ ฯลฯ ) ด้วย Terraform คุณยังคงสามารถใช้เครื่องมือเดียวกันเพื่อปรับใช้โครงสร้างพื้นฐานใหม่ได้ ด้วยการใช้โมดูล Terraform อย่างชาญฉลาดคุณยังสามารถปล่อยให้โครงสร้างพื้นฐานส่วนใหญ่เป็นที่เก็บโค้ดได้อย่างแนบเนียน
- การสนับสนุนเครื่องมืออื่น ๆ :สิ่งนี้สร้างขึ้นเล็กน้อยในจุดก่อนหน้านี้ แต่ Terraform สามารถปรับใช้งานได้มากกว่าทรัพยากร AWS ตัวอย่างเช่นคุณสามารถใช้ Terraform เพื่อจัดเตรียมการปรับใช้เครื่อง EC2 ที่กำหนดค่าด้วย Ansible แล้ว หรือคุณสามารถใช้ Terraform เพื่อปรับใช้แอปพลิเคชันที่ด้านบนของคลัสเตอร์ Kubernetes แม้ว่า CloudFormation จะรองรับทรัพยากรที่กำหนดเองผ่านการสร้าง Lambdas แบบกำหนดเอง แต่ก็มีงานที่ต้องดูแลรักษาค่อนข้างมาก
- ระบบนิเวศที่กว้างขึ้น:เนื่องจากลักษณะโอเพนซอร์สของ Terraform มีระบบนิเวศน์ขนาดใหญ่ของเครื่องมือที่ช่วยคุณแก้ปัญหาทุกประเภทเช่นการทดสอบโครงสร้างพื้นฐานเป็นรหัสหรือการสร้างให้สอดคล้องกันอย่างต่อเนื่อง
- เป็นภาษาที่ดีกว่า: โดยส่วนตัวแล้วฉันคิดว่า Terraform เป็นวิธีที่เหมาะกับโครงสร้างพื้นฐานเป็น Code มากกว่า CloudFormation Terraform มีความยืดหยุ่นในการสร้างภาษา (HCL) มากขึ้นและระบบโมดูลของพวกเขาช่วยให้สามารถประกอบได้มากขึ้นจากนั้นสิ่งที่สามารถทำได้ใน CloudFormation