AWS OpsWorks gegen AWS Beanstalk gegen AWS CloudFormation?

85

Ich möchte wissen, welche Vor- und Nachteile die Verwendung von AWS OpsWorks gegenüber AWS Beanstalk und AWS CloudFormation hat.

Ich interessiere mich für ein System, das automatisch skaliert werden kann, um eine hohe Anzahl gleichzeitiger Webanforderungen (von 1000 Anforderungen pro Minute bis 10 Millionen U / min) zu verarbeiten, einschließlich einer Datenbankebene, die ebenfalls automatisch skalierbar sein kann.

Anstatt für jede App eine eigene Instanz zu haben, möchte ich im Idealfall einige Hardwareressourcen effizient gemeinsam nutzen. In der Vergangenheit habe ich hauptsächlich eine EC2-Instanz + RDS + Cloudfront + S3 verwendet

Das Stack-System wird einige stark frequentierte Ruby-on-Rails-Apps hosten, die wir von Heroku migrieren, sowie einige Python / Django-Apps und einige PHP-Apps.

Danke im Voraus.

Ipegasus
quelle
2
Diese Frage ist für Stackoverflow ein wenig unangebracht, passt aber wahrscheinlich auch nicht gut zu ServerFault ... Ich habe eine neue Site für Fragen wie diese vorgeschlagen. Folgen Sie uns, wenn Sie damit einverstanden sind! area51.stackexchange.com/proposals/82757/…
Dan Ciborowski - MSFT

Antworten:

69

Ich möchte wissen, welche Vor- und Nachteile die Verwendung von AWS OpsWorks gegenüber AWS Beanstalk und AWS CLoudFormation hat.

Die Antwort lautet: es kommt darauf an.

AWS OpsWorks und AWS Beanstalk sind (wie mir gesagt wurde) einfach verschiedene Arten der Verwaltung Ihrer Infrastruktur, je nachdem, wie Sie darüber denken. CloudFormation ist einfach eine Möglichkeit, Ihre Infrastruktur mit Vorlagen zu versehen.

Persönlich kenne ich Elastic Beanstalk besser, aber jeder für sich. Ich bevorzuge es, weil es Bereitstellungen über Git durchführen kann. Es ist eine öffentliche Information, dass Elastic Beanstalk CloudFormation unter der Haube verwendet, um seine Umgebungen zu starten.

Für meine Projekte verwende ich beide zusammen. Ich verwende CloudFormation, um eine benutzerdefinierte VPC-Umgebung, S3-Buckets und DynamoDB-Tabellen zu erstellen, die ich für meine App verwende. Dann starte ich eine Elastic Beanstalk-Umgebung innerhalb der benutzerdefinierten VPC, die weiß, wie man mit den S3 / DynamoDB-Ressourcen spricht.

Ich interessiere mich für ein System, das automatisch skaliert werden kann, um eine hohe Anzahl gleichzeitiger Webanforderungen (von 1000 Anforderungen pro Minute bis 10 Millionen U / min) zu verarbeiten, einschließlich einer Datenbankebene, die ebenfalls automatisch skalierbar sein kann.

Unter der Haube verwenden OpsWorks und Elastic Beanstalk EC2 + CloudWatch + Auto Scaling, das in der Lage ist, die Lasten zu bewältigen, über die Sie sprechen. RDS bietet Unterstützung für skalierbare SQL-basierte Datenbanken.

Anstatt für jede App eine eigene Instanz zu haben, möchte ich im Idealfall einige Hardwareressourcen effizient gemeinsam nutzen. In der Vergangenheit habe ich hauptsächlich eine EC2-Instanz + RDS + Cloudfront + S3 verwendet

Je nachdem, was Sie unter " einigen Hardwareressourcen" verstehen , können Sie neben OpsWorks- oder Elastic Beanstalk-Umgebungen jederzeit eigenständige EC2-Instanzen starten. Derzeit unterstützt Elastic Beanstalk eine Webanwendung pro Umgebung. Ich kann mich nicht erinnern, was OpsWorks unterstützt.

Das Stack-System wird einige stark frequentierte Ruby-on-Rails-Apps hosten, die wir von Heroku migrieren, sowie einige Python / Django-Apps und einige PHP-Apps.

All dies wird von AWS vollständig unterstützt. OpsWorks und Elastic Beanstalk haben sich für eine Reihe von Entwicklungsumgebungen optimiert (Ruby, Python und PHP sind alle auf der Liste), während EC2 Raw-Server bereitstellt, auf denen Sie alles installieren können, was Sie möchten.

Ryan Parman
quelle
3
OpsWorks behandelt Git-Bereitstellungen ebenfalls, wenn auch anders. Wenn ElasticBeanstalk-Git-Bereitstellungen mithilfe einer CLI von einem Repo übertragen werden, verwendet OpsWorks den schreibgeschützten Zugriff auf ein Repo mithilfe von SSH (oder HTTPS bei öffentlichem Repo).
Jack Frost
@Ryan Wie bereits erwähnt, verwendet Beanstalk im Hintergrund Vorlagen vom Typ Cloud Formation, um die erforderliche Infrastruktur zu erstellen.
Mohd Belal
22

OpsWorks ist ein Orchestrierungswerkzeug wie Chef - tatsächlich ist es von Chef - Puppet, Ansible oder Saltstalk abgeleitet. Sie verwenden Opsworks, um den Status anzugeben, in dem sich Ihr Netzwerk befinden soll, indem Sie den Status angeben, in dem sich jede Ressource - Serverinstanzen, Anwendungen, Speicher - befinden soll. Außerdem geben Sie den Status an, in dem sich jede Ressource befinden soll Geben Sie den gewünschten Wert für jedes Attribut dieses Status an. Beispielsweise möchten Sie möglicherweise, dass der Apache-Dienst immer aktiv ist und beim Booten mit Apache als Benutzer und Apache als Linux-Gruppe gestartet wird.

CloudFormation ist eine JSON-Vorlage (**), die den Status der Ressource (n) angibt, die Sie bereitstellen möchten, dh Sie möchten eine AWS EC2 micro t2-Instanz in us-east-1 als Teil von VPC 192.168.1.0/24 bereitstellen . Im Fall einer EC2-Instanz können Sie über Ihr benutzerdefiniertes Bash-Skript im Abschnitt Benutzerdaten der EC2-Ressource angeben, was auf dieser Ressource ausgeführt werden soll. CloudFormation ist nur eine Vorlage. Die Vorlage wird nur dann als laufende Ressource verwendet, wenn Sie sie entweder über die AWS Management Console für CloudFormation ausführen oder wenn Sie den Befehl aws cli für Cloudformation ausführen, dh aws cloudformation ...

ElasticBeanstalk ist ein PAAS - Sie können die spezifischen Ruby / Rails-, node.js- oder Python / django- oder Python / Flask-Apps hochladen. Wenn Sie etwas anderes wie Scala, Haskell oder etwas anderes ausführen, erstellen Sie ein Docker-Image dafür und laden Sie dieses Docker-Image in Elastic Beanstalk (*) hoch.

Sie können Ihre App in Elastic Beanstalk hochladen, indem Sie entweder die aws-CLI für CloudFormation ausführen oder ein Rezept für Opsworks erstellen, um Ihre App in Elastic Beanstalk hochzuladen. Sie können die aws cli für Cloudformation auch über Opsworks ausführen.

(*) Tatsächlich war die Dokumentation von AWS zu seinem Ruby-App-Beispiel so schlecht, dass ich die Geduld verlor und die Beispiel-App in ein Docker-Image einbettete und das Docker-Image in Elastic Beanstalk hochlud.

(**) Ab September 2016 unterstützt Cloudformation auch YAML-Vorlagen.

Vietnhi Phuvan
quelle
8

In Opsworks können Sie "Rollen" von Ebenen in einem Stapel gemeinsam nutzen, um weniger Ressourcen zu verbrauchen, indem Sie die spezifischen Jobs kombinieren, die eine zugrunde liegende Instanz möglicherweise ausführt.

Layer-Kompatibilitätsliste (solange die Sicherheitsgruppen richtig eingestellt sind):

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. 

Referenz: http://docs.aws.amazon.com/opsworks/latest/userguide/layers.html

Imran Ahmed
quelle
7

AWS Beanstalk: Es ist das Bereitstellen und Verwalten von Anwendungen in der AWS-Cloud, ohne sich Gedanken über die Infrastruktur zu machen, in der Ihre Webanwendungen mit Elastic Beanstalk ausgeführt werden. Sie müssen sich keine Gedanken über EC2 oder andere Installationen machen.

AWS OpsWorks AWS OpsWorks ist nichts anderes als ein Anwendungsverwaltungsdienst, der es den neuen DevOps-Benutzern erleichtert, die gesamte Anwendung zu modellieren und zu verwalten

Yogesh Funde
quelle
1
Ich denke, diese Antwort ist ungenau. Tatsache ist umgekehrt. Während Elastic Beanstalk mit OpsWorks nur ein PaaS ist, liegt es in Ihrer Verantwortung, einen Stapel mit geeigneten Komponenten zu erstellen. Die Definition "Für neue DevOps" gilt für EB-Benutzer, nicht für OpsWorks.
Scaryguy
3

AWS CloudFormation - Erstellen und aktualisieren Sie Ihre Umgebungen.

AWS Opsworks - Verwalten Sie Ihre Systeme in diesen Umgebungen wie bei Chef oder Puppet

AWS Beanstalk - Erstellen, Verwalten und Bereitstellen.

Aber ich persönlich mag CloudFormation und OpsWorks, indem ich die volle Leistung für das nutze, wofür sie gedacht sind.

Verwenden Sie CloudFormation, um Ihre Umgebung zu erstellen. Anschließend können Sie Opsworks über Cloud Formation-Skripts aufrufen, um Ihren Computer zu starten. Dann haben Sie Opsworks Stack, um es zu verwalten. Fügen Sie beispielsweise einen Benutzer in der Linux-Box hinzu, indem Sie Opsworks verwenden, oder patchen Sie Ihre Boxen mithilfe von Kochrezepten. Sie können auch Kochrezepte für den Einsatz aufschreiben. Andernfalls können Sie CodeDeploy verwenden, das speziell für die Bereitstellung erstellt wurde.

Gladiator
quelle
2

AWS OpsWorks - Dies ist ein Teil des AWS-Verwaltungsdienstes. Es ist hilfreich, die Anwendung mithilfe von Skripten zu konfigurieren. Es verwendet Chef als Devops-Framework für diese Anwendungsverwaltung und -operation. Es gibt Vorlagen, die zur Konfiguration von Server, Datenbank und Speicher verwendet werden können. Die Vorlagen können auch für andere Aufgaben angepasst werden. DevOps-Ingenieure haben die Kontrolle über die Abhängigkeiten und die Infrastruktur der Anwendung.

AWS Beanstalk - Es bietet die Umgebung für Sprachen wie Java, Node Js, Python und Ruby Go. Elastic Bean Stalk bietet die Ressource zum Ausführen der Anwendung. Entwickler müssen sich keine Sorgen um die Infrastruktur machen und haben keine Kontrolle über die Infrastruktur.

AWS CloudFormation - CloudFormation verfügt über Beispielvorlagen zum ordnungsgemäßen Verwalten der AWS-Ressourcen.

Sanjeev Singh
quelle
0

Wie viele andere AWS Beanstalk kommentiert haben, bieten AWS OpsWorks und AWS Cloud Formation unterschiedliche Lösungen für unterschiedliche Probleme.

Um mit zu erreichen

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.

In Anbetracht der Tatsache, dass Sie sich im Migrationsprozess befinden, empfehle ich Ihnen dringend, einen Blick auf die AWS Lambda & AWS DynamoDB-Lösung (oder die Hybridlösung) zu werfen.

Beide sind für die automatische Skalierung auf einfache Weise konzipiert und können eine sehr kostengünstige Lösung sein.

siomes
quelle
-1

Verwenden Sie einfach Terraform und ECS oder EKS.

Opsworks, elastische Bohnenstange und Cloudformation Old Tech jetzt. -)

neill
quelle