En este módulo, podrá utilizar Amazon Elastic Container Service (Amazon ECS) para crear un clúster administrado de instancias de cómputo de EC2 e implementar su imagen como un contenedor que se ejecuta en el clúster. Empezar a construir

información general de la arquitectura

a. Cliente
El cliente realiza una solicitud a través del puerto 80 para el balanceador de carga.

b. Balanceador de carga
El balanceador de carga distribuye las solicitudes a todos los puertos disponibles.

c. Grupos de destino
Las instancias se registran en la aplicación del grupo de destino.

d. Puertos del contenedor
Cada contenedor ejecuta un único proceso de solicitud que vincula el clúster de node.js principal al puerto 80 en su espacio de nombres.

e. Monolito del node.js en contenedor
El clúster node.js principal es responsable de distribuir el tráfico a los empleados dentro de la aplicación monolítica. Esta arquitectura es todavía monolítica, pero con contenedores, porque cada contenedor tiene todas las mismas características del resto de los contenedores.

Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores de alto desempeño y escalabilidad compatible con los contenedores de Docker. El servicio permite ejecutar fácilmente aplicaciones en un clúster administrado de instancias de Amazon EC2. Mediante sencillas llamadas a la API, puede lanzar y detener aplicaciones en contenedores de Docker, realizar consultas del estado completo del clúster y obtener acceso a numerosas características comunes como los grupos de seguridad, Elastic Load Balancing, los volúmenes de EBS y las funciones de IAM.

Con Amazon ECS, puede programar la colocación de los contenedores en su clúster en función de las necesidades de los recursos y los requisitos de disponibilidad. También puede integrar su propio programador o programadores de terceros para satisfacer los requisitos específicos de la aplicación o del negocio.

Amazon Elastic Container Service no conlleva ningún costo adicional. Solo tiene que pagar por los recursos de AWS (por ejemplo, instancias EC2 o volúmenes de EBS) creados para almacenar y ejecutar la aplicación.


Siga las instrucciones paso a paso que aparecen a continuación para implementar la aplicación de node.js con Amazon ECS. Haga clic en cada número de paso para expandir la sección.

break-the-monolith
  • Paso 1. Lanzar de un clúster de ECS por medio de AWS CloudFormation

    En primer lugar, cree un clúster de Amazon ECS, implementado detrás de un Application Load Balancer.

    1. Diríjase a la consola AWS CloudFormation.
    2. Seleccione Crear pila.
    3. Seleccione "Cargar una plantilla en Amazon S3" y elija el archivo ecs.yml del proyecto GitHub en amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml Seleccione Siguiente.
    4. Para el nombre de la pila, ingrese BreakTheMonolith-Demo. Mantenga el resto de los valores de los parámetros iguales:
      1. Capacidad deseada = 2
      2. Tipo de instancia = t2.micro
      3. Tamaño máximo = 2
    5. Seleccione Next (Siguiente).
    6. No es necesario modificar las opciones en esta página. Seleccione Next (Siguiente).
    7. Marque la casilla en la parte inferior de la página siguiente y seleccione Crear. Verá la pila con CREAR_EN_PROGRESO en anaranjado. Puede seleccionar el botón de actualización que aparece en la parte superior derecha de la pantalla para comprobar el progreso. Este proceso suele tardar menos de 5 minutos.
    crear pila

    ⚐ NOTA: También puede utilizar la CLI de AWS para implementar pilas de AWS CloudFormation. Solo tiene que añadir en su región a este código y ejecutar en el terminal de la carpeta amazon-ecs-nodejs-microservices/3-microservices en su equipo.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region <region> \
       --stack-name Nodejs-Microservices \
       --capabilities CAPABILITY_NAMED_IAM
  • Paso 2. Comprobar que su clúster se esté ejecutando

    compruebe el clúster
    • Al hacer clic en el clúster, seleccione la pestaña "Tareas"; no se ejecutarán las tareas.
    tareas
    • Seleccione la pestaña "Instancias ECS"; verá las dos instancias EC2 que la plantilla de AWS CloudFormation creó.
    Instancias ECS
  • Paso 3. Escribir una definición de tarea

    La definición de tarea indica a Amazon ECS cómo implementar los contenedores de la aplicación en el clúster.

    • Vaya al menú "Definiciones de tareas" en el lado izquierdo de la consola Amazon ECS.
    • Seleccione Crear nueva definición de tareas.
    • Nombre de la definición de tareas = api.
    • Seleccione Añadir contenedor.
    • Especifique los siguientes parámetros.
      • Si no hay un parámetro definido, déjelo en blanco o con la configuración predeterminada: Nombre del contenedor = api imagen = [account-id]. dkr.ecr.[region]. amazonaws.com/api:v1 (esta es la URL de la imagen del repositorio ECR del paso anterior).
      • Asegúrese de que la etiqueta :v1 coincida con el valor que se utilizó en el Módulo 1 para etiquetar y enviar la imagen. Memoria = Límite duro: 256 Asignaciones de puertos = Puerto de alojamiento:0, puerto de contenedor:3000 unidades de CPU = 256
    • Seleccione Añadir.
    • Seleccione Create (Crear).
    • La definición de tareas se mostrará en la consola.
    definición de tarea
  • Paso 4. Configurar Application Load Balancer: grupo de destino

    El Application Load Balancer (ALB) le permite a su servicio aceptar el tráfico entrante. El ALB redirige automáticamente el tráfico hacia las instancias de contenedor que se ejecutan en el clúster con ellos como un grupo de destino.

    Compruebe el nombre de VPC: Si esta no es la primera vez que utiliza esta cuenta de AWS, puede disponer de varias VPC. Es importante configurar el grupo de destino con la VPC correcta.

    • Vaya a la sección Load Balancer de la consola de EC2.
    • Debería ver que un balanceador de carga ya existe con el nombre de demo.
    • Seleccione la casilla para ver los detalles del balanceador de carga.
    • Tenga en cuenta el valor del atributo de VPC en la página de detalles.
    atributo de vpc

    Configure el grupo de destino de ALB

    • Vaya a la sección de Grupo de destino de la consola EC2.
    • Seleccione Crear grupo de destino.
    • Configure el grupo de destino (no modifique los valores predeterminados si no se especifican aquí):
      • Nombre = api
      • Protocolo = HTTP
      • Puerto = 80
      • VPC = seleccione la VPC que coincida con el balanceador de carga en el paso anterior. Lo más probable es que NO sea su VPC predeterminada.
      • Configuración avanzada de comprobación de estado: umbral en buen estado = 2 umbral en mal estado = 2 límite de tiempo = 5 intervalos = 6.
    • Seleccione Create (Crear).
    crear grupos de destino
  • Paso 5. Configurar el Application Load Balancer: Agente de escucha

    El agente de escucha comprueba las solicitudes de conexión entrantes a ALB.

    Añadir un agente de escucha a ALB

    • Vaya a la sección Load Balancer de la consola de EC2.
    • Debería ver que un balanceador de carga ya existe con el nombre de demo.
    • Seleccione la casilla para ver los detalles del balanceador de carga.
    • Seleccione la pestaña Agente de escucha.
    • Seleccione Crear agente de escucha:
      • Protocolo = HTTP
      • Puerto = 80
      • Grupo de destino predeterminado = api
    • Haga clic en Crear.
    Agente de escucha para ALB
  • Paso 6. Implementar el monolito como servicio

    Ahora, implementará el monolito como un servicio en el clúster.

    • Vaya al menú "Clústers" en la parte izquierda de la consola de Amazon ECS.
    • Seleccione el clúster: BreakTheMonolith-Demo-ECSCluster.
    • En la pestaña de servicios, seleccione Create (Crear).
    • Configurar el servicio (no modificar los valores predeterminados): Nombre de servicio = api Número de tareas = 1
    • Seleccione Configurar ELB:
      • Tipo de ELB = Application Load Balancer.
      • Para IAM, seleccione BreakTheMonolith-Demo-ECSServiceRole.
      • Seleccione el nombre de su balanceador de carga ELB = demostración.
      • Seleccione Añadir a ELB.
    • Añada su servicio para el grupo de destino:
      • Puerto de agente de escucha = 80: HTTP
      • Nombre del grupo de destino = seleccione su grupo: api.
    • Seleccione Save (Guardar).
    implemente su servicio
    • Seleccione Create Service (Crear servicio).
    • Seleccione View Service (Ver servicio).
    configuración opcional

    ¡Buen trabajo! Ahora tiene un servicio en ejecución. Se puede tardar un minuto para que el contenedor se registre en buen estado y empiece a recibir el tráfico.

  • Paso 7. Probar su monolito

    Valide sus implementaciones mediante la comprobación de si el servicio está disponible desde Internet y haciendo un ping.

    Para buscar la dirección URL de servicio:

    • Vaya a la sección Balanceador de carga de la consola EC2.
    • Seleccione la demostración del balanceador de carga.
    • Copie y pegue el valor para el nombre de DNS en su navegador.
    • Debería ver un mensaje "Listo para recibir solicitudes".


    Consulte los componentes del Servicio:
    La aplicación de node.js dirige el tráfico a cada empleado en función de la dirección URL. Para visualizar un empleado, solo tiene que añadir el nombre de empleado api/[nombre-empleado] al final del nombre DNS de esta forma:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts

    También puede añadir un número de registro al final de la dirección URL a un registro particular. Por ejemplo: http://[DNS name]/api/posts/1 o http://[DNS name]/api/users/2

    demostración de usuario