อะไรคือความแตกต่างระหว่าง Elastic Beanstalk และ CloudFormation สำหรับโครงการ. NET


121

ฉันได้พัฒนาแอปพลิเคชัน. NET MVC และเริ่มเล่นกับ AWS และปรับใช้ผ่าน Visual Studio Toolkit ฉันปรับใช้แอปพลิเคชันสำเร็จแล้วโดยใช้ตัวเลือก Elastic Beanstalk ในชุดเครื่องมือ

ขณะที่ผมกำลังจะผ่านบทเรียนสำหรับการปรับใช้แอพพลิเค .NET AWS ด้วยชุดเครื่องมือที่ผมสังเกตเห็นมีแบบฝึกหัดสำหรับการปรับใช้กับทั้งยืดหยุ่นถั่วและ CloudFormation สองตัวนี้ต่างกันอย่างไร?

จากสิ่งที่ฉันบอกได้ดูเหมือนว่าพวกเขาทั้งคู่กำลังทำสิ่งเดียวกันเป็นหลักทำให้ง่ายต่อการปรับใช้แอปพลิเคชันของคุณกับ AWS cloud (การตั้งค่าอินสแตนซ์ EC2 ตัวโหลดบาลานเซอร์การปรับขนาดอัตโนมัติ ฯลฯ ) ฉันได้ลองอ่านทั้งสองเรื่องแล้ว แต่ดูเหมือนจะไม่ได้อะไรเลยนอกจากคำพูดที่ฟังดูคล้ายกับฉัน ฉันพบคำถามที่พบบ่อยในเว็บไซต์ AWS ซึ่งควรจะตอบคำถามนี้ได้อย่างถูกต้อง แต่ฉันก็ไม่เข้าใจจริงๆ

ฉันควรใช้อย่างใดอย่างหนึ่ง? ทั้งสอง?


คำถามนี้ไม่ตรงประเด็นสำหรับ Stackoverflow แต่อาจไม่เหมาะกับ ServerFault เช่นกัน ... ฉันได้เสนอไซต์ใหม่สำหรับคำถามเช่นนี้โปรดปฏิบัติตามหากคุณเห็นด้วย! area51.stackexchange.com/proposals/82757/…
Dan Ciborowski - MSFT

คำตอบ:


212

จริงๆแล้วมันต่างกันมาก Elastic Beanstalk มีวัตถุประสงค์เพื่อทำให้ชีวิตของนักพัฒนาง่ายขึ้น CloudFormation มีวัตถุประสงค์เพื่อทำให้ชีวิตของวิศวกรระบบง่ายขึ้น

Elastic Beanstalk เป็นเลเยอร์ที่เหมือน PaaS ที่อยู่ด้านบนของบริการ IaaS ของ AWS ซึ่งแยกอินสแตนซ์ EC2 พื้นฐาน Elastic Load Balancers กลุ่มปรับขนาดอัตโนมัติ ฯลฯ ทำให้ง่ายขึ้นมากสำหรับนักพัฒนาที่ไม่ต้องการจัดการกับทั้งหมด สิ่งต่างๆของระบบเพื่อให้แอปพลิเคชันติดตั้งใช้งานบน AWS ได้อย่างรวดเร็ว คล้ายกับผลิตภัณฑ์ PaaS อื่น ๆ เช่น Heroku, EngineYard, Google App Engine ฯลฯ ด้วย Elastic Beanstalk คุณไม่จำเป็นต้องเข้าใจว่าเวทมนตร์ที่อยู่เบื้องหลังทำงานอย่างไร

ในทางกลับกัน CloudFormation จะไม่ทำอะไรโดยอัตโนมัติ เป็นเพียงวิธีการกำหนดทรัพยากรทั้งหมดที่จำเป็นสำหรับการปรับใช้ในไฟล์ JSON ขนาดใหญ่ ดังนั้นเทมเพลต CloudFormation อาจสร้างสภาพแวดล้อม ElasticBeanstalk สองแบบ (การผลิตและการจัดเตรียม) คลัสเตอร์ ElasticCache สองรายการตาราง DyanmoDB และ DNS ที่เหมาะสมใน Route53 จากนั้นฉันอัปโหลดเทมเพลตนี้ไปยัง AWS เดินจากไปและ 45 นาทีต่อมาทุกอย่างก็พร้อมและรอ เนื่องจากเป็นเพียงไฟล์ JSON ข้อความธรรมดาฉันจึงสามารถติดมันไว้ในการควบคุมแหล่งที่มาซึ่งเป็นวิธีที่ยอดเยี่ยมในการปรับใช้แอปพลิเคชันของฉัน นอกจากนี้ยังช่วยให้มั่นใจได้ว่าฉันมีการกำหนดค่าที่ "รู้จักดี" ที่ทำซ้ำได้ซึ่งฉันสามารถปรับใช้ในภูมิภาคอื่น


ขอบคุณ! ดูเหมือนว่าตอนนี้ฉันจะติดกับ EBS
kspearrin

37
@xxkylexx FYI: "EBS" หมายถึงบริการ AWS ชื่อ "Elastic Block Store" ฉันคิดว่าคุณหมายถึงพูดว่า "Elastic Beanstalk" แทน "EBS"
ekillaby

2
ฉันคิดว่าพวกเขาใช้และใช้เทมเพลต Cloud Formation แบบอัตโนมัติเพื่อสร้างสภาพแวดล้อม Elastic Beanstalk สำหรับแอปพลิเคชันที่คุณสร้างขึ้น - .Net หรืออะไรก็ได้ ... FWIW
codeputer

51

สำหรับการเริ่มต้นใช้งานเว็บแอปพลิเคชัน. NET มาตรฐานอย่างรวดเร็วElastic Beanstalkเป็นบริการที่เหมาะสำหรับคุณ

กราฟิกเปรียบเทียบบริการแอป

AWS CloudFormation : "Template-Driven Provisioning"

AWS CloudFormation ช่วยให้นักพัฒนาและผู้ดูแลระบบมีวิธีง่ายๆในการสร้างและจัดการชุดทรัพยากร AWS ที่เกี่ยวข้องจัดเตรียมและอัปเดตข้อมูลเหล่านี้อย่างเป็นระเบียบและคาดการณ์ได้

CloudFormation (CFn) เป็นนามธรรมที่มีน้ำหนักเบาและมีระดับต่ำเหนือ AWS API ที่มีอยู่ การใช้เอกสารเทมเพลต JSON / YAML แบบคงที่คุณจะประกาศชุดทรัพยากร (เช่นอินสแตนซ์ EC2หรือที่เก็บข้อมูล S3 ) ที่สอดคล้องกับการดำเนินการ CRUD บน AWS API

เมื่อคุณสร้างสแต็ก CloudFormation CloudFormation จะเรียก API ที่เกี่ยวข้องเพื่อสร้างทรัพยากรที่เกี่ยวข้องและเมื่อคุณลบสแต็ก CloudFormation จะเรียก API ที่เกี่ยวข้องเพื่อลบ AWS API ส่วนใหญ่ (แต่ไม่ใช่ทั้งหมด)รองรับ

AWS Elastic Beanstalk : "เว็บแอปที่ทำได้ง่าย"

AWS Elastic Beanstalk เป็นบริการที่ใช้งานง่ายสำหรับการปรับใช้และการปรับขนาดเว็บแอปพลิเคชันและบริการที่พัฒนาด้วยJava , .NET , PHP , Node.js , Python , Ruby , GoและDockerบนเซิร์ฟเวอร์ที่คุ้นเคยเช่น Apache, Nginx, Passenger และ IIS

คุณสามารถอัปโหลดโค้ดของคุณและ Elastic Beanstalk จะจัดการการปรับใช้โดยอัตโนมัติตั้งแต่การจัดเตรียมความจุการจัดสรรภาระงานการปรับขนาดอัตโนมัติไปจนถึงการตรวจสอบความสมบูรณ์ของแอปพลิเคชัน

ยืดหยุ่นถั่ว (EB) เป็นระดับที่สูงกว่าการจัดการแพลตฟอร์มเป็นบริการ (PaaS) สำหรับการเป็นเจ้าภาพการใช้งานเว็บที่คล้ายกันในขอบเขตที่จะHeroku แทนที่จะจัดการกับทรัพยากร AWS ระดับต่ำโดยตรง EB มีแพลตฟอร์มที่มีการจัดการเต็มรูปแบบซึ่งคุณสร้างสภาพแวดล้อมแอปพลิเคชันโดยใช้เว็บอินเตอร์เฟสเลือกแพลตฟอร์มที่แอปพลิเคชันของคุณใช้สร้างและอัปโหลดชุดแหล่งที่มาและ EB จะจัดการส่วนที่เหลือ

เมื่อใช้ EB คุณจะได้รับคุณสมบัติในตัวทุกประเภทสำหรับการตรวจสอบสภาพแวดล้อมแอปพลิเคชันของคุณและปรับใช้แอปพลิเคชันเวอร์ชันใหม่ของคุณปรับใช้เวอร์ชันใหม่ของแอพลิเคชันของคุณ

ภายใต้ประทุน EB ใช้ CloudFormation เพื่อสร้างและจัดการทรัพยากร AWS ต่างๆของแอปพลิเคชัน คุณสามารถปรับแต่งและขยายสภาพแวดล้อม EB เริ่มต้นได้โดยการเพิ่มทรัพยากร CloudFormationไปยังไฟล์การกำหนดค่า EB ที่ปรับใช้กับแอปพลิเคชันของคุณ

ข้อสรุป

หากแอปพลิเคชันของคุณเป็นแอปพลิเคชันบนเว็บมาตรฐานโดยใช้แพลตฟอร์มที่รองรับของ Elastic Beanstalk และคุณต้องการโฮสติ้งที่จัดการง่ายและปรับขนาดได้สูงสำหรับแอปพลิเคชันของคุณให้ใช้ Elastic Beanstalkใช้ยางยืดฝักถั่ว

ถ้าคุณ:

  • ต้องการจัดการทรัพยากร AWS ทั้งหมดของแอปพลิเคชันของคุณโดยตรง
  • ต้องการจัดการหรือปรับแต่งขั้นตอนการจัดเตรียมหรือปรับใช้อินสแตนซ์ของคุณอย่างหนัก
  • จำเป็นต้องใช้แพลตฟอร์มแอปพลิเคชันที่ Elastic Beanstalk ไม่รองรับ หรือ
  • แค่ไม่ต้องการ / ต้องการคุณสมบัติ Elastic Beanstalk ระดับสูงกว่านี้

จากนั้นใช้ CloudFormation โดยตรงและหลีกเลี่ยงเลเยอร์การกำหนดค่าที่เพิ่มเข้ามาของ Elastic Beanstalk


14

Cloud Formation คือบริการที่ให้คุณปรับใช้บริการ AWS คุณสร้างไฟล์เทมเพลตที่อธิบายบริการที่คุณต้องการ เมื่อคุณปรับใช้เทมเพลตนั้น Cloud Formation จะสร้างทรัพยากรให้คุณเป็น "แพ็คเกจ" ทรัพยากรทั้งหมดที่คุณกำหนดไว้ในเทมเพลตของคุณจะเริ่มต้นและสิ้นสุดพร้อมกัน ตัวอย่างประเภทของทรัพยากรที่สามารถสร้างด้วย Cloud Formation ได้แก่ อินสแตนซ์ S3, EC2, AutoScaling, DynamoDb เป็นต้นสำหรับ EC2 Cloud Formation ยังช่วยให้คุณสามารถใช้ประโยชน์จากสคริปต์ "cfn-init" ได้ ซึ่งสามารถใช้ร่วมกับเทมเพลตเพื่อบู๊ตอินสแตนซ์ของคุณได้

Elastic Beanstalk ใช้เทมเพลต Cloud Formation และ scipts เพื่อ 1. สร้าง Load Balancer และ Auto Scaling Group, 2. คัดลอกโค้ดของคุณไปที่ S3, 3. Bootstrap อินสแตนซ์ Ec2 เพื่อดาวน์โหลดโค้ดจาก S3 และปรับใช้

Cloud Formation ไม่ได้ใช้งานง่ายเหมือน EB แต่มีประสิทธิภาพมากกว่ามากเนื่องจากคุณสามารถสร้างทรัพยากรอื่นที่ไม่ใช่อินสแตนซ์ EC2 ควบคุมวิธีที่สคริปต์ cfn-init และอื่น ๆ


10

มีข้อแตกต่างอื่น ๆ ที่น่าสังเกต ต้นถั่วยืดหยุ่นได้รับการออกแบบให้เป็นคอนเทนเนอร์สำหรับแอปเดียว ฉันมีชุดของเว็บไซต์และบริการหลายแห่ง แต่พบว่ามันยากมากที่จะปรับใช้หลายเว็บไซต์ด้วย beanstalk และได้รับคำแนะนำหลังจากพยายามหลายครั้งโดย AWS ช่วยในการใช้รูปแบบคลาวด์ในสถานการณ์นี้เนื่องจากมีความยืดหยุ่นเป็นพิเศษ มีบทความที่เป็นประโยชน์มากเกี่ยวกับการบูตระบบ AWS cloud และการอัปเดตไซต์ที่ทำงานอยู่ที่นี่ซึ่งชัดเจนกว่าหน้า AWS มาก ยังคงพยายามหาว่าเราสามารถปรับใช้จาก VS ตรงไปยังเทมเพลตการสร้างคลาวด์ที่จัดเก็บไว้ใน S3 และนำไปอัปเดตอัตโนมัติเช่นต้นถั่ว ...


3

บริการเหล่านี้ออกแบบมาเพื่อเสริมซึ่งกันและกัน AWS Elastic Beanstalk จัดเตรียมสภาพแวดล้อมเพื่อปรับใช้และเรียกใช้แอปพลิเคชันในระบบคลาวด์ได้อย่างง่ายดาย รวมเข้ากับเครื่องมือสำหรับนักพัฒนาและมอบประสบการณ์แบบครบวงจรสำหรับคุณในการจัดการวงจรชีวิตของแอปพลิเคชันของคุณ AWS CloudFormation เป็นกลไกการจัดเตรียมที่สะดวกสำหรับ AWS และทรัพยากรบุคคลที่สามที่หลากหลาย รองรับความต้องการโครงสร้างพื้นฐานของแอปพลิเคชันประเภทต่างๆเช่นแอปพลิเคชันระดับองค์กรที่มีอยู่แอปพลิเคชันเดิมแอปพลิเคชันที่สร้างขึ้นโดยใช้ทรัพยากร AWS ที่หลากหลายและโซลูชันที่ใช้คอนเทนเนอร์ (รวมถึงที่สร้างโดยใช้ AWS Elastic Beanstalk)

AWS CloudFormation รองรับสภาพแวดล้อมแอปพลิเคชัน Elastic Beanstalk เป็นประเภททรัพยากร AWS ประเภทหนึ่ง ตัวอย่างเช่นช่วยให้คุณสามารถสร้างและจัดการแอปพลิเคชันที่โฮสต์ AWS Elastic Beanstalk พร้อมกับฐานข้อมูล RDS เพื่อจัดเก็บข้อมูลแอปพลิเคชัน นอกจากอินสแตนซ์ RDS แล้วยังสามารถเพิ่มทรัพยากร AWS อื่น ๆ ที่รองรับลงในกลุ่มได้เช่นกัน


1

Elastic Beanstalk จัดการการปรับใช้โดยอัตโนมัติตั้งแต่การจัดเตรียมความจุการจัดสรรภาระงานการปรับขนาดอัตโนมัติไปจนถึงการตรวจสอบความสมบูรณ์ของแอปพลิเคชันตามรหัสที่คุณอัปโหลดโดยที่ CloudFormation เป็นเครื่องมือจัดเตรียมอัตโนมัติที่ออกแบบมาเพื่อปรับใช้สภาพแวดล้อมคลาวด์ทั้งหมดผ่านสคริปต์ JSON

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.