弹性Beanstalk和CloudFormation在.NET项目中有什么区别?

166

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

当我查看使用工具包将.NET应用程序部署到AWS的教程时,我注意到有使用Elastic Beanstalk和CloudFormation 部署的教程。这两者之间有什么区别?

据我所知,它们似乎都基本上在做同一件事情-使您更容易将应用程序部署到AWS云(设置EC2实例、负载均衡器、自动扩展等)。我尝试阅读它们的相关资料,但似乎只能得到一堆听起来相似的流行语,让我感到困惑。我甚至在AWS网站上找到了一个关于这个问题的FAQ,但我还是不太明白。

我应该使用其中一个吗?还是两个都需要使用?

10个回答

302

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

Elastic Beanstalk是AWS IaaS服务之上的类似PaaS的层,它抽象了底层的EC2实例、弹性负载均衡器、自动扩展组等。这使得开发人员能够更轻松地将他们的应用程序快速部署到AWS上,而不需要处理所有的系统事务。它与其他PaaS产品(如Heroku、EngineYard、Google App Engine等)非常相似。使用Elastic Beanstalk,您不需要理解任何底层的魔术工作原理。

另一方面,CloudFormation并不会自动执行任何操作。它只是一种定义部署所需资源的方法,使用一个大型的JSON/YAML文件。因此,CloudFormation模板可能会创建两个Elastic Beanstalk环境(生产和分阶段),几个ElasticCache集群,一个DynamoDB表,以及Route53中正确的DNS。然后我将上传这个模板到AWS,走开,45分钟后一切都准备就绪。由于它只是一个纯文本的JSON/YAML文件,我可以将其放入我的源代码控制中,这提供了一种很好的方式来对我的应用程序部署进行版本控制。它还确保我有一个可重复使用的“已知良好”的配置,可以快速地在不同区域部署。


51
FYI: "EBS" 指的是名为 "弹性块存储" 的 AWS 服务。我认为你想说的是 "弹性 Beanstalk" 而不是 "EBS"。 - awhie29urh2
2
我认为他们使用了自动化的Cloud Formation模板来创建您所创建的应用程序的Elastic Beanstalk环境 - .Net或其他... FWIW - codeputer

89

如果您想快速部署一个标准的.NET Web应用程序,Elastic Beanstalk是适合您的服务。

App Services Comparison Graphic

AWS CloudFormation: "基于模板的资源管理"

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

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

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

AWS Elastic Beanstalk:“轻松创建Web应用程序”

AWS Elastic Beanstalk是一个易于使用的服务,用于部署和扩展使用Java, .NET, PHP, Node.js, Python, Ruby, GoDocker开发的Web应用程序和服务。它可以在熟悉的服务器上运行,例如Apache、Nginx、Passenger和IIS。您只需上传代码,Elastic Beanstalk会自动处理部署,从容量预配、负载平衡、自动扩展到应用程序健康监控。
Elastic Beanstalk(EB)是一种更高级别的托管“平台即服务”(PaaS),用于托管Web应用程序,类似于Heroku。与直接处理低级AWS资源不同,EB提供了一个完全托管的平台,在此您可以使用Web界面创建应用程序环境,选择应用程序使用的平台,创建和上传源包,然后EB处理其余部分。

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

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

结论

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

如果您:

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

那么,直接使用CloudFormation,避免Elastic Beanstalk的额外配置层。


18

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

Elastic Beanstalk使用云形成模板和脚本来:1.创建负载均衡器和自动缩放组,2.将代码复制到S3中,3.引导Ec2实例从S3下载并部署代码。

云形成不像EB那样易于使用,但它更加强大,因为您可以创建除EC2实例之外的资源,控制如何使用cfn-init脚本等。


11

还有其他值得注意的差异。Elastic Beanstalk旨在作为单个应用程序的容器。我有一组多个网站和服务,但发现使用Beanstalk难以部署多个网站,并在几次尝试后被AWS帮助建议在这种情况下使用CloudFormation,因为它具有额外的灵活性。 这里有一篇非常有用的文章,介绍了如何引导AWS CloudFormation并更新运行中的站点(点击这里),比AWS页面更清晰易懂。仍在尝试弄清楚我们是否可以从VS直接部署到存储在S3上的CloudFormation模板,并像Beanstalk一样自动更新...


3
这些服务旨在相互补充。AWS Elastic Beanstalk 提供了一个环境,便于在云中部署和运行应用程序。它与开发者工具集成,并为您提供一站式体验,管理应用程序的生命周期。AWS CloudFormation 是一个方便的预配机制,可用于广泛的 AWS 和第三方资源。它支持许多不同类型应用程序的基础架构需求,例如现有企业应用程序、传统应用程序、使用各种 AWS 资源和基于容器的解决方案(包括使用 AWS Elastic Beanstalk 构建的解决方案)。
AWS CloudFormation 支持 Elastic Beanstalk 应用程序环境作为 AWS 资源类型之一。这使您能够创建和管理 AWS Elastic Beanstalk 托管的应用程序及 RDS 数据库以存储应用程序数据。除了 RDS 实例外,任何其他受支持的 AWS 资源也可以被添加到该组中。

3

这两个都是用于基础设施的配置,但它们的方法不同。

Beanstalk: 其起点是代码。我有一个Node.js代码,希望上传并运行它,请为我配置基础设施。(PaaS) 平台即服务

CloudFormation: 其起点是基础设施。请创建一个EC2实例,一个负载均衡器,安全组等等,以便我可以将我的Node.js代码上传到其中。基础设施即代码 (IaC)。


2

Elastic Beanstalk可以自动处理部署,包括容量预配、负载均衡、自动扩展和应用程序健康监控,这些都是基于您上传到它的代码。而CloudFormation是一种自动化的预置引擎,旨在通过JSON脚本部署整个云环境。


0

Beanstack 在内部使用 CloudFormation


非常低质量的答案!!可以说是评论!! - Sobhan
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0
Beanstalk:为开发人员提供了仅管理代码而不是系统的能力。
Cloud Formation:简化并使系统工程师的工作更加轻松。
如果开发人员或开发团队正在寻找快速的MVP测试,最好的选择是使用Beanstalk进行快速部署并进行检查。
当进行AWS迁移时,系统工程师将参与资源配置,并且Cloud Formation将提供更精细的控制。

-1

Beanstalk - 对软件开发人员非常有帮助。

例子:你想快速启动电脑并运行应用程序。你不会单独购买电脑配件(硬盘、内存、处理器)。你会购买一个整个CPU或所需配置的笔记本电脑。你不关心它内部如何运行,因为你只想让你的应用程序为你运行。Beanstalk为你提供了这个一切准备就绪的功能,无需担心。

Cloudformation - 对系统工程师/硬件非常有帮助。

例子:你想组装数百台电脑并将其交给开发人员,那么你可以只提供一个物品清单,由零售商为你组装电脑,而不是组装那么多电脑。同样,创建一个模板并将其发送到Cloudformation,它将毫不费力地完成你的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接