AWS CCP Parte 1 - Conceptos de la nube de AWS.

July 20, 2020

aws

1. La Nube

Wikipedia define la nube como un paradigma que permite ofrecer servicios de computación a través de una red, que es usualmente internet.

1.1 La nube de AWS y su propuesta de valor

Cloud computing es la práctica de utilizar una red de servidores remotos alojados en Internet para almacenar, administrar y procesar datos, en lugar de un servidor local o una computadora personal.

AWS Amazon Web Services (AWS) es una plataforma segura de servicios en la nube, que ofrece potencia informática, almacenamiento de bases de datos, entrega de contenido y otras funcionalidades para ayudar a las empresas a crecer y crecer. Millones de clientes aprovechan actualmente los productos y soluciones en la nube de AWS para crear aplicaciones sofisticadas con mayor flexibilidad, escalabilidad y confiabilidad.

AWS Cloud proporciona un amplio conjunto de servicios de infraestructura (más de 175 servicios disponibles), como potencia de cómputo, opciones de almacenamiento, redes y bases de datos, entregados como una utilidad: bajo demanda, disponible en segundos, con pago por uso. Está disponible con 77 zonas de disponibilidad en 24 regiones geográficas de todo el mundo. https://aws.amazon.com/es/what-is-aws/

La propuesta de valor de AWS (AWS Value Proposition)

Principio Conceptos
Agildad (Agility) - Velocidad de implementación de los servicios.
- Experimentación
- Innovacion
Elasticidad (Elasticity) - Escala bajo demanda
- Eliminar la capacidad desperdiciada
Flexibilidad (Flexibility) - Amplio conjunto de productos
- Bajo o sin costo de entrada
Seguridad (Security) - Amazon ha adquirido muchas certificaciones
- Modelo de responsabilidad compartida (Shared responsibility model)

Ref: https://www.testpreptraining.com/tutorial/aws-cloud-practitioner/define-the-aws-cloud-and-its-value-proposition/

Seis ventajas de Cloud Computing

1. Intercambio de gastos de capital por gastos variables: En lugar de invertir grandes canditades de dinero en data centers y servidores, aún antes de saber como se utilizarán, aws nos permite pagar unicamente por los recursos computacionales y pagar unicamente por lo que se consume.

2. Economía de escala masiva: Al usar la computación en la nube, puede lograr un costo variable más bajo que el que puede obtener por su cuenta. Debido a que el uso de cientos de miles de clientes se agrega en la nube, los proveedores como AWS pueden lograr mayores economías de escala, lo que se traduce en precios más bajos de pago por uso.

3. Dejar de adivinar la capacidad: Se debe eliminar las conjeturas sobre las necesidades de capacidad de infraestructura. Cuando se toma una decisión de capacidad antes de implementar una aplicación, a menudo se termina utilizando recursos inactivos caros o lidiando con una capacidad limitada. Con la computación en la nube, estos problemas desaparecen. Se puede acceder a tanta o tan poca capacidad como necesite y escalar hacia arriba y hacia abajo según sea necesario con solo unos minutos de aviso.

4. Aumentar la velocidad y la agilidad: En un entorno de computación en la nube, los nuevos recursos de TI están a solo un clic de distancia, lo que significa que reduce el tiempo para poner esos recursos a disposición de sus desarrolladores de semanas a solo minutos. Esto da como resultado un aumento dramático en la agilidad para la organización, ya que el costo y el tiempo que lleva experimentar y desarrollar es significativamente menor.

5. Dejar de gastar dinero ejecutando y manteniendo centros de datos: Se debe concentrar en proyectos que diferencien el negocio, no la infraestructura. La computación en la nube permite enfocarse en sus propios clientes, en lugar de en el trabajo pesado de estanterías, apilamiento y alimentación de servidores.

6. Globalización en minutos: Implementar fácilmente una aplicación en múltiples regiones de todo el mundo con solo unos pocos clics. Esto significa que puede proporcionar una latencia más baja y una mejor experiencia para los clientes a un costo mínimo.

1.2 Identificar aspectos de la economía de la nube de AWS

Precios de pago por uso (pay-as-you-go)

AWS no requiere compromisos de gasto mínimo ni contratos a largo plazo. Reemplaza los grandes gastos iniciales con pagos variables bajos que solo se aplican a lo que usa. Con AWS no está obligado a acuerdos de varios años ni a modelos de licencia complicados.

Precios escalonados (use más, pague menos) (Tiered Pricing (Use More, Pay Less))

Para el almacenamiento y la transferencia de datos, AWS sigue un modelo de precios por niveles. Cuanto más almacenamiento y transferencia de datos utilice, menos pagará por gigabyte. Además, los clientes disponen de descuentos por volumen y precios personalizados para proyectos de gran volumen con requisitos únicos.

Optimización de costos (Cost Optimization)

Cost Explorer es una herramienta gratuita que proporciona informes preconfigurados para consultas de gastos habituales de AWS para períodos actuales e históricos, así como previsiones. También permite personalizar los informes para satisfacer necesidades específicas o descargar información de facturación para usarla en herramientas de analisis propias .

Asesor de confianza (Trusted Advisor)

Trusted Advisor inspecciona el entorno de AWS para encontrar oportunidades que puedan ahorrar dinero, mejorar el rendimiento del sistema, aumentar la confiabilidad de las aplicaciones y ayudar a implementar las mejores prácticas de seguridad. Desde 2013, los clientes han visto más de 2.6 millones de recomendaciones de mejores prácticas y han obtenido más de $ 350 millones en reducciones de costos estimadas.

1.3 Enumerar los diferentes principios de diseño de la arquitectura en la nube.

El marco de trabajo bien diseñado (The Well-Architected framework) ha sido desarrollado para ayudar a los arquitectos de la nube a construir la infraestructura más segura, de alto rendimiento, resistente y eficiente posible para sus aplicaciones. Este marco proporciona un enfoque coherente para que los clientes y socios evalúen arquitecturas, y proporciona orientación para ayudar a implementar diseños que se adaptarán a las necesidades de su aplicación con el tiempo.

AWS Well-Architected Framework se basa en cinco pilares: seguridad, confiabilidad, eficiencia de rendimiento, optimización de costos y excelencia operativa:

Pilar Descripcion
Seguridad La capacidad de proteger la información, los sistemas y los activos al tiempo que ofrece valor comercial a través de evaluaciones de riesgos y estrategias de mitigación.

El pilar de seguridad se centra en proteger la información y los sistemas. Los temas clave incluyen la confidencialidad e integridad de los datos, identificar y administrar quién puede hacer qué con la administración de privilegios, proteger los sistemas y establecer controles para detectar eventos de seguridad.
Fiabilidad (Reliability) La capacidad de un sistema para recuperarse de fallas de infraestructura o servicio, adquirir dinámicamente recursos informáticos para satisfacer la demanda y mitigar interrupciones tales como configuraciones incorrectas o problemas de red transitorios.

El pilar de confiabilidad se centra en la capacidad de prevenir y recuperarse rápidamente de fallas para satisfacer la demanda comercial y de los clientes. Los temas clave incluyen elementos fundamentales en torno a la configuración, los requisitos de proyectos cruzados, la planificación de recuperación y cómo manejamos el cambio.
Eficiencia en el desempeño (Performance Efficiency) La capacidad de utilizar los recursos informáticos de manera eficiente para cumplir con los requisitos del sistema y mantener esa eficiencia a medida que la demanda cambia y las tecnologías evolucionan.

El pilar de eficiencia de rendimiento se centra en el uso eficiente de los recursos informáticos y informáticos. Los temas clave incluyen seleccionar los tipos y tamaños de recursos correctos en función de los requisitos de carga de trabajo, monitorear el desempeño y tomar decisiones informadas para mantener la eficiencia a medida que evolucionan las necesidades comerciales.
Optimización de costos La capacidad de evitar o eliminar costos innecesarios o recursos subóptimos.

La optimización de costos se enfoca en evitar costos innecesarios. Los temas clave incluyen comprender y controlar dónde se gasta el dinero, seleccionar la cantidad más adecuada y adecuada de tipos de recursos, analizar el gasto a lo largo del tiempo y escalar para satisfacer las necesidades comerciales sin gastar de más.
Excelencia operacional La capacidad de ejecutar y monitorear sistemas para entregar valor comercial y mejorar continuamente los procesos y procedimientos de soporte.

El pilar de excelencia operativa se enfoca en ejecutar y monitorear sistemas para brindar valor comercial y mejorar continuamente los procesos y procedimientos. Los temas clave incluyen administrar y automatizar cambios, responder a eventos y definir estándares para administrar con éxito las operaciones diarias.

Estos principios se describirán con mayor detalle a continuación.

Principios Básicos (Core principles)

1. Escalabilidad
2. Recursos desechables en lugar de servidores fijos
3. Automatización
4. Bajo acoplamiento
5. Servicios, no servidores
6. Databases
7. Administrar volúmenes crecientes de datos
8. Eliminar puntos únicos de falla
9. Optimizar para el costo
10. Almacenamiento en caché (Caching)
11. Seguridad
Escalabilidad

La elasticidad y la escalabilidad son dos principios fundamentales de la arquitectura de la nube que guían la arquitectura de AWS.

La elasticidad es la capacidad de utilizar los recursos de forma dinámica y eficiente, de modo que se evita el patrón tradicional de sobreaprovisionamiento de recursos de infraestructura para hacer frente a los requisitos de capacidad. Significativamente, la elasticidad evita los costos de estos recursos sobreaprovisionados, como la energía, el espacio y el mantenimiento. Este es el modelo AWS pay as you go / pay for you you use.

La escalabilidad es la capacidad de escalar sin cambiar el diseño. Con AWS, la escalabilidad se logra mediante el escalado horizontal. Los componentes de infraestructura y aplicación están diseñados con la premisa de que fallarán, en lugar de simplemente ser diseñados en torno a la Alta Disponibilidad. Los componentes tecnológicos son productos que se pueden tirar cuando fallan y crecer al agregar más cuando se les exige. Un principio rector es tener un enfoque coherente de la arquitectura y el crecimiento.

Hay dos tipos de escalamiento:

  • Escalamiento horizontal: un aumento en el número de recursos. Autoescalado y Bootstrapping se utilizan para el escalado horizontal. El escalado automático le permite escalar automáticamente horizontalmente para acomodar la carga. Bootstrapping le permite configurar automáticamente sus servidores después de que se inicien. (Uso de componentes como Amazon Machine Images (AMI) y CloudFormation para automatizar).
  • Escalamiento vertical: un aumento en las capacidades del recurso (por ejemplo, CPU más rápida, más memoria, más almacenamiento).
Recursos desechables en lugar de servidores fijos
  • Los recursos deben tratarse como recursos temporales disponibles en lugar de recursos locales permanentes fijos antes.
  • AWS se centra en el concepto de infraestructura inmutable: un servidor, una vez lanzado, nunca se actualiza durante su vida útil. Las actualizaciones se pueden realizar en un nuevo servidor con la última configuración. Esto garantiza que los recursos estén siempre en un estado coherente (y probado) y reversiones más fáciles.
  • AWS ofrece varias formas de crear instancias de recursos informáticos de forma automatizada y repetible:

    • Bootstrapping: scripts para configurar y configurar, p. Ej. usando scripts de datos y cloud-init para instalar software o copiar recursos y código
    • Golden Images: una instantánea de un estado particular de ese recurso. Permite tiempos de inicio más rápidos y elimina las dependencias de los servicios de configuración o repositorios de terceros.
    • Containers: soporte de AWS para imágenes de Docker a través de Elastic Beanstalk y ECS. Docker permite empaquetar una pieza de software en una imagen de Docker, que es una unidad estandarizada para el desarrollo de software, que contiene todo lo que el software necesita para ejecutarse: código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema, etc.
    • Infrastructure as Code: los activos de AWS son programables. Se pueden aplicar técnicas, prácticas y herramientas del desarrollo de software para hacer que toda la infraestructura sea reutilizable, mantenible, extensible y comprobable. AWS proporciona servicios como CloudFormation y OpsWorks para codificar la implementación
Automatización

A diferencia de la infraestructura de TI tradicional, Cloud permite la automatización de una serie de eventos, mejorando tanto la estabilidad de su sistema como la eficiencia de su organización. Algunos de los recursos de AWS que puede usar para la automatización son:

  • AWS Elastic Beanstalk: este recurso es la forma más rápida y sencilla de poner en marcha una aplicación en AWS. Simplemente puede cargar su código de aplicación y el servicio maneja automáticamente todos los detalles, como el aprovisionamiento de recursos, el equilibrio de carga, el escalado automático y la supervisión.
  • Recuperación automática de Amazon EC2: puede crear una alarma de Amazon CloudWatch que supervise una instancia de Amazon EC2 y la recupere automáticamente si se ve afectada. Pero una advertencia: durante la recuperación de la instancia, la instancia se migra a través de un reinicio de la instancia y se pierden todos los datos que están en la memoria.
  • Auto Scaling: con Auto Scaling, puede mantener la disponibilidad de la aplicación y escalar su capacidad de Amazon EC2 automáticamente según las condiciones que defina.
  • Alarmas de Amazon CloudWatch: puede crear una alarma de CloudWatch que envíe un mensaje de Amazon Simple Notification Service (Amazon SNS) cuando una métrica en particular supere un umbral específico durante un número específico de períodos.
  • Amazon CloudWatch Events: el servicio CloudWatch ofrece una secuencia casi en tiempo real de eventos del sistema que describe los cambios en los recursos de AWS. Con reglas simples que puede configurar en un par de minutos, puede enrutar fácilmente cada tipo de evento a uno o más destinos: funciones de AWS Lambda, transmisiones de Amazon Kinesis, temas de Amazon SNS, etc.
  • Eventos del ciclo de vida de AWS OpsWorks: AWS OpsWorks admite la configuración continua a través de eventos del ciclo de vida que actualizan automáticamente la configuración de sus instancias para adaptarse a los cambios del entorno. Estos eventos se pueden usar para activar recetas de Chef en cada instancia para realizar tareas de configuración específicas.
  • Eventos programados de AWS Lambda: estos eventos le permiten crear una función Lambda y dirigir a AWS Lambda para que la ejecute en un horario regular.

Como arquitecto de AWS Cloud, estos recursos de automatización son una gran ventaja para trabajar.

Bajo acoplamiento

Las arquitecturas poco acopladas reducen las interdependencias, de modo que un cambio o falla en un componente no se transmite en cascada a otros componentes:

  • Integración asincrónica

    • no implica una interacción directa de punto a punto, pero normalmente a través de una capa de almacenamiento duradera intermedia para, por ejemplo, SQS, Kinesis.
    • desacopla los componentes e introduce una resistencia adicional.
    • adecuado para cualquier interacción que no requiera una respuesta inmediata y en la que sea suficiente un reconocimiento de que se ha registrado una solicitud.
  • Descubrimiento de servicios

    • permite que se lancen o finalicen nuevos recursos en cualquier momento y que también se descubran, por ejemplo, usar ELB como un único punto de contacto para ocultar los detalles de la instancia subyacente o las zonas de Route 53 para abstraer el punto final del balanceador de carga.
  • Interfaces bien definidas

    • permite que varios componentes interactúen entre sí a través de interfaces específicas que no dependen de la tecnología para, por ejemplo, API RESTful con API Gateway.
Servicios, no servidores

Se requiere una amplia variedad de componentes tecnológicos subyacentes para desarrollar aplicaciones de gestión y funcionamiento. Su arquitectura de nube de AWS debe aprovechar un amplio conjunto de servicios de computación, almacenamiento, bases de datos, análisis, aplicaciones e implementación. En AWS, hay dos formas de hacerlo. El primero es a través de servicios administrados que incluyen bases de datos, aprendizaje automático, análisis, colas, búsqueda, correo electrónico, notificaciones y más. Por ejemplo, con Amazon Simple Queue Service (Amazon SQS), puede descargar la carga administrativa de operar y escalar un clúster de mensajería de alta disponibilidad, mientras paga un precio bajo solo por lo que usa. No solo eso, Amazon SQS es inherentemente escalable.

La segunda forma es reducir la complejidad operativa de ejecutar aplicaciones a través de arquitecturas sin servidor. Es posible crear servicios síncronos y controlados por eventos para dispositivos móviles, web, análisis e Internet de las cosas (IoT) sin administrar ninguna infraestructura de servidor.

Databases

En AWS, los servicios de bases de datos administradas ayudan a eliminar las restricciones que conllevan los costos de licencia y la capacidad de admitir diversos motores de bases de datos que eran un problema con la infraestructura de TI tradicional. Debe tener en cuenta que el acceso a la información almacenada en estas bases de datos es el objetivo principal de la computación en nube.

Hay tres categorías diferentes de bases de datos a tener en cuenta al diseñar la arquitectura:

  • Bases de datos relacionales: los datos aquí se normalizan en tablas y también se proporcionan con un potente lenguaje de consulta (SQL), capacidades de indexación flexibles, fuertes controles de integridad y la capacidad de combinar datos de varias tablas de manera rápida y eficiente. Se pueden escalar verticalmente y están altamente disponibles durante las conmutaciones por error (diseñadas para fallas agradables). RDS permite la escalabilidad vertical al aumentar los recursos y la escalabilidad horizontal utilizando réplicas de lectura para aumentar la capacidad de lectura y la fragmentación o la partición de datos para mejorar la capacidad de escritura.
  • NoSQL databases (DynamoDB) Estas bases de datos intercambian algunas de las capacidades de consulta y transacción de las bases de datos relacionales por un modelo de datos más flexible que escala horizontalmente sin problemas. Las bases de datos NoSQL utilizan una variedad de modelos de datos, incluidos gráficos, pares clave-valor y documentos JSON. Las bases de datos NoSQL son ampliamente reconocidas por su facilidad de desarrollo, rendimiento escalable, alta disponibilidad y resistencia. RDS también proporciona alta disponibilidad mediante la implementación Multi-AZ, donde los datos se replican de forma sincrónica. Además, el servicio RDS se puede configurar en un entorno híbrido (es decir, distribuido en el centro de datos de una empresa y una AWS VPC).
  • Data warehouse (Redshift) Un tipo especializado de base de datos relacional, optimizada para el análisis y la generación de informes de grandes cantidades de datos. Se puede utilizar para combinar datos transaccionales de fuentes dispares y ponerlos a disposición para análisis y toma de decisiones. Redshift logra un almacenamiento eficiente y un rendimiento de consulta óptimo a través de una combinación de procesamiento masivo paralelo (MPP), almacenamiento de datos en columnas y esquemas de codificación de compresión de datos específicos. La arquitectura MPP de Redshift permite aumentar el rendimiento al aumentar la cantidad de nodos en el clúster de almacenamiento de datos.

En un mundo de bases de datos, el escalado horizontal a menudo se basa en la partición de los datos, es decir, cada nodo contiene solo una parte de los datos, en el escalado vertical, los datos residen en un solo nodo y el escalado se realiza a través de múltiples núcleos, es decir, distribuyendo la carga los recursos de CPU y RAM de esa máquina.

Eliminar puntos únicos de falla

Un sistema está altamente disponible cuando puede resistir la falla de uno o varios componentes (por ejemplo, discos duros, servidores, enlaces de red, etc.). Puede pensar en formas de automatizar la recuperación y reducir las interrupciones en cada capa de su arquitectura de nube de AWS. Esto se puede hacer con los siguientes procesos:

  • Introduzca redundancia para eliminar puntos únicos de falla, al tener varios recursos para la misma tarea. La redundancia se puede implementar en modo de espera (la funcionalidad se recupera a través de la conmutación por error mientras el recurso no está disponible) o en modo activo (las solicitudes se distribuyen a múltiples recursos informáticos redundantes, y cuando uno de ellos falla, el resto simplemente puede absorber una parte mayor del carga de trabajo).
  • Tanto la detección como la reacción a fallos deben automatizarse tanto como sea posible.
  • Es fundamental tener un almacenamiento de datos duradero que proteja tanto la disponibilidad como la integridad de los datos. Se pueden introducir copias redundantes de datos mediante replicación sincrónica, asincrónica o basada en quórum.
  • La resiliencia automatizada de múltiples centros de datos se practica a través de zonas de disponibilidad en los centros de datos que reducen el impacto de las fallas.
  • Se puede mejorar el aislamiento de fallas en el escalado horizontal tradicional mediante fragmentación (un método para agrupar instancias en grupos llamados fragmentos, en lugar de enviar el tráfico de todos los usuarios a cada nodo como en la estructura de TI tradicional).
Optimizar para el costo

Al final del día, a menudo se reduce al costo. Su arquitectura de la nube de AWS debe diseñarse para optimizar los costos teniendo en cuenta los siguientes principios:

  • Puede reducir los costos seleccionando los tipos, configuraciones y soluciones de almacenamiento adecuados para satisfacer sus necesidades. La implementación de Auto Scaling para que pueda escalar horizontalmente cuando sea necesario o reducirla cuando sea necesario se puede realizar sin ningún costo adicional.
  • Aprovechar la variedad de opciones de compra de instancias (instancias reservadas y puntuales) al comprar instancias EC2 ayudará a reducir el costo de la capacidad informática.
Almacenamiento en caché (Caching)

El almacenamiento en caché mejora el rendimiento de la aplicación y aumenta la rentabilidad de una implementación

  • Application Data Caching

    • proporciona servicios que ayudan a almacenar y recuperar información de cachés en memoria rápidos, administrados
    • ElastiCache es un servicio web que facilita la implementación, operación y escala de una caché en memoria en la nube y es compatible con dos motores de almacenamiento en caché en memoria de código abierto: Memcached y Redis.
  • Edge Caching

    • permite que el contenido sea servido por una infraestructura más cercana a los espectadores, lo que reduce la latencia y brinda tasas de transferencia de datos altas y sostenidas necesarias para entregar grandes objetos populares a los usuarios finales a escala.
    • CloudFront es una red de entrega de contenido (CDN) que consta de varias ubicaciones de borde, que permite almacenar en caché copias de contenido estático y dinámico.
Seguridad
  • AWS trabaja en un modelo de responsabilidad de seguridad compartida

    • AWS es responsable de la seguridad de la infraestructura de nube subyacente.
    • usted es responsable de proteger las cargas de trabajo que implementa en AWS
  • AWS también ofrece amplias funciones de seguridad
  • IAM para definir un conjunto granular de políticas y asignarlas a usuarios, grupos y recursos de AWS
  • Roles de IAM para asignar credenciales a corto plazo a los recursos, que se distribuyen y rotan automáticamente
  • Amazon Cognito, para aplicaciones móviles, que permite que los dispositivos cliente tengan acceso controlado a los recursos de AWS a través de tokens temporales.
  • VPC para aislar partes de la infraestructura mediante el uso de subredes, grupos de seguridad y controles de enrutamiento
  • WAF para ayudar a proteger las aplicaciones web de la inyección de SQL y otras vulnerabilidades en el código de la aplicación
  • Registros de CloudWatch para recopilar registros de forma centralizada ya que los servidores son temporales
  • CloudTrail para auditar las llamadas a la API de AWS, que entrega un archivo de registro al bucket de S3. Luego, los registros se pueden almacenar de manera inmutable y procesar automáticamente para notificar o incluso tomar medidas en su nombre, protegiendo a su organización del incumplimiento de AWS Config, Amazon Inspector y AWS Trusted Advisor para monitorear continuamente el cumplimiento o las vulnerabilidades dando una clara descripción general de qué recursos de TI cumplen y cuáles no

Para obtener más detalles puedes consultar la siguiente documentacion: