AWS OpsWorks与AWS Beanstalk与AWS CloudFormation有何区别?

91
我想知道使用 AWS OpsWorks、AWS Elastic Beanstalk 和 AWS CloudFormation 的优缺点是什么?
我需要一个系统,可以自动扩展以处理任何数量的并发 web 请求(从每分钟 1000 个请求到每分钟 1000 万个请求),包括可以自动扩展的数据库层。
理想情况下,我希望能够高效地共享一些硬件资源,而不是为每个应用程序单独设置实例。过去,我主要使用 EC2 实例 + RDS + CloudFront + S3。
该堆栈系统将托管一些高流量的 Ruby on Rails 应用程序,这些应用程序正在从 Heroku 迁移,还有一些 Python/Django 应用程序和一些 PHP 应用程序。

3
这个问题对于 Stackoverflow 来说有些偏题,但可能在 ServerFault 也不太合适……我提出了一个新的网站,专门用来回答这类问题,如果你同意,请关注!http://area51.stackexchange.com/proposals/82757/cloud-computing-platforms - Dan Ciborowski - MSFT
9个回答

74
我想知道使用AWS OpsWorks与AWS Beanstalk和AWS CloudFormation相比有什么优缺点?
答案是:这取决于具体情况。
AWS OpsWorks和AWS Beanstalk是管理基础架构的不同方式,具体取决于你的思考方式。CloudFormation则是将您的基础架构模板化的一种方法。
从个人经验来看,我更熟悉Elastic Beanstalk。我更喜欢它,因为它可以通过Git进行部署。已公开披露,Elastic Beanstalk在启动其环境时使用CloudFormation。
对于我的项目,我同时使用两者。我使用CloudFormation构建自定义配置的VPC环境、S3存储桶和DynamoDB表格,用于我的应用程序。然后,在自定义的VPC中启动一个Elastic Beanstalk环境,它知道如何与S3/DynamoDB资源通信。
我感兴趣的是一个可以自动扩展以处理任意数量的并发Web请求(从每分钟1000个请求到每分钟1000万个请求),包括可以自动扩展的数据库层。
在底层,OpsWorks和Elastic Beanstalk使用EC2 + CloudWatch + Auto Scaling,能够处理你所说的负载。RDS支持可伸缩的基于SQL的数据库。
与其为每个应用程序创建单独的实例,理想情况下我想有效地共享一些硬件资源。过去,我主要使用EC2实例+ RDS + Cloudfront + S3。
根据你对“一些”硬件资源的理解,您始终可以在OpsWorks或Elastic Beanstalk环境中启动独立的EC2实例。目前,Elastic Beanstalk支持每个环境一个Web应用程序。我不记得OpsWorks支持什么了。
堆栈系统将托管一些高流量的Ruby on Rails应用程序,我们正在从Heroku迁移这些应用程序,还有一些Python / Django应用程序和一些PHP应用程序。

所有这些都得到了 AWS 的全力支持。OpsWorks和Elastic Beanstalk已经为多种开发环境进行了优化(包括Ruby、Python和PHP在内),而EC2则提供了原始服务器,您可以安装任何您想要的东西。


3
OpsWorks也可以处理Git部署,但方法略有不同。虽然ElasticBeanstalk使用CLI从存储库中推送Git部署,但OpsWorks使用SSH(或公共存储库时使用HTTPS)对存储库进行只读访问。 - Jack Frost
@Ryan 如上所述,Beanstalk在后台使用Cloud Formation类型的模板来创建所需的基础设施。 - Mohd Belal

27

OpsWorks是一种像Chef一样的编排工具,实际上,它是从Chef、Puppet、Ansible或Saltstalk中派生出来的。您可以使用Opsworks通过指定每个资源(服务器实例、应用程序、存储)所需要的状态来指定要将网络置于的状态,并通过为该状态的每个属性指定所需的值来指定您所需的每个资源的状态。例如,您可能希望始终启动Apache服务并在Apache用户和Apache Linux组下启动。

CloudFormation是一个json模板(**),用于指定要部署的资源的状态,例如您要在VPC 192.168.1.0/24的us-east-1中作为部署AWS EC2微型t2实例的一部分。对于EC2实例,您可以在EC2资源的用户数据部分中通过自定义bash脚本指定应在该资源上运行的内容。CloudFormation只是一个模板。仅当您通过AWS CloudFormation的管理控制台运行它或者运行Cloudformation的aws cli命令时,该模板才会构成一个正在运行的资源。

ElasticBeanstalk是一种PAAS-您可以上传专门为Ruby/Rails、Node.js或Python/Django或Python/Flask应用程序打包的内容。如果您运行的是Scala、Haskell或其他任何语言,请为其创建一个Docker镜像并将该Docker镜像上传到Elastic Beanstalk(*).

您可以通过运行CloudFormation的aws cli或创建Opsworks配方来将应用程序上传到Elastic Beanstalk。您还可以通过Opsworks运行Cloudformation的aws cli。

(*)实际上,AWS关于其Ruby应用程序示例的文档非常差,以至于我失去了耐心并将示例应用程序嵌入到Docker镜像中,并将该Docker镜像上传到Elastic Beanstalk。

(**)截至2016年9月,Cloudformation也支持YAML模板。


10

AWS Beanstalk: 使用弹性Beanstalk在AWS云中部署和管理应用程序,无需担心运行Web应用程序的基础架构。不需要担心EC2或其他安装。

AWS OpsWorks AWS OpsWorks是一种应用程序管理服务,可帮助新的DevOps用户对其整个应用程序进行建模和管理。


2
我认为这个答案是不准确的。事实上恰恰相反。虽然Elastic Beanstalk只是一个PaaS,但在OpsWorks中,你需要自己负责使用适当的组件创建堆栈。"对于新的DevOps"定义适用于EB用户,而不是OpsWorks的用户。 - scaryguy
我认为这不正确,或者至少自那个回答以来情况已经发生了很大变化。 - saadlulu

8
在Opsworks中,您可以通过将层的“角色”共享到堆栈上来使用更少的资源,从而组合底层实例可能执行的特定作业。
层兼容性列表(只要安全组设置正确):
HA Proxy : custom, db-master, and memcached.
MySQL :  custom, lb, memcached, monitoring-master, nodejs-app, php-app, rails-app, and web.
Java : custom, db-master, and memcached.
Node.js : custom, db-master, memcached, and monitoring-master
PHP : custom, db-master, memcached, monitoring-master, and rails-app.
Rails :  custom, db-master, memcached, monitoring-master, php-app.
Static :  custom, db-master, memcached.
Custom : custom, db-master, lb, memcached, monitoring-master, nodejs-app, php-app, rails-app, and web 
Ganglia :  custom, db-master, memcached, php-app, rails-app. 
Memcached :  custom, db-master, lb, monitoring-master, nodejs-app, php-app, rails-app, and web. 

参考链接: http://docs.aws.amazon.com/opsworks/latest/userguide/layers.html

这个链接是关于AWS OpsWorks中“Layers”(层)的文档。在OpsWorks中,层是指一组EC2实例,它们都运行着相同类型的应用程序和服务。每个层有自己的配置参数、安装包和自定义脚本,以便方便地管理和部署应用程序。层可以被用来划分基础架构、协调任务和控制访问权限等。

4
AWS CloudFormation - 创建和更新您的环境。
AWS OpsWorks - 像使用Chef或Puppet一样管理您在这些环境中的系统。
AWS Beanstalk - 创建、管理和部署。
但从个人角度而言,我喜欢同时使用CloudFormation和OpsWorks,充分发挥它们所用于的全部功能。
使用CloudFormation创建您的环境,然后可以从CloudFormation脚本中调用Opsworks来启动您的机器。然后您将拥有Opsworks堆栈来管理它。例如,使用Opsworks在Linux框中添加用户,或者使用Chef配方对框进行打补丁。您还可以编写部署的Chef配方。否则,您可以使用专门用于部署的CodeDeploy。

2

AWS OpsWorks - 这是AWS管理服务的一部分。它帮助使用脚本配置应用程序。它使用Chef作为该应用程序管理和操作的DevOps框架。有模板可用于配置服务器、数据库和存储。这些模板也可以自定义以执行任何其他任务。DevOps工程师可以控制应用程序的依赖项和基础设施。

AWS Beanstalk - 它为Java、Node Js、Python、Ruby Go等语言提供环境。Elastic Beanstalk提供资源来运行应用程序。开发人员无需担心基础设施,也无法控制基础设施。

AWS CloudFormation - CloudFormation具有示例模板,可按顺序管理AWS资源。


0

正如许多人评论的那样,AWS Beanstalk、AWS OpsWorks和AWS Cloud Formation为不同的问题提供了不同的解决方案。

为了实现

I am interested in a system that can be auto scaled to handle any high number of simultaneous web requests (From 1000 requests per minute to 10 million rpm.), including a database layer that can be auto scalable as well.

考虑到您正在进行迁移过程,我强烈建议您开始了解AWS Lambda和AWS DynamoDB解决方案(或混合解决方案)。

这两个解决方案都是为了简单地实现自动扩展而设计的,可能是一种非常便宜的解决方案。


-1

如果您需要部署一个需要更新其EC2实例的应用程序,那么应该使用OpsWorks代替CloudFormation。如果您的应用程序使用了大量的AWS资源和服务,包括EC2,则应同时使用CloudFormation和OpsWorks。

如果您的应用程序需要其他AWS资源,例如数据库或存储服务。在这种情况下,使用CloudFormation来部署Elastic Beanstalk以及其他资源。


-2

只需使用terraform和ECS或EKS。

opsworks、elastic beanstalk和cloudformation现在都是老技术了。-)


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