Skip to content

AWS Well Architected Framework

The Well Architected Framework

Cuando una aplicación se ejecuta dentro de cualquier infraestructura se espera que tenga un buen desempeño, que sea segura y que sea eficiente en temas de costo. AWS no sólo hace posible cumplir con estas expectativas también provee una serie de principios para ayudarnos a lograrlas, The Well Architected Framework codifica estos principios y los organiza dentro de 5 pilares:

  • Fiabilidad
  • Desempeño Eficiente
  • Seguridad 
  • Optimización de costos
  • Excelencia Operacional

The Well Architected Framework es un conjunto de principios que AWS recomienda con el fin de evaluar los pro y los contra de diseñar e implementar aplicaciones en la nube. Detallamos un poco más estos 5 pilares:

Fiabilidad

La fiabilidad significa evitar que tu aplicación falle completamente, dependiendo de la arquitectura de tu aplicación puede depender de muchos recursos entre los que podrían ser almacenamiento, base de datos y recursos de redes. Para evitar que tu aplicación falle en su totalidad requiere de 2 cosas lo primero es esforzarte para que ningún recurso de los que tu aplicación depende falle, un recurso puede fallar debido a una mala configuración, alguna sobrecarga o algún apagado accidental o intencional y Segundo cuando alguno de estos fallos ocurren lo cual inevitablemente pasará en algún momento se debe reemplazar el recurso por uno que funcione correctamente, reemplazar un recurso en lugar de tratar de repararlo elimina la necesidad de idear diferentes procedimientos para hacer frente a estas fallas.

Desempeño eficiente

El desempeño eficiente se refiere a obtener el desempeño que tú deseas sin la necesidad de aprovisionar recursos en exceso, pero sin sacrificar la fiabilidad. Cuando se provisiona una infraestructura se espera tener suficientes recursos para proveer redundancia cuando alguno de los recursos falle y también se espera que se puedan agregar recursos si la demanda se incrementa, pero también es de suma importancia asegurar que en cualquier momento se cuente con la cantidad de recursos necesarias para cumplir con los requerimientos de disponibilidad y desempeño sin la necesidad de excederse en esta cantidad de recursos provisionados. 

El desempeño y la fiabilidad están muy relacionadas, si un recurso está siendo utilizado en exceso es muy probable que la aplicación no se esté desempeñando de la forma esperada, ese recurso está propenso a fallar lo cual haría que tu aplicación deje de funcionar por este uso excesivo. El monitoreo de la utilización y el desempeño de todos los recursos que componen la infraestructura de nuestra aplicación es de vital importancia porque permite hacer esos ajustes que beneficiarán tanto al desempeño como a la fiabilidad. El performance de una aplicación no solo es determinado por el poder y la cantidad computacional de tu CPU o recursos de almacenamiento también es determinado por el desempeño del networking entre tus recursos y el usuario final, por ejemplo, se puede tener una aplicación ejecutándose en una región de los Estados Unidos y los usuarios de ese país obtendrán un gran rendimiento, pero los usuarios de Australia pueden obtener un rendimiento pobre debido a la latencia entre ellos y la aplicación, esto dentro de AWS puede solucionarse utilizando servicios como cloudfront por nombrar alguno.

Seguridad

La seguridad se preocupa por asegurar la confidencialidad, integridad y disponibilidad de la Data. Esto se refiere a que solo las personas y sistemas que necesiten acceder a la data puedan hacerlo y esta data también necesita estar protegida de modificaciones no autorizadas. Cuando se trata de asegurar la data almacenada dentro de recursos en AWS es importante tener en cuenta los siguientes principios:

  • Seguir el principio de privilegios mínimos a la hora de crear usuarios IAM y políticas. Esto garantiza que solo los recursos puedan ser modificados o accedidos por quienes necesitan 
  • Evitar la pérdida de data utilizando backups o replicación, el uso Elastic Block Store (EBS) Snapshots puede servir para crear puntos de restauración para las instancias EC2. Configurar el versionado y la replicación para los objetos S3 hace posible poder recuperar data modificada o destruida. 
  • Reforzar la confidencialidad usando encriptación para la data almacenada dentro de AWS y también para la data en tránsito que se mueve hacia tu infraestructura en AWS y fuera de ella.
  • Monitorear cada actividad que ocurre con tus recursos dentro de AWS habilitando el logging detallado, esto nos permite saber cómo se están desempeñando nuestros procedimientos de seguridad en AWS y también permite identificar incidentes de seguridad durante o después de que ocurren.

Optimizacion de Costos

La optimización de costos no se trata de llevar tus gastos lo más cercano a 0 como sea posible. En lugar de ello se logra una optimización de costos cuando se usan los servicios cloud para cubrir tus necesidades al menor costo posible. Por ejemplo, si la fiabilidad es muy importante para ti y reduces los costos de tal manera que tu aplicación ahora es menos fiable entonces no estarías aplicando correctamente la optimización de costos.

El primer paso para lograr una optimización de costos es analizar en donde se está gastando el dinero. El uso de AWS cost explorer y de los reportes Cost and Usages muestran en qué servicios se están generando más gastos y cómo estos gastos han variado durante un periodo de tiempo.

Una de las maneras más efectivas de lograr una optimización de costos es pagar sólo por los recursos que se necesitan en un periodo de tiempo. Por ejemplo, si hay una instancia, EC2 que solo se usa unas pocas veces al mes para testing, se puede ahorrar dinero destruyendo dicha instancia cuando no está en uso. También algo muy importante que permite una efectiva optimización de costos es tratar de preservar los recursos que sean posibles ya que este modelo de facturación ofrece unos descuentos considerables en comparación que los modelos de facturación bajo demanda.

Excelencia Operacional

La excelencia operacional es fundamentalmente tratar de automatizar los procesos que se requieren para lograr y mantener los otros cuatros objetivos fiabilidad, desempeño eficiente, optimización de costos y seguridad. En la práctica son pocas las empresas que logran automatizar absolutamente todo así que la excelencia operacional es más un enfoque que se alcanza paso a paso. La idea detrás de la excelencia operacional es ir mejorando y automatizando las actividades incrementalmente con el propósito de fortalecer los otros pilares. Veamos algunos ejemplos de cómo la automatización puede ayudar a lograr la excelencia operacional:

Fiabilidad: El uso de ELB health checks para monitorear la salud de una aplicación que se ejecuta en varias instancias EC2. cuando una instancia falla el tráfico de los usuarios ya no es enviado a la instancia que presenta el problema en su lugar la instancia se destruye y se crea una nueva.

Desempeño eficiente: El uso de Auto scaling para dinámicamente escalar la instancias EC2 de ser necesario y para mantener siempre la cantidad  de instancias que tu aplicación necesita para funcionar de manera eficiente. 

Seguridad: El uso de codebuild para automáticamente realizar test sobre el código de la aplicación en busca de vulnerabilidades. El uso de cloudformation para automáticamente desplegar una infraestructura segura y nueva en lugar de realizar despliegues de forma manual.

Optimización de costos: Automáticamente apagar o terminar instancias que no están en uso. Otro ejemplo podría ser implementar una configuración de ciclo de vida para los objetos en S3 para eliminar objetos que no sean necesarios.

Ten en cuenta que estos son solo algunos ejemplos que pudieran ayudar con la automatización de algunos procesos para alcanzar la excelencia operacional. Muchas oportunidades de automatización no son obvias hasta que ocurre un fallo, entender cómo los fallos pueden afectar a tu aplicación es la mejor forma de evitarlos en un futuro y así poder automatizar la forma de recuperarse si alguno de esos fallos se presenta.

Como vemos lograr que una aplicacion se ejecute de forma correcta dentro de AWS involucra estos 5 pilares y es importante tenerlos en cuenta ya sea que tengamos algo ejecutandose dentro de AWS o si por el contrario vamos a comenzar a usarlo, contar con estas guias desde el principio de un proyecto puede ahorrarnos muchos dolores de cabeza en el futuro.

Published inAWSCloud Computing

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *