Mi experiencia con Amazon AWS EC2 y S3




                           Alejandro E Brito Monedero
                           @ae_bm
Agenda
–   Hablemos de AWS
–   AWS + Yo
–   Extras
–   Un poco de ec2-command-line
–   Preguntas
–   Referencias y créditos
AWS es ...
●   Proveedor IaaS (A.K.A la nube)
●   Modelo pay as you go
●   Virtualización con Xen
●   Otra forma de “pensar” la arquitectura de
    aplicaciones
●   Gestión de recursos de infraestructura a
    través de un API
Quienes lo usan
Fin de la parte de marketing
Conceptos importantes
●   Región
        –   Zona geográfica donde están ubicados un
             conjunto de AZs
        –   Cada región es independiente de las otras
●   Availability Zone (AZ)
        –   Es un datacenter
        –   Varios AZs conforman una región
        –   Los AZs de una región están interconectados
             por enlaces de baja latencia
Conceptos importantes
●   Amazon Machine Image (AMI)
●   Amazon Elastic Compute Cloud (EC2)
       –   Servicio Web que ofrece capacidad de
            computo
●   Amazon Simple Storage Service S3
       –   Almacén de datos no estructurados con alta
             disponibilidad y durabilidad
●   Amazon Elastic Block Store (EBS)
       –   Volúmenes de almacenamiento persistentes
            para usar con instancias EC2
Instancias EC2
●   Máquinas virtuales
       –   Compartes la máquina física con otras
            instancias
       –   No se puede controlar en que máquina física
            está la instancia (ciertas condiciones
            aplican)
       –   No te encariñes a la instancia, que sea 'cloud'
            no lo hace infalible
Instancias EC2
●   2 tipos de imágenes (AMI):
       –   Instance store
               ●   Al principio era el único tipo de instancia
               ●   Imagen de tamaño limitado y guardada en S3
               ●   Actualizar el AMI es un pain in the 4$$
               ●   Se pierde cualquier cambio no este
                     almacenado en un volumen EBS
               ●   Se puede migrar la imagen entre regiones (^_^)
               ●   Si la imagen es muy grande puede tardar en
                     iniciar
Instancias EC2
●   2 tipos de imágenes (AMI):
       –   EBS-backed
              ●   Se puede detener / iniciar la instancia
                      –   No olvidar lo que pasa con los discos efímeros
              ●   Se puede cambiar el tipo de instancia
                      –   Escalado vertical
              ●   La imagen es un snapshot del volumen raíz
                   EBS en S3
              ●   No se puede migrar la imagen entre regiones
Instancias EC2 - Tipos de almacenamiento
●   Unidades de disco efímeras
        –   Disco de la máquina física
        –   El mejor I/O que se puede tener
        –   Si se apaga / bloquea / detiene la instancia
              dile adiós a tus datos (;_;)
●   EBS (discos persistentes)
        –   SAN
        –   Más lentos que los discos efímeros
        –   RAID 1
        –   Snapshots incrementales guardados en S3
             (^_^)
Cosas que hice
●   Disclaimer: Todo esto es mejorable, no es 'the
    netflix way' (-_-)
       –   Sólo probando / jugando se hace experiencia
●   Economía de guerra
       –   Misión hacer todo lo más barato posible
●   Migración de un hosting dedicado a AWS
       –   DNS con un TTL de 300 por si la cosa no iba
            bien
Cosas que hice
●   Cada máquina frontend tenia una Elastic IP
        –   No tocas los DNS
        –   Ahora también existe Amazon Route 53
●   Para enviar correo usaba gmail como smarthost
        –   No puedes cambiar los registros PTR de
             Amazon
        –   Ahora hay Amazon SES
●   AMIs del tipo Instance Store por cada rol
        –   Ahora con instancias tipo EBS +
             CloudFormation + User Data Scripts +
             devops magic debería ser más flexible
Cosas que hice
●   Firewall
        –   Usas los Security groups
        –   Ahora los security groups se pueden
             administrar usando el portal WEB
        –   Una IP externa autorizada para hacer SSH
        –   Recomendado por los expertos
                ●   Sólo permitir ssh desde un security group
                     especial
                        –   Asociado a una instancia iniciada bajo demanda
Cosas que hice
●   Backups
       –   Un volumen EBS en donde se hacían
            respaldos incrementales diarios
               ●   rsync + hard links magic
       –   Snapshots a S3 del volumen EBS 'respaldo'
       –   Pude omitir este salto intermedio, pero
            siempre pienso en la consistencia de los
            datos y eso causa insomnio (;_;)
       –   xfs_freeze, db flush dmsetup, etc, son amigos
Cosas que hice
●   Monitoring
       –   Munin
       –   Zabbix
       –   Puedes usar CloudWatch para empezar
       –   Who watches the watchmen?
               ●   “Free uptime monitoring”
●   Deploy en 1 AZ
       –   Shame on me (-_-)
       –   No comments
       –   Se deberían hacer deploys multi AZ (Hasta
            donde lleguen los $$)
Cosas que hice
●   El almacenamiento (FUN part)
       –   LVM con EBSs como PVs
       –   1 LV en 1 VG en 1 EBS
       –   Aumentaba de tamaño las particiones con una
            mezcla de vudú, vgextend, pvmove, etc.
       –   Seguro sería muy lento y I/O unfriendly
            intentarlo con EBSs muy grandes
Cosas que hice
●   El almacenamiento (FUN part)
       –   ¿Cómo mejorarlo? 'brainstorming' (en especial
            con BBDD)
               ●   Pensando en una mezcla de RAID, LVM, XFS o
                    afines si tuviera muchos discos
               ●   ¿Se pueden hacer snapshots S3 de varios
                    volúmenes EBS en el mismo instante de
                    tiempo?
               ●   Usar glusterfs o afines
               ●   Hacer los respaldos en nodos secundarios
       –   Si tu app maneja el concepto de S3 te
             ahorrarías muchos de estos 'hacks'
Cosas nuevas de Amazon AWS
●   DNS Route 53
●   Cloudfront como CDN
●   Amazon SES
●   ELB para hacer balanceo de carga (¿Usarán
    HAProxy?) (^_^)
●   Métricas con Cloudwatch
●   Escalado horizontal automático
●   SQS
●   DynamoDB
Cosas nuevas de Amazon AWS
●   Identity and Access Management (IAM)
        –   Varios perfiles de usuarios con distintos
             permisos
        –   Permite delegar, delegar, ... delegar
        –   Más tiempo libre (^_^)
●   Usar spot instances para tener más instancias
    workers a precios de solidarios
●   BBDD Oracle, MySQL, MS-SQL gestionadas por
    Amazon
●   Etc (sacan cosas nuevas a cada rato)
●   Algo divertido: buscar 'Amazon Mechanical Turk'
Observaciones
●   Para tener una app en AWS y que aproveche
    la 'cloud'
       –   Necesitas a los developers, developers,
            developers, developers ...
       –   Los consejos de siempre
               ●   Ser 'fault tolerant'
               ●   Diseñar / hacer aplicaciones lo más 'stateless'
                    posible
               ●   Etc
●   El performance de red y EBS en AWS es
    variable
Observaciones
●   El HW físico aún existe
        –   A veces Amazon te informara que tiene que
              hacer mantenimiento en donde esta tu VM
        –   Otras veces el host físico hace que tu VM no
             funcione bien.
                ●   Solución: inicia una nueva instancia y termina la
                     que esta fallando
●   Con AWS lo que obtienes es una
    infraestructura dinámica y flexible, cuando no
    puedes montar tu propia 'cloud'
Lo escuche y lo olvide. Lo vi y lo entendí. Lo hice
                   y lo aprendí
                     Confucio
Créditos
 Imágenes
  –   openclipart.org/detail/2229/cloud-&-rainbow-by-
       gmcglinn
  –   www.re-cycledair.com/wp-
       content/uploads/2012/04/heroku-Logo-1.jpg
  –   www.instantpulp.com
  –   www.lomejordelface.com/wp-
       content/uploads/2011/09/piictu.jpg
  –   www.urbecom.com/blog/wp-
       content/uploads/2012/02/Logo-de-Amazon.-q.jpg
Créditos
 Imágenes
  –   wuaki.tv
  –   www.elandroidelibre.com/wp-
       content/uploads/2012/03/Instagram-Logo.jpg
  –   www.appsmashups.com/wp-
       content/uploads/2012/01/netflix.jpg
  –   www.flickr.com/photos/mcquinn/2302823476/sizes/
       m/in/photostream/
  –   www.marketingdirecto.com/wp-
       content/uploads/2012/02/pinterest12.jpg
Referencias
 Enlaces de interés
  –   alestic.com/
  –   https://github.com/boto/boto
  –   docs.amazonwebservices.com/general/latest/gr/Get
       TheTools.html
  –   aws.amazon.com/documentation/
  –   aws.amazon.com/articles/
  –   aws.amazon.com/resources/webinars/
Referencias
 Enlaces de interés
  –   aws.amazon.com/whitepapers/
  –   aws.amazon.com/architecture/
  –   reinvent.awsevents.com/
  –   docs.amazonwebservices.com/AWSEC2/latest/Use
       rGuide/FAQ_Regions_Availability_Zones.html
  –   https://forums.aws.amazon.com/thread.jspa?
        threadID=22830
Un estudiante pregunta:
      - ¿Qué es lo más valioso del mundo?

             El maestro respondió:
        - La cabeza de un gato muerto.

       El estudiante sorprendido pregunta:
-¿Por qué es la cabeza de un gato muerto la cosa
             más valiosa del mundo?

             El maestro respondió:
      - Porque nadie puede ponerle precio.

Mi experiencia con Amazon AWS EC2 y S3

  • 1.
    Mi experiencia conAmazon AWS EC2 y S3 Alejandro E Brito Monedero @ae_bm
  • 2.
    Agenda – Hablemos de AWS – AWS + Yo – Extras – Un poco de ec2-command-line – Preguntas – Referencias y créditos
  • 3.
  • 4.
    Proveedor IaaS (A.K.A la nube) ● Modelo pay as you go ● Virtualización con Xen ● Otra forma de “pensar” la arquitectura de aplicaciones ● Gestión de recursos de infraestructura a través de un API
  • 5.
  • 6.
    Fin de laparte de marketing
  • 7.
    Conceptos importantes ● Región – Zona geográfica donde están ubicados un conjunto de AZs – Cada región es independiente de las otras ● Availability Zone (AZ) – Es un datacenter – Varios AZs conforman una región – Los AZs de una región están interconectados por enlaces de baja latencia
  • 8.
    Conceptos importantes ● Amazon Machine Image (AMI) ● Amazon Elastic Compute Cloud (EC2) – Servicio Web que ofrece capacidad de computo ● Amazon Simple Storage Service S3 – Almacén de datos no estructurados con alta disponibilidad y durabilidad ● Amazon Elastic Block Store (EBS) – Volúmenes de almacenamiento persistentes para usar con instancias EC2
  • 9.
    Instancias EC2 ● Máquinas virtuales – Compartes la máquina física con otras instancias – No se puede controlar en que máquina física está la instancia (ciertas condiciones aplican) – No te encariñes a la instancia, que sea 'cloud' no lo hace infalible
  • 10.
    Instancias EC2 ● 2 tipos de imágenes (AMI): – Instance store ● Al principio era el único tipo de instancia ● Imagen de tamaño limitado y guardada en S3 ● Actualizar el AMI es un pain in the 4$$ ● Se pierde cualquier cambio no este almacenado en un volumen EBS ● Se puede migrar la imagen entre regiones (^_^) ● Si la imagen es muy grande puede tardar en iniciar
  • 11.
    Instancias EC2 ● 2 tipos de imágenes (AMI): – EBS-backed ● Se puede detener / iniciar la instancia – No olvidar lo que pasa con los discos efímeros ● Se puede cambiar el tipo de instancia – Escalado vertical ● La imagen es un snapshot del volumen raíz EBS en S3 ● No se puede migrar la imagen entre regiones
  • 12.
    Instancias EC2 -Tipos de almacenamiento ● Unidades de disco efímeras – Disco de la máquina física – El mejor I/O que se puede tener – Si se apaga / bloquea / detiene la instancia dile adiós a tus datos (;_;) ● EBS (discos persistentes) – SAN – Más lentos que los discos efímeros – RAID 1 – Snapshots incrementales guardados en S3 (^_^)
  • 13.
    Cosas que hice ● Disclaimer: Todo esto es mejorable, no es 'the netflix way' (-_-) – Sólo probando / jugando se hace experiencia ● Economía de guerra – Misión hacer todo lo más barato posible ● Migración de un hosting dedicado a AWS – DNS con un TTL de 300 por si la cosa no iba bien
  • 14.
    Cosas que hice ● Cada máquina frontend tenia una Elastic IP – No tocas los DNS – Ahora también existe Amazon Route 53 ● Para enviar correo usaba gmail como smarthost – No puedes cambiar los registros PTR de Amazon – Ahora hay Amazon SES ● AMIs del tipo Instance Store por cada rol – Ahora con instancias tipo EBS + CloudFormation + User Data Scripts + devops magic debería ser más flexible
  • 15.
    Cosas que hice ● Firewall – Usas los Security groups – Ahora los security groups se pueden administrar usando el portal WEB – Una IP externa autorizada para hacer SSH – Recomendado por los expertos ● Sólo permitir ssh desde un security group especial – Asociado a una instancia iniciada bajo demanda
  • 16.
    Cosas que hice ● Backups – Un volumen EBS en donde se hacían respaldos incrementales diarios ● rsync + hard links magic – Snapshots a S3 del volumen EBS 'respaldo' – Pude omitir este salto intermedio, pero siempre pienso en la consistencia de los datos y eso causa insomnio (;_;) – xfs_freeze, db flush dmsetup, etc, son amigos
  • 17.
    Cosas que hice ● Monitoring – Munin – Zabbix – Puedes usar CloudWatch para empezar – Who watches the watchmen? ● “Free uptime monitoring” ● Deploy en 1 AZ – Shame on me (-_-) – No comments – Se deberían hacer deploys multi AZ (Hasta donde lleguen los $$)
  • 18.
    Cosas que hice ● El almacenamiento (FUN part) – LVM con EBSs como PVs – 1 LV en 1 VG en 1 EBS – Aumentaba de tamaño las particiones con una mezcla de vudú, vgextend, pvmove, etc. – Seguro sería muy lento y I/O unfriendly intentarlo con EBSs muy grandes
  • 19.
    Cosas que hice ● El almacenamiento (FUN part) – ¿Cómo mejorarlo? 'brainstorming' (en especial con BBDD) ● Pensando en una mezcla de RAID, LVM, XFS o afines si tuviera muchos discos ● ¿Se pueden hacer snapshots S3 de varios volúmenes EBS en el mismo instante de tiempo? ● Usar glusterfs o afines ● Hacer los respaldos en nodos secundarios – Si tu app maneja el concepto de S3 te ahorrarías muchos de estos 'hacks'
  • 20.
    Cosas nuevas deAmazon AWS ● DNS Route 53 ● Cloudfront como CDN ● Amazon SES ● ELB para hacer balanceo de carga (¿Usarán HAProxy?) (^_^) ● Métricas con Cloudwatch ● Escalado horizontal automático ● SQS ● DynamoDB
  • 21.
    Cosas nuevas deAmazon AWS ● Identity and Access Management (IAM) – Varios perfiles de usuarios con distintos permisos – Permite delegar, delegar, ... delegar – Más tiempo libre (^_^) ● Usar spot instances para tener más instancias workers a precios de solidarios ● BBDD Oracle, MySQL, MS-SQL gestionadas por Amazon ● Etc (sacan cosas nuevas a cada rato) ● Algo divertido: buscar 'Amazon Mechanical Turk'
  • 22.
    Observaciones ● Para tener una app en AWS y que aproveche la 'cloud' – Necesitas a los developers, developers, developers, developers ... – Los consejos de siempre ● Ser 'fault tolerant' ● Diseñar / hacer aplicaciones lo más 'stateless' posible ● Etc ● El performance de red y EBS en AWS es variable
  • 23.
    Observaciones ● El HW físico aún existe – A veces Amazon te informara que tiene que hacer mantenimiento en donde esta tu VM – Otras veces el host físico hace que tu VM no funcione bien. ● Solución: inicia una nueva instancia y termina la que esta fallando ● Con AWS lo que obtienes es una infraestructura dinámica y flexible, cuando no puedes montar tu propia 'cloud'
  • 24.
    Lo escuche ylo olvide. Lo vi y lo entendí. Lo hice y lo aprendí Confucio
  • 25.
    Créditos Imágenes – openclipart.org/detail/2229/cloud-&-rainbow-by- gmcglinn – www.re-cycledair.com/wp- content/uploads/2012/04/heroku-Logo-1.jpg – www.instantpulp.com – www.lomejordelface.com/wp- content/uploads/2011/09/piictu.jpg – www.urbecom.com/blog/wp- content/uploads/2012/02/Logo-de-Amazon.-q.jpg
  • 26.
    Créditos Imágenes – wuaki.tv – www.elandroidelibre.com/wp- content/uploads/2012/03/Instagram-Logo.jpg – www.appsmashups.com/wp- content/uploads/2012/01/netflix.jpg – www.flickr.com/photos/mcquinn/2302823476/sizes/ m/in/photostream/ – www.marketingdirecto.com/wp- content/uploads/2012/02/pinterest12.jpg
  • 27.
    Referencias Enlaces deinterés – alestic.com/ – https://github.com/boto/boto – docs.amazonwebservices.com/general/latest/gr/Get TheTools.html – aws.amazon.com/documentation/ – aws.amazon.com/articles/ – aws.amazon.com/resources/webinars/
  • 28.
    Referencias Enlaces deinterés – aws.amazon.com/whitepapers/ – aws.amazon.com/architecture/ – reinvent.awsevents.com/ – docs.amazonwebservices.com/AWSEC2/latest/Use rGuide/FAQ_Regions_Availability_Zones.html – https://forums.aws.amazon.com/thread.jspa? threadID=22830
  • 29.
    Un estudiante pregunta: - ¿Qué es lo más valioso del mundo? El maestro respondió: - La cabeza de un gato muerto. El estudiante sorprendido pregunta: -¿Por qué es la cabeza de un gato muerto la cosa más valiosa del mundo? El maestro respondió: - Porque nadie puede ponerle precio.