我开发了一个.NET MVC应用程序,并开始使用AWS并通过Visual Studio Toolkit进行部署 . 我已使用工具包中的Elastic Beanstalk选项成功部署了应用程序 .
当我查看使用工具包将.NET应用程序部署到AWS的教程时,我注意到有一些教程用于使用both Elastic Beanstalk and CloudFormation进行部署 . 这两者有什么区别?
据我所知,看起来他们两者基本上都在做同样的事情 - 更容易将您的应用程序部署到AWS Cloud (设置EC2实例,负载均衡器,自动扩展等) . 我曾经尝试过阅读它们,但除了一堆对我来说听起来像是同样的嗡嗡声之外,我似乎无法得到任何东西 . 我甚至在AWS网站上发现了一个应该回答这个问题的FAQ,但我真的不明白 .
我应该使用其中一个吗?都?
6 回答
他们实际上是非常不同的 . 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文件,我可以将它粘贴在我的源代码控制中,这为我的应用程序部署提供了一种很好的方式 . 它还确保我有一个可重复的,“已知良好”的配置,我可以快速部署在不同的区域 .
为了快速部署标准.NET Web应用程序, Elastic Beanstalk 是适合您的服务 .
AWS CloudFormation:“模板驱动的供应”
CloudFormation(CFn)是对现有AWS API的轻量级低级抽象 . 使用静态JSON / YAML template文档,声明一组对应于AWS API上的CRUD操作的Resources(例如EC2 instance或S3 bucket) .
创建CloudFormation堆栈时,CloudFormation会调用相应的API来创建关联的资源,当您删除堆栈时,CloudFormation会调用相应的API来删除它们 . 支持Most (but not all) AWS APIs .
AWS Elastic Beanstalk:“Web Apps轻松实现”
Elastic Beanstalk(EB)是用于托管Web应用程序的更高级别的托管'platform as a service'(PaaS),范围与Heroku类似 . EB不是直接处理低级AWS资源,而是提供一个完全托管的平台,您可以使用web interface,选择应用程序使用哪个platform,创建并上传source bundle,EB处理其余的资源 .
使用EB,您可以获得monitoring your application environment和deploying new versions of your application的各种内置功能 .
在幕后,EB使用CloudFormation来创建和管理应用程序的各种AWS资源 . 您可以通过将CloudFormation Resources添加到与您一起部署的EB configuration file来自定义和扩展默认EB环境应用 .
结论
如果您的应用程序是使用Elastic Beanstalk支持的平台之一的标准Web层应用程序,并且您希望为您的应用程序提供易于管理,高度可扩展的托管, use Elastic Beanstalk .
如果你:
想直接管理所有应用程序的AWS资源;
想要管理或大量自定义实例配置或部署过程;
需要使用Elastic Beanstalk不支持的应用程序平台;要么
只是不希望/需要任何更高级别的Elastic Beanstalk功能
然后 use CloudFormation directly 并避免添加Elastic Beanstalk的配置层 .
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脚本的方式等 .
还有其他值得注意的差异 . Elastic beanstalk被设计为单个应用程序的容器 . 我有一组网站和服务,但发现使用beanstalk部署多个网站非常困难,经过多次尝试,AWS建议在这种情况下使用 Cloud 形成,因为它具有额外的灵活性 . 这是一篇非常有用的文章,关于引导AWS Cloud 的形成和更新比AWS页面更清晰的运行站点here . 如果我们可以直接从VS部署到存储在S3上的 Cloud 形成模板并使其像beanstalk一样自动更新,那么仍在尝试解决问题...
Elastic Beanstalk自动处理部署,从容量配置,负载 balancer ,自动扩展到基于您上传到的代码的应用程序运行状况监控,其中CloudFormation是一个自动配置引擎,旨在通过JSON脚本部署整个 Cloud 环境 .
Elastic beanstalk自动处理代码的部署 - 从容量配置,负载 balancer ,自动扩展到应用程序运行状况监控 - 基于您上传到它的代码,而cloudFormation是一个自动引擎,旨在通过JSON部署整个 Cloud 环境脚本 .