¿Cuál es la diferencia entre Elastic Beanstalk y CloudFormation para un proyecto .NET?

121

Desarrollé una aplicación .NET MVC y comencé a jugar con AWS y a implementarla a través de Visual Studio Toolkit. Implementé con éxito la aplicación usando la opción Elastic Beanstalk en el kit de herramientas.

Mientras repasaba los tutoriales para implementar aplicaciones .NET en AWS con el kit de herramientas, noté que hay tutoriales para implementar tanto con Elastic Beanstalk como con CloudFormation . ¿Cuál es la diferencia entre estos dos?

Por lo que puedo decir, parece que ambos esencialmente están haciendo lo mismo, lo que facilita la implementación de su aplicación en la nube de AWS (configuración de instancias EC2, equilibrador de carga, escalado automático, etc.). He intentado leer sobre ambos, pero parece que no puedo obtener nada más que un montón de palabras de moda que me suenan a lo mismo. Incluso encontré una pregunta frecuente en el sitio web de AWS que se supone que responde exactamente a esta pregunta, pero realmente no la entiendo.

¿Debería usar uno u otro? ¿Ambos?

kspearrin
fuente
Esta pregunta es un poco fuera de tema para Stackoverflow, pero probablemente tampoco encajaría bien en ServerFault ... He propuesto un nuevo sitio para preguntas como esta, ¡síguelo si está de acuerdo! area51.stackexchange.com/proposals/82757/…
Dan Ciborowski - MSFT

Respuestas:

212

En realidad, son bastante diferentes. Elastic Beanstalk está destinado a facilitar la vida de los desarrolladores. CloudFormation está destinado a facilitar la vida de los ingenieros de sistemas.

Elastic Beanstalk es una capa similar a PaaS en la parte superior de los servicios IaaS de AWS que abstrae las instancias EC2 subyacentes, Elastic Load Balancers, grupos de escalado automático, etc. Esto hace que sea mucho más fácil para los desarrolladores, que no quieren lidiar con todos. el material de los sistemas, para que su aplicación se implemente rápidamente en AWS. Es muy similar a otros productos PaaS como Heroku, EngineYard, Google App Engine, etc. Con Elastic Beanstalk, no es necesario comprender cómo funciona la magia subyacente.

CloudFormation, por otro lado, no hace nada automáticamente. Es simplemente una forma de definir todos los recursos necesarios para la implementación en un archivo JSON enorme. Por lo tanto, una plantilla de CloudFormation podría crear dos entornos ElasticBeanstalk (producción y ensayo), un par de clústeres de ElasticCache, una tabla DyanmoDB y luego el DNS adecuado en Route53. Luego subo esta plantilla a AWS, me alejo y, 45 minutos después, todo está listo y esperando. Como es solo un archivo JSON de texto sin formato, puedo pegarlo en mi control de código fuente, lo que proporciona una excelente manera de versionar las implementaciones de mi aplicación. También asegura que tengo una configuración repetible, "buena conocida" que puedo implementar rápidamente en una región diferente.

Jamieb
fuente
¡Gracias! Parece que me quedaré con EBS por ahora.
kspearrin
37
@xxkylexx FYI: "EBS" se refiere al servicio de AWS denominado "Elastic Block Store". Creo que quiere decir "Elastic Beanstalk" en lugar de "EBS".
ekilla antes
2
Creo que utilizaron una plantilla de formación de nube automatizada para crear el entorno de Elastic Beanstalk para la aplicación que ha creado, .Net o lo que sea ... FWIW
codeputer
51

Para comenzar a implementar rápidamente una aplicación web estándar .NET, Elastic Beanstalk es el servicio adecuado para usted.

Gráfico de comparación de servicios de aplicaciones

AWS CloudFormation : "Aprovisionamiento basado en plantillas"

AWS CloudFormation ofrece a los desarrolladores y administradores de sistemas una manera fácil de crear y administrar una colección de recursos de AWS relacionados, aprovisionándolos y actualizándolos de manera ordenada y predecible.

CloudFormation (CFn) es una abstracción liviana de bajo nivel sobre las API de AWS existentes. Con un documento de plantilla JSON / YAML estático , declara un conjunto de recursos (como una instancia EC2 o un depósito S3 ) que corresponden a las operaciones CRUD en las API de AWS.

Cuando crea una pila de CloudFormation, CloudFormation llama a las API correspondientes para crear los recursos asociados, y cuando elimina una pila, CloudFormation llama a las API correspondientes para eliminarlas. La mayoría (pero no todas) las API de AWS son compatibles.

AWS Elastic Beanstalk : "Aplicaciones web simplificadas"

AWS Elastic Beanstalk es un servicio fácil de usar para implementar y escalar aplicaciones y servicios web desarrollados con Java , .NET , PHP , Node.js , Python , Ruby , Go y Docker en servidores conocidos como Apache, Nginx, Passenger y IIS.

Simplemente puede cargar su código y Elastic Beanstalk maneja automáticamente la implementación, desde el aprovisionamiento de capacidad, el equilibrio de carga, el escalado automático hasta el monitoreo del estado de la aplicación.

Elastic Beanstalk (EB) es una 'plataforma como servicio' (PaaS) administrada de nivel superior para alojar aplicaciones web, de alcance similar a Heroku . En lugar de ocuparse directamente de los recursos de AWS de bajo nivel, EB proporciona una plataforma totalmente administrada en la que puede crear un entorno de aplicación mediante una interfaz web , seleccionar la plataforma que usa su aplicación, crear y cargar un paquete fuente y EB se encarga del resto.

Con EB, obtiene todo tipo de funciones integradas para monitorear el entorno de su aplicación e implementar nuevas versiones de su aplicación .

Bajo el capó, EB usa CloudFormation para crear y administrar los diversos recursos de AWS de la aplicación. Puede personalizar y ampliar el entorno de EB predeterminado agregando recursos de CloudFormation a un archivo de configuración de EB implementado con su aplicación.

Conclusión

Si su aplicación es una aplicación estándar de nivel web que utiliza una de las plataformas compatibles con Elastic Beanstalk y desea un alojamiento fácil de administrar y altamente escalable para su aplicación, use Elastic Beanstalk .

Si tu:

  • Quiere administrar todos los recursos de AWS de su aplicación directamente;
  • Desea administrar o personalizar en gran medida su proceso de implementación o aprovisionamiento de instancias;
  • Necesita utilizar una plataforma de aplicaciones no compatible con Elastic Beanstalk; o
  • Simplemente no quiero / necesito ninguna de las funciones de Elastic Beanstalk de nivel superior

luego use CloudFormation directamente y evite la capa de configuración agregada de Elastic Beanstalk.

wjordania
fuente
14

Cloud Formation es un servicio que le permite implementar servicios de AWS. Crea un archivo de plantilla que describe qué servicios desea. Cuando implementa esa plantilla, Cloud Formation crea los recursos para usted como un "paquete". Todos los recursos que definió en su plantilla se inician y terminan juntos. Ejemplos de tipos de recursos que se pueden crear con Cloud Formation son: S3, instancias EC2, AutoScaling, DynamoDb, etc. Para EC2, Cloud Formation también le brinda la capacidad de utilizar scripts "cfn-init"; que se puede utilizar junto con la plantilla para arrancar sus instancias.

Elastic Beanstalk usa plantillas y scipts de Cloud Formation para: 1. Crear un equilibrador de carga y un grupo de Auto Scaling, 2. Copiar su código en S3, 3. Iniciar una instancia de Ec2 para descargar el código de S3 e implementarlo.

Cloud Formation no es tan fácil de usar como EB, pero es mucho más poderoso, porque puede crear recursos distintos a las instancias EC2, controlar cómo el script cfn-init, etc.

Edwin
fuente
10

Hay otras diferencias dignas de mención. Elastic beanstalk está diseñado como un contenedor para una sola aplicación. Tengo un conjunto de varios sitios web y servicios, pero me resultó muy difícil implementar varios sitios web con beanstalk y, después de varios intentos, AWS me recomendó que ayudara a utilizar la formación de nubes en esta situación, ya que tiene una flexibilidad adicional. Hay un artículo muy útil en la formación de nubes bootstrapping AWS y actualizar un sitio que ejecuta aquí eso es mucho más claro que las páginas de AWS. Todavía estoy tratando de averiguar si podemos implementar desde VS directamente a la plantilla de formación de nubes almacenada en S3 y hacer que se actualice automáticamente como beanstalk ...

Mate
fuente
3

Estos servicios están diseñados para complementarse entre sí. AWS Elastic Beanstalk proporciona un entorno para implementar y ejecutar fácilmente aplicaciones en la nube. Está integrado con herramientas de desarrollo y proporciona una experiencia única para que pueda administrar el ciclo de vida de sus aplicaciones. AWS CloudFormation es un mecanismo de aprovisionamiento conveniente para una amplia gama de recursos de AWS y de terceros. Admite las necesidades de infraestructura de muchos tipos diferentes de aplicaciones, como aplicaciones empresariales existentes, aplicaciones heredadas, aplicaciones creadas con una variedad de recursos de AWS y soluciones basadas en contenedores (incluidas las creadas con AWS Elastic Beanstalk).

AWS CloudFormation admite entornos de aplicaciones de Elastic Beanstalk como uno de los tipos de recursos de AWS. Esto le permite, por ejemplo, crear y administrar una aplicación alojada en AWS Elastic Beanstalk junto con una base de datos RDS para almacenar los datos de la aplicación. Además de las instancias de RDS, también se puede agregar al grupo cualquier otro recurso de AWS compatible.

Mohit Sharma
fuente
1

Elastic Beanstalk maneja automáticamente la implementación, desde el aprovisionamiento de capacidad, el equilibrio de carga, el escalado automático hasta el monitoreo del estado de la aplicación en función del código que carga, mientras que CloudFormation es un motor de aprovisionamiento automatizado diseñado para implementar entornos de nube completos a través de un script JSON.

Mahesh Bablu
fuente