对于.NET项目,Elastic Beanstalk和CloudFormation有什么区别?

时间:2013-01-20 06:05:44

标签: amazon-web-services elastic-beanstalk amazon-cloudformation

我开发了一个.NET MVC应用程序,并开始使用AWS并通过Visual Studio Toolkit进行部署。我已使用工具包中的Elastic Beanstalk选项成功部署了应用程序。

当我阅读使用该工具包将.NET应用程序部署到AWS的教程时,我注意到有部署both Elastic Beanstalk and CloudFormation的教程。这两者有什么区别?

据我所知,他们似乎都在做同样的事情 - 让您更容易将应用程序部署到AWS云(设置EC2实例,负载均衡器,自动扩展等)。我曾经尝试过阅读它们,但除了一堆对我来说听起来像是同样的嗡嗡声外,我似乎无法得到任何东西。我甚至在AWS网站上发现了FAQ,它应该回答这个问题,但我并不理解。

我应该使用其中一种吗?既?

7 个答案:

答案 0 :(得分:163)

他们实际上是非常不同的。 Elastic Beanstalk旨在让开发人员的生活更轻松。 CloudFormation旨在使系统工程师的生活更轻松。

Elastic Beanstalk是AWS的IaaS服务的类似PaaS的层,它抽象出底层的EC2实例,Elastic Load Balancers,自动扩展组等。这使得开发人员更容易,他们不希望成为处理所有系统的东西,以便在AWS上快速部署他们的应用程序。它与Heroku,EngineYard,Google App Engine等其他PaaS产品非常相似。使用Elastic Beanstalk,您无需了解任何底层魔法的工作原理。

另一方面,CloudFormation不会自动执行任何操作。它只是一种在巨大的JSON文件中定义部署所需的所有资源的方法。因此,CloudFormation模板实际上可能会创建两个ElasticBeanstalk环境(生产和登台),一些ElasticCache集群,一个DyanmoDB表,然后在Route53中创建正确的DNS。然后我将此模板上传到AWS,离开,45分钟后,一切准备就绪,等待。由于它只是一个纯文本的JSON文件,我可以将其粘贴在我的源代码控制中,这为我的应用程序部署提供了一种很好的方式。它还确保我有一个可重复的,“已知良好”的配置,我可以快速部署在不同的区域。

答案 1 :(得分:27)

为了快速部署标准.NET Web应用程序, Elastic Beanstalk 是适合您的服务。

App Services Comparison Graphic

AWS CloudFormation:"模板驱动的配置"

  

AWS CloudFormation为开发人员和系统管理员提供了一种简单的方法来创建和管理相关AWS资源的集合,以有序和可预测的方式配置和更新它们。

CloudFormation(CFn)是对现有AWS API的轻量级低级抽象。使用静态JSON / YAML template文档,您声明了一组Resources(例如EC2 instanceS3 bucket),这些对应于AWS API上的CRUD操作。

当您创建CloudFormation堆栈时,CloudFormation会调用相应的API来创建关联的资源,当您删除堆栈时,CloudFormation会调用相应的API来删除它们。支持Most (but not all) AWS APIs

AWS Elastic Beanstalk:" Web Apps轻松"

  

AWS Elastic Beanstalk是一种易于使用的服务,用于部署和扩展使用Java.NETPHPNode.js,{{开发的Web应用程序和服务熟悉的服务器(如Apache,Nginx,Passenger和IIS)上有3}},PythonRubyGo

     

您可以简单地上传代码,Elastic Beanstalk会自动处理部署,从容量配置,负载平衡,自动扩展到应用程序运行状况监控。

Elastic Beanstalk(EB)是一个更高级别的托管平台即服务' (PaaS)用于托管Web应用程序,范围与Docker类似。 EB不是直接处理低级AWS资源,而是提供一个完全托管的平台,您Heroku使用create an application environment,选择您的应用使用web interface,创建并上传{{} 3}},EB处理其余部分。

使用EB,您可以获得platformsource bundle的各种内置功能。<​​/ p>

在幕后,EB使用CloudFormation来创建和管理应用程序的各种AWS资源。您可以通过将monitoring your application environment添加到随应用程序部署的deploying new versions of your application来自定义和扩展默认的EB环境。

结论

如果您的应用程序是使用Elastic Beanstalk支持的平台之一的标准Web层应用程序,并且您希望为您的应用程序提供易于管理,高度可扩展的托管,使用Elastic Beanstalk

如果你:

  • 希望直接管理所有应用程序的AWS资源;
  • 想要管理或大量自定义实例配置或部署过程;
  • 需要使用Elastic Beanstalk不支持的应用程序平台;或
  • 只是不想/需要任何更高级别的Elastic Beanstalk功能

然后直接使用CloudFormation 并避免添加Elastic Beanstalk的配置层。

答案 2 :(得分:11)

Cloud Formation是一种允许您部署AWS服务的服务。您可以创建一个描述所需服务的模板文件。部署该模板时,Cloud Formation会为您创建资源作为“包”。您在模板中定义的所有资源都会一起启动和终止。可以使用Cloud Formation创建的资源类型示例包括:S3,EC2实例,AutoScaling,DynamoDb等。对于EC2,Cloud Formation还使您能够使用“cfn-init”脚本;它可以与模板一起使用来启动实例。

Elastic Beanstalk使用Cloud Formation模板和scipts来:1。创建负载均衡器和Auto Scaling组,2。将代码复制到S3,3。引导Ec2实例从S3下载代码并进行部署。

Cloud Formation并不像EB那样容易使用,但功能更强大,因为您可以创建EC2实例以外的资源,控制cfn-init脚本等等。

答案 3 :(得分:10)

还有其他值得注意的差异。 Elastic beanstalk被设计为单个应用程序的容器。我有一组网站和服务,但发现使用beanstalk部署多个网站非常困难,经过多次尝试,AWS建议在这种情况下使用云形成,因为它具有额外的灵活性。 这是一篇非常有用的文章,关于引导AWS云的形成和更新比AWS页面更清晰的运行站点here。如果我们可以直接从VS部署到存储在S3上的云形成模板并使其像beanstalk一样自动更新,那么仍在尝试解决...

答案 4 :(得分:3)

这些服务旨在相互补充。 AWS Elastic Beanstalk提供了一个可轻松在云中部署和运行应用程序的环境。它与开发人员工具集成在一起,为您提供一站式管理应用程序生命周期的体验。 AWS CloudFormation是一种适用于各种AWS和第三方资源的便捷配置机制。它支持许多不同类型的应用程序的基础架构需求,例如现有企业应用程序,旧版应用程序,使用各种AWS资源构建的应用程序以及基于容器的解决方案(包括使用AWS Elastic Beanstalk构建的应用程序)。

AWS CloudFormation支持Elastic Beanstalk应用程序环境作为AWS资源类型之一。例如,这使您可以创建和管理AWS Elastic Beanstalk托管的应用程序以及用于存储应用程序数据的RDS数据库。除了RDS实例之外,任何其他受支持的AWS资源也可以添加到组中。

答案 5 :(得分:1)

Elastic Beanstalk自动处理部署,从容量配置,负载平衡,自动扩展到基于您上传到的代码的应用程序运行状况监控,其中CloudFormation是一个自动配置引擎,旨在通过JSON部署整个云环境脚本。

答案 6 :(得分:0)

Elastic beantalk根据您上载的代码自动处理代码的部署-从容量配置,负载平衡,自动扩展到应用程序运行状况监视,而cloudFormation是旨在部署整个云环境的自动化引擎通过JSON脚本。