153

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

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

据我所知,他们似乎本质上都在做同样的事情——让您的应用程序更容易部署到 AWS 云(设置 EC2 实例、负载均衡器、自动扩展等)。我已经尝试阅读它们,但除了一堆对我来说听起来相同的流行语之外,我似乎什么也找不到。我什至在 AWS 网站上找到了一个应该回答这个确切问题的常见问题解答,但我不太明白。

我应该使用其中一种吗?两个都?

4

7 回答 7

282

他们其实很不一样。Elastic Beanstalk 旨在让开发人员的生活更轻松。CloudFormation 旨在让系统工程师的生活更轻松。

Elastic Beanstalk 是 AWS 的 IaaS 服务之上的一个类似 PaaS 的层,它抽象出底层的 EC2 实例、弹性负载均衡器、自动扩展组等。这让不想打交道的开发人员更容易与所有系统的东西,让他们的应用程序快速部署在 AWS 上。它与 Heroku、EngineYard、Google App Engine 等其他 PaaS 产品非常相似。使用 Elastic Beanstalk,您无需了解任何底层魔法是如何工作的。

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

于 2013-01-20T21:53:02.430 回答
81

为了快速开始部署标准 .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) 是一种更高级别的托管“平台即服务”(PaaS),用于托管 Web 应用程序,其范围类似于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 的配置层。

于 2017-01-04T17:45:46.690 回答
18

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 脚本的方式等。

于 2013-01-20T22:02:07.870 回答
11

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

于 2013-12-23T09:23:39.233 回答
3

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

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

于 2020-02-22T15:01:46.553 回答
2

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

于 2018-01-15T06:15:24.410 回答
0

Beanstalk:使开发人员能够只管理代码而不是系统

Cloud Formation:简化系统工程师并使一切变得更容易

如果开发人员或开发团队正在寻找快速 MVP 测试,最好的选择是使用 Beanstalk 快速部署并进行检查。

当 AWS 迁移发生时,系统工程师将参与配置,而 Cloud Formation 将提供很大帮助并提供更精细的控制。

于 2022-01-10T00:49:25.703 回答