Cloudformation / Serverless vs Terraform ใน AWS

Aug 25 2020

ฉันต้องการเข้าใจความจำเป็นของเครื่องมือเช่น Terraform เมื่อเรามีเทมเพลต Cloudformation และสามารถสร้าง / อัปเดตบริการ AWS ทั้งหมดได้ด้วยสิ่งนั้นจุดสำคัญในการใช้บริการเช่น Terraform คืออะไร กรุณาแนะนำ.

คำตอบ

Marcin Aug 25 2020 at 15:56

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

1 Blokje5 Aug 25 2020 at 15:56

มีสาเหตุสองสามประการที่คุณอาจเลือก Terraform ผ่าน CloudFormation:

  1. ผู้ขายไม่เชื่อเรื่องพระเจ้า:อาจมีจุดในอนาคตที่คุณต้องย้ายโครงสร้างพื้นฐานระบบคลาวด์ของคุณ อาจเกิดจากสาเหตุหลายประการ (เช่นค่าใช้จ่ายการปฏิบัติตามกฎข้อบังคับ ฯลฯ ) ด้วย Terraform คุณยังคงสามารถใช้เครื่องมือเดียวกันเพื่อปรับใช้โครงสร้างพื้นฐานใหม่ได้ ด้วยการใช้โมดูล Terraform อย่างชาญฉลาดคุณยังสามารถปล่อยให้โครงสร้างพื้นฐานส่วนใหญ่เป็นที่เก็บโค้ดได้อย่างแนบเนียน
  2. การสนับสนุนเครื่องมืออื่น ๆ :สิ่งนี้สร้างขึ้นเล็กน้อยในจุดก่อนหน้านี้ แต่ Terraform สามารถปรับใช้งานได้มากกว่าทรัพยากร AWS ตัวอย่างเช่นคุณสามารถใช้ Terraform เพื่อจัดเตรียมการปรับใช้เครื่อง EC2 ที่กำหนดค่าด้วย Ansible แล้ว หรือคุณสามารถใช้ Terraform เพื่อปรับใช้แอปพลิเคชันที่ด้านบนของคลัสเตอร์ Kubernetes แม้ว่า CloudFormation จะรองรับทรัพยากรที่กำหนดเองผ่านการสร้าง Lambdas แบบกำหนดเอง แต่ก็มีงานที่ต้องดูแลรักษาค่อนข้างมาก
  3. ระบบนิเวศที่กว้างขึ้น:เนื่องจากลักษณะโอเพนซอร์สของ Terraform มีระบบนิเวศน์ขนาดใหญ่ของเครื่องมือที่ช่วยคุณแก้ปัญหาทุกประเภทเช่นการทดสอบโครงสร้างพื้นฐานเป็นรหัสหรือการสร้างให้สอดคล้องกันอย่างต่อเนื่อง
  4. เป็นภาษาที่ดีกว่า: โดยส่วนตัวแล้วฉันคิดว่า Terraform เป็นวิธีที่เหมาะกับโครงสร้างพื้นฐานเป็น Code มากกว่า CloudFormation Terraform มีความยืดหยุ่นในการสร้างภาษา (HCL) มากขึ้นและระบบโมดูลของพวกเขาช่วยให้สามารถประกอบได้มากขึ้นจากนั้นสิ่งที่สามารถทำได้ใน CloudFormation