Click here to load reader
Upload
mariano-german-egui
View
255
Download
2
Embed Size (px)
Citation preview
AWS Elastic Beanstalk
+ Docker
@EguiMariano
About me...Mariano Germán Egui
Trabajo como desarrollador webMe gustan las buenas prácticasMe preocupa la seguridad de la aplicaciónParticipó de Meetups y voy a conferencias relacionadas a desarrollo e InfraestructuraSoy 100% amateur, programo en muchos lenguajes y me mande hacer el elefante de PHP
Twitter: @eguimariano
@EguiMariano
Amazon Web Services (AWS) es una plataforma de servicios cloud que ofrece potencia de cómputo, almacenamiento en bases de datos, entrega de contenido y otra funcionalidad para ayudar a la creación de aplicaciones o servicios más flexibles, escalables y fiables.
¿Que es AWS?
Fuente: https://aws.amazon.com/es/what-is-aws/
@EguiMariano
¿Que es Docker?
Docker permite empaquetar una aplicación con todas sus dependencias en una unidad estandarizada para el desarrollo de software.
Fuente: https://www.docker.com/what-docker
@EguiMariano
AWS Elastic Beanstalk
Con AWS Elastic Beanstalk, puede implementar y gestionar aplicaciones en la nube de AWS de forma rápida sin preocuparse por la infraestructura que ejecuta estas aplicaciones. AWS Elastic Beanstalk reduce la complejidad de la gestión sin restringir la elección o el control. Sólo tiene que cargar su aplicación y AWS Elastic Beanstalk gestiona automáticamente los detalles de aprovisionamiento de capacidad, equilibrio de carga, la escala y vigilancia de la salud de la aplicación.
Fuente: https://aws.amazon.com/en/documentation/elastic-beanstalk/
@EguiMariano
Beanstalk nos permite subir nuestras aplicaciones desentendiendo nos de su ambiente (infraestructura) de ejecución, estrategia de escalabilidad y monitoreo. Podemos subir directamente nuestro código PHP, Java, Node.Js, Python, Ruby e incluso “.NET”.
¿Pero es lo que realmente queremos?
Los que trabajamos en el caos (con VIM en producción) sabemos que la pérdida de performance, la posible caída de nuestra aplicación o la congestión de nuestro network, no siempre es la consecuencia de nuestro código, la coexistencia con proceso en el servidor (BATCH) y la configuración del mismo, nos recuerda que nuestra aplicación es dependiente de nuestro ambiente (infraestructura).
@EguiMariano
¿Entonces por que Beanstalk?
@EguiMariano
● Contiene la aplicación con su ambiente (code, runtime, system tools, system libraries)
Nos garantiza que siempre se ejecutará la misma aplicación, independientemente del entorno en el que se está ejecutando.
Beanstalk● Configurable● Sencillez para desplegar● Facilidades para escalar● Herramientas de monitoreo
Nos garantiza que nuestra aplicación este uptime y performe en caso de aumentar nuestro tráfico.
Docker
@EguiMariano
Beanstalk + Docker
● Facil de configurar● Facil de desplegar● Facil de escalar● Facil de monitorear● Garantiza el ambiente de ejecución
@EguiMariano
OK, let's go!
1. Instalar Docker2. Crea una imagen de Docker3. Subir imagen a Docker Hub
1. Crea una cuenta de AWS2. Crea y configura un
servicio de Beanstalk3. Adjunta el JSON que invoca
la imagen de Docker Hub
@EguiMariano
https://github.com/megui88/demo-docker
Instalar Docker, crear y subir una imagen a Docker Hub~➤ sudo apt-get install docker.io
~➤ echo 'FROM ubuntu:14.04.4 MAINTAINER Mariano Egui <[email protected]>RUN apt-get updateRUN apt-get -y install apache2EXPOSE 80CMD /usr/sbin/apache2ctl -D FOREGROUND
' > Dockerfile
~➤ sudo docker build -t megui88/demo-apache . Sending build context to Docker daemon Step 0 : FROM ubuntu:14.04.414.04.4: Pulling from ubuntuc5bd5ad78820: Downloading [=======================> ] 55.67 MB/65.69 MBc0f170469eea: Download complete be70b523781c: Download complete
~➤ sudo docker images
~➤ sudo docker run -p 8080:80 -ti megui88/demo-apache
~➤ sudo docker tag imageID megui88/demo-apache:latest
~➤ sudo docker push megui88/demo-apache:latest The push refers to a repository [megui88/demo-apache] (len: 1)bfd32ee9f6f3: Image push failed Please login prior to push:Username: megui88Password: Email: [email protected]: login credentials saved in /home/megui/.dockercfg.Login SucceededThe push refers to a repository [megui88/demo-apache] (len: 1)bfd32ee9f6f3: Image already exists a800bc297d49: Image successfully pushed a6ee75b6a5af: Pushing [==> ] 262.1 kB/5.274 MB
https://hub.docker.com/r/megui88/demo-apache/
@EguiMariano
AWS JSON Dockerrun.aws.json~➤ echo ‘
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "megui88/demo-apache", "Update": "true" }, "Ports": [ { "ContainerPort": "80" } ]}
‘ > Dockerrun.aws.json
@EguiMariano
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html