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

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

在介绍用工具包将.NET应用程序部署到AWS的教程时,我注意到有一些教程可以用Elastic Beanstalk和CloudFormation进行部署。 这两者有什么区别?

从我所知道的情况来看,似乎他们本质上都在做同样的事情 – 使您更容易将应用程序部署到AWS云(设置EC2实例,负载平衡器,自动扩展等)。 我已经尝试过把它们都读了起来,但是除了一堆对我来说听起来像是同样的事情的嗡嗡声,我似乎无法得到任何东西。 我甚至在AWS网站上发现了一个应该回答这个确切问题的FAQ ,但是我不太明白。

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

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

Elastic Beanstalk是AWS的IaaS服务的顶层PaaS-like层,它抽象出底层的EC2实例,Elastic Load Balancers,自动扩展组等。这使得开发人员不想处理所有系统的东西,让他们的应用程序快速部署在AWS上。 这与其他PaaS产品(如Heroku,EngineYard,Google App Engine等)非常相似。使用Elastic Beanstalk,您无需了解任何基础魔法的作用。

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

还有其他的值得注意的地方。 弹性beanstalk被devise为一个应用程序的容器。 我有一系列的网站和服务,但是发现使用beanstalk部署多个网站非常困难,并且经过多次尝试,AWSbuild议在这种情况下使用云形成,因为它具有额外的灵活性。 这里有一篇非常实用的文章,介绍如何引导AWS云的形成和更新运行网站,这比AWS页面更清晰。 仍然试图解决,如果我们可以从VS部署直接存储在S3上的云形成模板,并得到它自动更新像豆茎…

Cloud Formation是一项可让您部署AWS服务的服务。 您创build一个描述您想要的服务的模板文件。 部署该模板时,Cloud Formation将为您创build资源作为“包”。 您在模板中定义的所有资源都将一起启动并终止。 可以使用Cloud Formation创build的资源types的示例包括:S3,EC2实例,AutoScaling,DynamoDb等。对于EC2,Cloud Formation还使您可以使用“cfn-init”脚本; 这可以与模板一起使用以引导您的实例。

Elastic Beanstalk使用Cloud Formation模板和摘要:1.创buildLoad Balancer和Auto Scaling组,2.将您的代码复制到S3,3.引导Ec2实例以从S3下载代码并部署它。

Cloud Formation不如EB易于使用,但function更强大,因为您可以创build除EC2实例以外的资源,控制cfn-init脚本的方式等。

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

应用程序服务比较graphicshttp://www.allthingsdistributed.comhttp://img.dovov.comapp-svcs-comparison-graphic.png

AWS CloudFormation :“模板驱动configuration”

AWS CloudFormation为开发人员和系统pipe理员提供了一种创build和pipe理相关AWS资源集合的简单方法,以有序且可预测的方式进行configuration和更新。

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

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

AWS Elastic Beanstalk :“易于使用的Web应用程序”

AWS Elastic Beanstalk是一个易于使用的服务,可用于在熟悉的服务器(如Apache,Nginx,Passenger)上部署和扩展使用Java , .NET , PHP , Node.js , Python , Ruby , Go和Docker开发的Web应用程序和服务和IIS。

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

Elastic Beanstalk(EB)是托pipeWeb应用程序的更高级别的托pipe“平台即服务”(PaaS),与Heroku范围类似。 EB不是直接处理底层的AWS资源,而是提供一个完全托pipe的平台,在这个平台上使用Web界面 创build应用程序环境 ,select应用程序使用哪个平台 ,创build和上传源包 ,然后EB处理其余的。

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

EB使用CloudFormation来创build和pipe理应用程序的各种AWS资源。 您可以通过将CloudFormation资源添加到与您的应用程序一起部署的EBconfiguration文件来自定义和扩展默认的EB环境。

结论

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

如果你:

  • 希望直接pipe理所有应用程序的AWS资源;
  • 要pipe理或大量定制实例configuration或部署过程;
  • 需要使用不受Elastic Beanstalk支持的应用程序平台; 要么
  • 只是不想/需要任何更高级别的Elastic Beanstalkfunction

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