La realidad de ejecutar una aplicación de nodo de producción en AWS Elastic Beanstalk

Lecciones aprendidas tras 2 años de ejecutar una aplicación de nodo de producción en la plataforma ELB de AWS

Materia principal

Seamos honestos, la calculadora de precios de AWS es confusa. Parte de eso se debe al método de pago a la carta que ofrece AWS. Esto dificulta el intento de dar un buen presupuesto a un cliente. Con suerte, este artículo puede proporcionar algo de luz sobre cuánto cuesta ejecutar una aplicación, así como algunas formas de reducir los costos.

El costo real de ejecutar una aplicación

He estado administrando una aplicación web de nodo en ELB durante aproximadamente dos años. El primer año fue genial, ¡te dieron todo gratis (en su mayoría)! Después de eso, debe comenzar a pagar por cosas, como instancias EC2.

Este artículo se centrará en los requisitos específicos de mi aplicación, que es una aplicación rápida basada en nodos alojada en Elastic Beanstalk.

Para obtener detalles completos sobre la compilación, consulte mi artículo anterior aquí.

Descompostura

Esto es lo que estoy ejecutando actualmente en AWS:

Entorno de EBS único (región oeste de EE. UU.):

  • 1 equilibrador de carga clásico
  • 1 instancia t2.micro EC2
  • Bucket S3 que contiene imágenes (7 GB en el momento de escribir este artículo)
  • 1 zona hospedada de la ruta 53

$ 18 (Balanceador de carga) + $ 5 (EC2 con un RI) + $ 0.50 (Ruta 53) + $ 0.17 (S3) + $ 0.21 (Transferencia de datos) = Aproximadamente $ 25 al mes.

Además, tengo una MongoDB en otro lugar, por lo que si planea alojar una base de datos en AWS, incurrirá en costos adicionales. Analicemos los distintos costos.

Balanceador de carga

Esta es la parte más cara de la pila. Cuesta:

  • $ 0.025 por Classic Load Balancer-hora (o hora parcial)
  • 0,008 USD por GB de datos procesados ​​por un Classic Load Balancer

Eso significa que, si ejecuta su aplicación las 24 horas del día, costará aproximadamente $ 18 + cargos de datos, cada mes.

Instancia EC2

Las instancias On-Demand EC2 son más caras de lo que deberían. Para ahorrar algo de dinero aquí, consulte la siguiente sección sobre Instancias EC2 reservadas. En caso de que se lo pregunte, costaría $ 8.40 ejecutar el mismo tipo de instancia EC2 como se mencionó anteriormente, bajo demanda.

S3

Tengo un par de cubos S3. Uno para mi página de inicio estática, otro para guardar imágenes y otro para guardar la versión de la aplicación. Hasta donde yo sé, ELB crea automáticamente uno para administrar las versiones de la aplicación.

El S3 es bastante barato, así que no estoy muy preocupado por tratar de níquel y moneda de diez centavos, pero hay formas de ahorrar dinero a través de su sistema Glacier.

Base de datos

Alojo mi MongoDB DB en mLab, que desaparecerá pronto. Así que actualizaré esto cuando averigüe cuánto va a costar realmente una vez que me vea obligado a mudarme al Atlas de Mongo.

Instancias EC2 reservadas

Hablemos de instancias reservadas (RI). El complicado sistema de facturación de Amazon es la parte más confusa sobre la gestión de cualquier cosa en AWS. Las instancias reservadas pueden aliviar parte del costo, pero son demasiado confusas.

Después de mucho leer y hablar con el servicio al cliente de AWS, esto es lo que descubrí.

En primer lugar, hay dos formas diferentes de reservar dónde se encuentra la instancia reservada: regional y zona de disponibilidad. Medios regionales, es específico de una de las principales regiones, por ejemplo. us-west-2 (Oregón). La zona de disponibilidad (AZ) es específica de una zona dentro de esa región, por ejemplo, us-west-2 a (Oregon).

Compré un RI dentro de us-west-2 y se aplicó automáticamente a mi instancia que se ejecuta en esa área. Si compra uno dentro del AZ, solo se aplicará al AZ específico, por ejemplo, us-west-2a, por lo que si ELB genera una instancia EC2 en us-west2b, ​​no tendrá suerte.

Además, existen tipos de instancias reservadas "estándar" y "convertibles". No estoy al 100% de lo que eso significa, pero por lo que entiendo, el convertible es más flexible en lo que se puede cambiar, pero es más caro.

Por último, existen tres tipos de pago: sin pago por adelantado, parcial por adelantado y todo por adelantado. Esto es bastante sencillo, o no paga nada, parte o todo cuando reserva la instancia. No hay costo-beneficio, que puedo ver. Sin embargo, como cuenta nueva, lo más probable es que no pueda hacer nada por adelantado.

Por AWS Support:

La ausencia de instancias reservadas (RI) por adelantado puede suponer un riesgo de facturación significativo para las cuentas nuevas, ya que son una obligación contractual de pagar mensualmente durante todo el plazo de la RI. Por esta razón, las cuentas nuevas y las cuentas poco usadas no pueden registrarse para las instancias reservadas sin pago inicial hasta que se cree un historial de facturación exitoso con nosotros.

Puede encontrarse con este error si intenta comprar un no por adelantado.

Error: su cuota actual no le permite comprar la cantidad requerida de instancias reservadas (Servicio: AmazonEC2; Código de estado: 400; Código de error: ReservedInstancesLimitExceeded;)

Advertencia: por cualquier motivo, la instancia reservada tarda un poco en "activarse", lo que significa que el primer día del mes siempre cuesta más. No estoy seguro de por qué es así, pero si lo averiguo, actualizaré esto. Vea el gráfico a continuación:

Puntos de dolor

Estas son solo algunas quejas menores sobre el EBS general, que pensé que incluiría como un apéndice a mi artículo original, en caso de que sienta curiosidad.

Las actualizaciones automáticas no son tan automáticas

Las versiones de nodo no se alinean de una versión a otra.

Consulte el paso a continuación sobre cómo administro el cambio de versiones de Linux cuando Node no funciona.

Ejecutando más de un entorno

Tener un entorno de desarrollo y una producción ejecutándose al mismo tiempo es fácil, pero es caro. De hecho, lo duplica. Por lo tanto, normalmente destruyo el entorno de desarrollo tan pronto como termino con él.

La documentación es horrenda

AWS es demasiado grande para su propio bien. Esa es parte de la razón por la que escribo esto. Fue realmente difícil encontrar respuestas a mis necesidades específicas.

Cómo administro las actualizaciones

Tengo dos instancias separadas de mi repositorio de Git instaladas en mi computadora portátil. Tengo uno para desarrollo y otro para producción.

Yo uso el entorno de desarrollo para, bueno, ¡desarrollar! Muy claro. Utilizo la carpeta de producción únicamente con el propósito de extraer actualizaciones de la rama maestra de Git, ejecutar la configuración de mi paquete web y realizar la implementación en el servidor de producción.

La razón por la que están separados es porque puedo mantener configuraciones de beanstalk elásticos separadas y no tener que preocuparme por implementar en el lugar equivocado.

Actualizaciones que no requieren un cambio de entorno Linux

Para las actualizaciones que no requieren ningún cambio en el entorno de Linux, es tan simple como ejecutarlas eb deployen la terminal. Es sorprendente y tarda unos 10 minutos en propagarse.

Actualizaciones que requieren un cambio en el entorno Linux

Ocasionalmente, querrá actualizar el entorno Linux, pero tampoco podrá hacerlo porque AWS es muy tonto (estoy seguro de que hay una razón) y solo permite ciertas versiones de Node en cada compilación de Linux. Para esto, es un poco más complicado, pero manejable.

  1. Empuje a la configuración de producción bajo nuevo env. La última vez que hice esto, acabo de crear una nueva instancia a través de eb create prod-1. Hará lo que necesite e implementará su aplicación en un nuevo entorno.
  2. Asegúrese de que todas sus actualizaciones funcionen. Parece bastante obvio, pero este es un buen momento para asegurarse de que no haya contratiempos con la nueva versión.
  3. Asegúrate de que tus env vars estén configuradas correctamente. Esto es una especie de parte de la versión anterior, pero asegúrese de extraer de la base de datos correcta o lo que sea.
  4. Asegúrese de que su equilibrador de carga tenga el mismo certificado SSL (si corresponde). Dato curioso, si intenta acceder a una instancia de ELB en https sin un certificado, ¡fallará!
  5. Intercambia las instancias. Finalmente, después de que todo parece estar bien, hay un botón en la consola para intercambiar las URL de la instancia. PAN COMIDO. No tienes que cambiar nada en la Ruta 53, lo hace todo por ti.

Así que ahí lo tienes. Cómo administrar sus actualizaciones. Muy fácil.

Pensamientos finales

Si tiene alguna sugerencia para hacerlo más barato / más fácil, me encantaría escucharlas. ¡Me gusta la discusión sobre herramientas y opciones tanto como el próximo desarrollador!

Con eso, me iré con esto: ¡Feliz codificación!