En este módulo, segmentará la aplicación node.js en varios servicios interconectados y enviará la imagen de cada servicio a un repositorio de Amazon ECR. Empezar a construir

La última arquitectura de aplicaciones utiliza Amazon Elastic Container Service y Application Load Balancer. 

información general de la arquitectura

a. Cliente
El cliente realiza las solicitudes de tráfico de carga sobre el puerto 80.

b. Balanceador de carga
El Application Load Balancer (ALB) dirige el tráfico externo hacia el servicio adecuado. ALB inspecciona la solicitud del cliente y utiliza las reglas de direccionamiento para dirigir la solicitud a una instancia y puerto para el grupo de destino conforme a la regla.

c. Grupos de destino
Cada servicio tiene un grupo de destino que realiza un seguimiento de las instancias y los puertos de cada contenedor que se ejecutan en dicho servicio.

d. Servicios cargados en contenedores
Amazon Elastic Container Service (Amazon ECS) implementa cada servicio en un contenedor en un clúster de EC2. Cada contenedor solo se ocupa de una única función.

Aislamiento de caídas
Incluso las mejores organizaciones de ingeniería pueden tener, y de hecho tienen, caídas mortales en la producción. Además de todas las siguientes prácticas estándar recomendadas para administrar con facilidad las caídas, un enfoque que puede limitar el impacto de este tipo de caídas consiste en crear microservicios. Buena arquitectura de microservicios significa que si una microparte de su servicio falla, solo esa parte de su servicio se cerrará. El resto de su servicio puede seguir funcionando correctamente.

Aislamiento para seguridad
En una aplicación monolítica, si una característica de la aplicación tiene una interrupción en la seguridad, por ejemplo, una vulnerabilidad que permite la ejecución del código remoto, entonces debe asumir que un atacante podría haber obtenido acceso a todas las demás características del sistema. Esto puede ser peligroso si, por ejemplo, la característica de carga de avatares tiene un problema de seguridad que termina comprometiendo la base de datos con las contraseñas de los usuarios. Separar características en microservicios con Amazon ECS le permite un acceso seguro a los recursos de AWS y ofrece a cada servicio su propia función de IAM. Cuando se siguen las prácticas recomendadas de microservicios, el resultado es que si un atacante pone en peligro un servicio, solo tendrá acceso a los recursos de ese servicio, y no puede acceder de forma horizontal a otros recursos de otros servicios sin arremeter en dichos servicios.

Escalado independiente
Cuando las características están divididas en microservicios, la cantidad de infraestructura y el número de instancias que utiliza cada clase de microservicio se puede escalar hacia arriba y hacia abajo de manera independiente. De ese modo, resulta más sencillo medir el coste de una característica concreta, identificar características que pueden necesitar optimización primero, así como mantener el desempeño de confianza para otras características si una característica se sale de control en sus necesidades de recursos.

Velocidad de desarrollo
Los microservicios reducen los riesgos en el desarrollo, lo que puede permitir a un equipo crear con mayor rapidez. En un monolito, la adición de una nueva característica puede impactar potencialmente en todas las otras características que el monolito contiene. Los desarrolladores deben pensar detenidamente en el impacto de cualquier código que añaden, y asegurarse de que no rompen nada. Por otra parte, una arquitectura de microservicios tiene nuevo código para una nueva característica que entra en un nuevo servicio. Los desarrolladores pueden estar seguros de que cualquier código que escriben realmente no podrá afectar al código existente en absoluto, a menos que escriban explícitamente una conexión entre dos microservicios.

Tiempo de realización: 20 minutos

Servicios utilizados:


Siga las instrucciones que aparecen a continuación paso a paso para segmentar el monolito. Haga clic en cada número de paso para expandir la sección.

break-the-monolith
  • Paso 1. Aprovisionar los Repositorios ECR

    En los dos pasos anteriores, implementó la aplicación como un monolito utilizando un único servicio y un único repositorio de imágenes de contenedor. Para implementar la aplicación como tres microservicios, tendrá que aprovisionar tres repositorios (una para cada servicio) en Amazon ECR.

    Nuestros tres servicios son:

    1. usuarios
    2. subprocesos
    3. publicaciones


    Crear el repositorio:

    • Vaya a la consola Amazon ECR.
    • Seleccione Crear repositorio
    • Nombre del repositorio:
      • usuarios
      • subprocesos
      • publicaciones
    • Registre la información de los repositorios: [account-id].dkr.ecr.[region].amazonaws.com/[service-name]

    Repetir estos pasos para cada microservicio.

    Debe tener cuatro repositorios en Amazon ECR.

    repositorios
  • Paso 2. Autenticar Docker con AWS (opcional)

    Puede omitir este paso si ha completado recientemente el Módulo 1 de este taller.

    • Ejecute aws ecr get-login --no-include-email --region [region]
      Ejemplo: aws ecr get-login --no-include-email --region us-west-2
    • Va a obtener una salida masiva a partir del inicio de sesión de Docker en -u AWS -p ... Copie esta salida completa, péguela y ejecútela en el terminal.

    • Debería ver Inicio de sesión logrado

      ⚐ NOTA: Si no logra este inicio de sesión, puede que sea porque tiene una versión más reciente de Docker que ha depreciado el indicador -e none. Para resolver el problema, pegue la salida en su editor de texto, elimine -e none desde el final de la salida y ejecute la salida actualizada en el terminal.

  • Paso 3. Construir y enviar imágenes para cada servicio

    En la carpeta del proyecto amazon-ecs-nodejs-microservices/3-microservices/services, tendrá carpetas con archivos para cada servicio. Observe cómo cada microservicio es básicamente un clon del servicio monolítico anterior.

    Puede ver cómo cada servicio ya está especializado al comparar el archivo db.json en cada servicio y en el servicio api monolítico. Anteriormente, subprocesos, publicaciones y usuarios se almacenaron en un único archivo de base de datos. Ahora, cada uno de ellos se almacena en el archivo de base de datos para sus respectivos servicios.

    Abra su terminal y defina la ruta de la sección 3 microservices/services del código de GitHub. ~/amazon-ecs-nodejs-microservices/3-microservices/services

    Cree y etiquete cada imagen

    • En el terminal, ejecute docker build -t [service-name]./[service-name] Ejemplo: docker build -t publicaciones./publicaciones
    • Después de finalizar la compilación, etiquete la imagen para que pueda enviarla al repositorio: docker tag [service-name]: latest [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1 ejemplo: docker tag posts:latest [account-id].dkr.ecr.us-west-2.amazonaws.com/posts:v1
    • Ejecute docker push para enviar su imagen de ECR: docker [push account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1

    Si va al repositorio de ECR, debería ver las imágenes etiquetadas con v1. 

    ♻ Repetir estos pasos para cada imagen de microservicio.  

    ⚐ NOTA: Asegúrese de crear y etiquetar las tres imágenes.