.NET项目的Elastic Beanstalk和CloudFormation有什么区别?


121

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

在浏览有关使用工具箱将.NET应用程序部署到AWS的教程时,我注意到有一些使用Elastic Beanstalk和CloudFormation进行部署的教程。两者有什么区别?

据我所知,似乎它们本质上都在做相同的事情-使您更轻松地将应用程序部署到AWS云(设置EC2实例,负载均衡器,自动扩展等)。我试图阅读它们,但是我似乎除了一堆听起来像是同一件事的时髦词汇之外什么都没有得到。我什至在AWS网站上找到了一个常见问题解答,应该可以回答这个确切的问题,但我并不十分了解。

我应该使用另一个吗?都?


这个问题与Stackoverflow无关,但是在ServerFault上也可能不太合适...我已经提出了一个新站点来解决这样的问题,如果您同意,请遵循!area51.stackexchange.com/proposals/82757/...
丹Ciborowski - MSFT

Answers:


212

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

Elastic Beanstalk是AWS IaaS服务之上的类似于PaaS的层,可以抽象出基础EC2实例,Elastic Load Balancer,自动伸缩组等。这对于不想与所有人打交道的开发人员来说要容易得多。系统内容,以便将其应用程序快速部署到AWS上。它与其他PaaS产品(例如Heroku,EngineYard,Google App Engine等)非常相似。使用Elastic Beanstalk,您无需了解任何底层魔术的工作原理。

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


谢谢!好像我现在会坚持使用EBS。
kspearrin

37
@xxkylexx仅供参考:“ EBS”是指名为“ Elastic Block Store”的AWS服务。我认为您的意思是说“ Elastic Beanstalk”而不是“ EBS”。
ekillaby

2
我认为他们使用自动化的Cloud Formation模板为您创建的应用程序创建了Beanstalk环境
-.Net

51

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

应用服务比较图

AWS CloudFormation:“模板驱动的配置”

AWS CloudFormation为开发人员和系统管理员提供了一种轻松的方法来创建和管理一系列相关的AWS资源,并以有序且可预测的方式进行调配和更新。

CloudFormation(CFn)是对现有AWS API的轻型低层抽象。使用静态JSON / YAML 模板文档,您声明一组与AWS API上的CRUD操作相对应的资源(例如EC2实例S3存储桶)。

创建CloudFormation堆栈时,CloudFormation调用相应的API来创建关联的资源,而当您删除堆栈时,CloudFormation调用相应的API来删除它们。支持大多数(但不是全部)AWS API

AWS Elastic Beanstalk:“简化Web应用程序”

AWS Elastic Beanstalk是一项易于使用的服务,用于在熟悉的服务器(例如Apache,Nginx,Passenger)上部署和扩展使用Java.NETPHPNode.jsPythonRubyGoDocker开发的Web应用程序和服务。和IIS。

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

Elastic Beanstalk(EB)是用于托管Web应用程序的更高级别的托管“平台即服务”(PaaS),范围类似于Heroku。EB不是直接处理低级AWS资源,而是提供了一个完全托管的平台,您可以在其中使用Web界面创建应用程序环境,选择应用程序使用的平台,创建并上载源包,然后EB处理其余部分。

使用EB,您可以获得用于监视应用程序环境部署应用程序新版本的各种内置功能。

在后台,EB使用CloudFormation创建和管理应用程序的各种AWS资源。您可以通过将CloudFormation资源添加到与应用程序一起部署的EB配置文件中,来自定义和扩展默认EB环境。

结论

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

如果你:

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

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


14

云形成是一项服务,可让您部署AWS服务。您创建一个模板文件,该文件描述所需的服务。部署该模板时,Cloud Formation将为您创建资源作为“包”。您在模板中定义的所有资源将一起启动和终止。可以使用Cloud Formation创建的资源类型的示例有:S3,EC2实例,AutoScaling,DynamoDb等。对于EC2,Cloud Formation还使您能够使用“ cfn-init”脚本;可以与模板结合使用,以引导您的实例。

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

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


10

还有其他差异值得注意。弹性beantalk被设计为单个应用程序的容器。我有一组网站和服务,但是发现使用beantalk部署多个网站非常困难,经过多次尝试,AWS建议在这种情况下使用云形成技术,因为它具有额外的灵活性。在自举AWS云的形成和更新运行的网站那里有一个真正有用的文章在这里那比AWS页面更加清晰。仍在尝试找出是否可以从VS直接部署到S3上存储的云形成模板并使其像beantalk一样自动更新...


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脚本部署整个云环境。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.