México D.F.
Implementación y gestión de websites/webapps
Introducción a AWS Elastic Beansltak
Damián Traverso – AWS Solutions Architect [email protected]
Agenda • Qué es Elastic Beanstalk?
• Cómo funciona Elastic Beanstalk?
• Deployment de una aplicación PHP
• Zero Downtime Deployment
• Auto-Scaling
• Q&A
Qué es AWS Elastic Beanstalk?
Qué es AWS Elastic Beanstalk?
• Es un servicio utilizado para la implementación y gestión de aplicaciones
• Variedad de lenguajes disponibles: • Java • .NET • Python • Ruby • PHP • Docker • node.js
Qué es AWS Elastic Beanstalk?
• Con sólo subir el código, Elastic Beansltak se encarga de las siguientes tareas: • Provisionamiento de recursos • Instalación de paquetes necesarios del Sistema Operativo • Deployment del código fuente • Escalamiento automático (adicionar o remover recursos) • Monitoreo
• Permite centralizar archivos de log en S3 y monitorear los mismos
• No se cargan tarifas adicionales, sólo se paga por los recursos de AWS que sean
necesarios para ejecutar sus aplicaciones
Qué es AWS Elastic Beanstalk?
• Con Elastic Beanstalk, los desarrolladores cuentan con el control absoluto sobre los recursos de AWS que potencian la aplicación
• Se pueden realizar una gran variedad de funciones, entre otras: • Seleccionar el tipo de instancia Amazon EC2 más apropiado que coincida conlos requisitos
de memoria de la aplicación y la CPU. • Habilitar a instancias de Amazon EC2 para la resolución inmediata y directa de problemas • Mejorar de manera rápida la disponibildiad de la aplicación ejecutándola en más de una
zona de disponibilidad • Ajustar la configuración del servidor de la aplicación (por ejemplo, la configuración de JVM)
y pasar las variables de entorno
Qué es AWS Elastic Beanstalk?
• Algunos de los recursos AWS que pueden ser provisionados e integrados: • Elastic Load Balancers • Auto-Scaling Groups • Instancias RDS • Tablas de DynamoDB • Nodos de ElastiCache • SQS (Simple Queue Service)
Qué es AWS Elastic Beanstalk?
• Puede ser utilizado desde: 1. AWS Management Console 2. EB Command Line Interface (integración con Git) 3. AWS Command Line Interface 4. API usando las AWS SDKs
• Posiblidad de automatizar todo el ciclo de desarrollo
Cómo funciona?
Cómo funciona? Componentes:
1. Application 2. Application Version 3. Environment 4. Environment Configuration 5. Configuration Template
Cómo funciona?
• Environment Tiers: • Web Server Tier • Worker Tier
• Environment Types: • Single Instance • Load Balancing, auto scaling
Web Server Environment Tier
Deployment de una aplicación PHP
Creación del paquete con el código fuente
$ mkdir roadshowdemo
$ cd roadshowdemo/
$ cat << EOF >> index.php
> <?php
>
> echo "<h1>AWS Elastic Beanstalk PHP Sample Application</h1>\n";
>
> ?>
> EOF
$ zip ../roadshowdemo_v1.zip -r * .[^.]*
adding: index.php (stored 0%)
Zero Downtime Deployment
Zero Downtime Deployment • Actualización del código de la aplicación, sin interrumpir ni afectar el tráfico actual
• Consiste en crear un nuevo environment con la nueva versión, para luego realizar un
“swap” de URLs
• También conocido como “Blue/Green Deployment”
• Muy útil para automatizar nuevos releases con herramientas de CI
• Facilita rollbacks en caso de encontrar errores en la nueva versión, ya que la versión anterior todavía se encuentra disponible
Zero Downtime Deployment
$ cat << EOF >> index.php
> <?php
>
> echo "<h1>AWS Elastic Beanstalk PHP Sample Application</h1>\n";
>
> echo “<h2>This is Version 2</h2>\n”;
> ?>
> EOF
$ zip ../roadshowdemo_v2.zip -r * .[^.]*
adding: index.php (stored 0%)
Zero Downtime Deployment
• El swap de URLs también puede ser hecho con un registro de DNS propio del usuario
• Por ejemplo:
v1: roadshow.awsdemos.info CNAME roadshowdemo-env.elasticbeanstalk.com
v2: roadshow.awsdemos.info CNAME roadshowdemo-new-env.elasticbeanstalk.com
Integración con RDS
Integración con RDS
• Distintos escenarios posibles: 1. Crear una instancia RDS para cada environment 2. Usar instancias existentes de RDS 3. Usar otras bases de datos hosteadas en EC2
• Para evitar guardar las credenciales en el código, podemos pasar las mismas como
paramétros a los environments
• A continuación, mostraremos como usar una instancia RDS existente
Accediendo a los parámetros del environment
Auto-Scaling
Auto-Scaling • Elastic Beanstalk escala automáticamente las aplicaciones
• Es posible escoger las condiciones en las cuales los eventos de escalado serán
ejecutados. Algunos ejemplos: • Utilización de CPU • Network Out / Network In • Latencia • Métricas propias generadas por la aplicación
• Control total sobre: cantidad de instancias a adicionar o remover, tiempo de espera
entre eventos, umbrales, etc
Auto-Scaling • Usando la herramienta Apache Benchmark, vamos a demostrar como funciona Auto-
Scaling
• El siguiente comando generará 50.000 requests HTTP a nuestra aplicación
• La aplicación tiene reglas de Auto-Scaling configuradas para: • Adicionar instancias cuando el uso de CPU sea mayor a 50% durante 1 minuto • Remover instancias cuando el uso de CPU sea menor a 20% durante 1 minuto
$ ab -n 50000 -c 2 http://roadshowdemo-autoscale.elasticbeanstalk.com/index.php
AWS Command Line Interface
AWS Command Line Interface
$ aws elasticbeanstalk create-application --application-name RoadShowCLI \
--description "Sample app from AWS CLI”
• Creamos una aplicación
$ aws elasticbeanstalk create-application-version --application-name RoadShowCLI \
--version-label AWSCLIv1 \
--source-bundle S3Bucket=elasticbeanstalk-us-east-1-903745515320,S3Key=2014225usa-
roadshowdemo_asg.zip
• Creamos una primera versión de la aplicación. El paquete .zip se encuentra en S3
AWS Command Line Interface
$ aws elasticbeanstalk create-configuration-template --application-name "RoadShowCLI" --template-name
AutoScalingCPUv2 --source-configuration
ApplicationName=RoadShowDemo,TemplateName="AutoScalingCPU v2”
• Guardamos la configuración de un ambiente existente (podemos crear una nueva)
$ aws elasticbeanstalk create-environment --application-name RoadShowCLI \
--version-label AWSCLIv1 --environment-name roadshow-cli --cname-prefix roadshow-cli --template-name
AutoScalingCPUv2
• Finalmente creamos el environment
Q&A
Gracias!!
Damián Traverso – AWS Solutions Architect [email protected]