© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Mauro Parra-Miranda
Senior DevOps @ Limelight Health, Inc.
Deployment de NodeJS con AWS
Elastic Beanstalk
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
¿Quién soy?
• Mauro Parra-Miranda
• He trabajado con UNAM, SEP, Novell, SUSE, ex-Ximian,
Appcelerator – Co-fundador de Open Enchilada
• He contribuido en proyectos como openSUSE y Mozilla.
• Administrador de Linux en el Mainframe desde 2004 con SLES
• Experiencia con AWS desde 2006 (EC2)
• Actualmente trabajo como Senior DevOps en:
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Agenda
• ¿Qué es AWS Elastic Beanstalk?
• Consideraciones de módulos de nodejs para elastic beanstalk
• ¿Cómo crear zip files para Elastic Beanstalk?
• Deployment de un proyecto NodeJS en Elastic Beanstalk
• Configuraciones interesantes para Elastic Beanstalk
• Conclusiones
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Creando un proyecto sencillo
• Abrimos una terminal (linux / mac)
• Corremos $ node --version / npm para ver si esta instalado (en caso
de que no, apt-get install node npm --y o brew install node)
• Instalamos express application generator:
$ npm install express-generator –g (se root o usa sudo para el –g)
• Corremos el express generator:
$ express --view=pug myapp
• Configuran y corran la aplicación:
$ cd myapp && npm install && npm start
• (Revisen localhost:3000 – el port default de express)
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Notas a considerar
• Nuestro proyecto ya esta corriendo en Node v8, por lo que ya existe
un package-lock.json – Ese archive les ayuda a establecer un set
“fijo” de versiones de modulos de node que funcionan correctamente
con su app.
• Correr el npm-install nos genera un directorio de node_modules.
Normalmente ustedes no quieren usarlo en otro lado, sin embargo en
el caso de un deployment en AWS Elastic Beanstalk si lo deseas,
porque en caso de que npm este caído o exista algún paquete roto,
no quieres que en cada instancia en producción que levante por ti el
elastic beanstalk, falle.
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Algunos cambios
Ya que probamos la version inicial, necesitamos:
• $ npm install dotenv –save
• $ emacs –nw app.js (si no tienen emacs, instalenlo via apt-get install o brew install)
• Anexen hasta arrriba la línea:
• Require(‘dotenv’).load()
• Editen y anexen una línea despues del var app = express();
• app.set(‘port’, process.env.PORT || 3000);
• Creen un .env
• $ emacs –nw .env
• Anexen una línea:
• PORT=8888
• Salven el archivo y corran de Nuevo:
• $ npm start
• Abran su navegador a localhost:8888
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Creando zipfiles para Elastic Beanstalk
• Remuevan package.json
• $ mv package.json my-package.json
• Empaquen todo:
• $ zip –r ../fistdeployment.zip .env *
• La razón por la que renombro el archive package.json es
para que Elastic beanstalk no corra npm install cada vez
que quiera correr una nueva instancia.
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Deployment
• Ve a http://console.aws.amazon.com/
• Logueate con tus credenciales personales
• Busca “Elastic Beanstalk”
• Select a platform – NodeJS
• Launch Now
• Create a new environment (o espera a que AWS cree el primero por ti).
• Se crea un S3 bucket para los zip files
• Se crea una entrada en la página de versiones (limitado a 1000 versiones
por proyecto – suena mucho pero en efecto se puede terminar rápido)
• Se crean una serie de máquinas para que corran tu servidor web.
• Se crea un load balancer
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Deployment – Configuración del software
• Ve a Configuration -> Software Configuration -> Container options
• Cambiemos Node version a 8.11.1
• Cambiemos el node command a
node ./bin/www
• Click en Apply
• Esperar un poco
• Clickear en la URL que te indique el Elastic beanstalk que apunta tu
loadbalancer:
http://default-environment.hgetzamh4m.us-west-2.elasticbeanstalk.com/
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Configuraciones interesantes
• ¿Qué tanto quieres escalar?
• Cambiar tipo de máquina
• Cambiar reglas para escalar
• Modificar o crear reglas especificas para que se apaguen
servicios durante la noche
• Cómo deployeas
• ¿por qué el .env file es interesante?
• Balanceo de Cargas – SSL – Certificados
• Logs
• Alarmas
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Comparaciones de costo de tu operación (Oregon)
EC2 Instance
type RAM CPU Price Per hour
m5.large 8GB RAM 2VCPU 0.096
# Servidores Horas Costo Subtotal
2 12 0.096 $ 2.30
4 4 0.096 $ 1.54
40 3 0.096 $ 11.52
4 4 0.096 $ 1.54
60 1 0.096 $ 5.76
24 $ 22.66
Costo por dia
de OPS
$ 679.68
Costo mensual
de OPS
EC2 Instance
type RAM CPU Price Per hour
m5.large 8GB RAM 2VCPU 0.096
# Servidores Horas Costo Subtotal
2
4
40
4
60
22 24 0.096 $ 50.69
Costo por dia
de OPS
$ 1,520.64
Costo mensual
de OPS
Autoscale Fixed
© 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Puedes contactarme en
• mauro@limelighthealth.com
• @mauropm – twitter
• https://medium.com/@mauropm

AWS Summit Mexico City 2018 - Usando Elastic Beanstalk

  • 1.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Mauro Parra-Miranda Senior DevOps @ Limelight Health, Inc. Deployment de NodeJS con AWS Elastic Beanstalk
  • 2.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. ¿Quién soy? • Mauro Parra-Miranda • He trabajado con UNAM, SEP, Novell, SUSE, ex-Ximian, Appcelerator – Co-fundador de Open Enchilada • He contribuido en proyectos como openSUSE y Mozilla. • Administrador de Linux en el Mainframe desde 2004 con SLES • Experiencia con AWS desde 2006 (EC2) • Actualmente trabajo como Senior DevOps en:
  • 3.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Agenda • ¿Qué es AWS Elastic Beanstalk? • Consideraciones de módulos de nodejs para elastic beanstalk • ¿Cómo crear zip files para Elastic Beanstalk? • Deployment de un proyecto NodeJS en Elastic Beanstalk • Configuraciones interesantes para Elastic Beanstalk • Conclusiones
  • 4.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved.
  • 5.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Creando un proyecto sencillo • Abrimos una terminal (linux / mac) • Corremos $ node --version / npm para ver si esta instalado (en caso de que no, apt-get install node npm --y o brew install node) • Instalamos express application generator: $ npm install express-generator –g (se root o usa sudo para el –g) • Corremos el express generator: $ express --view=pug myapp • Configuran y corran la aplicación: $ cd myapp && npm install && npm start • (Revisen localhost:3000 – el port default de express)
  • 6.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Notas a considerar • Nuestro proyecto ya esta corriendo en Node v8, por lo que ya existe un package-lock.json – Ese archive les ayuda a establecer un set “fijo” de versiones de modulos de node que funcionan correctamente con su app. • Correr el npm-install nos genera un directorio de node_modules. Normalmente ustedes no quieren usarlo en otro lado, sin embargo en el caso de un deployment en AWS Elastic Beanstalk si lo deseas, porque en caso de que npm este caído o exista algún paquete roto, no quieres que en cada instancia en producción que levante por ti el elastic beanstalk, falle.
  • 7.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Algunos cambios Ya que probamos la version inicial, necesitamos: • $ npm install dotenv –save • $ emacs –nw app.js (si no tienen emacs, instalenlo via apt-get install o brew install) • Anexen hasta arrriba la línea: • Require(‘dotenv’).load() • Editen y anexen una línea despues del var app = express(); • app.set(‘port’, process.env.PORT || 3000); • Creen un .env • $ emacs –nw .env • Anexen una línea: • PORT=8888 • Salven el archivo y corran de Nuevo: • $ npm start • Abran su navegador a localhost:8888
  • 8.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Creando zipfiles para Elastic Beanstalk • Remuevan package.json • $ mv package.json my-package.json • Empaquen todo: • $ zip –r ../fistdeployment.zip .env * • La razón por la que renombro el archive package.json es para que Elastic beanstalk no corra npm install cada vez que quiera correr una nueva instancia.
  • 9.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Deployment • Ve a http://console.aws.amazon.com/ • Logueate con tus credenciales personales • Busca “Elastic Beanstalk” • Select a platform – NodeJS • Launch Now • Create a new environment (o espera a que AWS cree el primero por ti). • Se crea un S3 bucket para los zip files • Se crea una entrada en la página de versiones (limitado a 1000 versiones por proyecto – suena mucho pero en efecto se puede terminar rápido) • Se crean una serie de máquinas para que corran tu servidor web. • Se crea un load balancer
  • 10.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Deployment – Configuración del software • Ve a Configuration -> Software Configuration -> Container options • Cambiemos Node version a 8.11.1 • Cambiemos el node command a node ./bin/www • Click en Apply • Esperar un poco • Clickear en la URL que te indique el Elastic beanstalk que apunta tu loadbalancer: http://default-environment.hgetzamh4m.us-west-2.elasticbeanstalk.com/
  • 11.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Configuraciones interesantes • ¿Qué tanto quieres escalar? • Cambiar tipo de máquina • Cambiar reglas para escalar • Modificar o crear reglas especificas para que se apaguen servicios durante la noche • Cómo deployeas • ¿por qué el .env file es interesante? • Balanceo de Cargas – SSL – Certificados • Logs • Alarmas
  • 12.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Comparaciones de costo de tu operación (Oregon) EC2 Instance type RAM CPU Price Per hour m5.large 8GB RAM 2VCPU 0.096 # Servidores Horas Costo Subtotal 2 12 0.096 $ 2.30 4 4 0.096 $ 1.54 40 3 0.096 $ 11.52 4 4 0.096 $ 1.54 60 1 0.096 $ 5.76 24 $ 22.66 Costo por dia de OPS $ 679.68 Costo mensual de OPS EC2 Instance type RAM CPU Price Per hour m5.large 8GB RAM 2VCPU 0.096 # Servidores Horas Costo Subtotal 2 4 40 4 60 22 24 0.096 $ 50.69 Costo por dia de OPS $ 1,520.64 Costo mensual de OPS Autoscale Fixed
  • 13.
    © 2018, AmazonWeb Services, Inc. or its affiliates. All rights reserved. Puedes contactarme en • mauro@limelighthealth.com • @mauropm – twitter • https://medium.com/@mauropm