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 crear

Información general de la arquitectura

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

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

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

d. Puertos de contenedores
Cada contenedor ejecuta un solo proceso de aplicación que vincula el clúster principal del nodo.js al puerto 80 dentro de su espacio de nombres.

e. Monolito para node.js en contenedores
El clúster principal de node.js es responsable de la distribución del tráfico a los trabajadores dentro de la aplicación monolítica. La arquitectura está en contenedores, pero es monolítica porque todos los contenedores comparten las mismas características.

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 API, puede lanzar y detener aplicaciones con contenedores 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.

No se aplican cargos adicionales por el uso de Amazon ECS. Solo tiene que pagar por los recursos de AWS (por ejemplo, las instancias EC2 o los volúmenes de EBS) creados para almacenar y ejecutar la aplicación.


Siga las siguientes instrucciones paso a paso para implementar la aplicación node.js mediante Amazon ECS. Seleccione cada uno de los números de paso para ampliar la sección correspondiente.

break-the-monolith
  • Paso 1. Lance un clúster de ECS mediante AWS CloudFormation

    Cree un clúster de Amazon ECS implementado detrás de un balanceador de carga de aplicaciones.

    1. Diríjase a la consola de AWS CloudFormation.
    2. Seleccione Crear pila.
    3. Seleccione Cargar un archivo de plantilla, elija el archivo ecs.yml del proyecto de GitHub en amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.ym y, a continuación, seleccione Siguiente.
    4. Para el nombre de la pila, introduzca BreakTheMonolith-Demo. Verifique que los demás parámetros tengan los siguientes valores:
      1. Capacidad deseada = 2
      2. Tipo de instancia = t2.micro
      3. Tamaño máximo = 2
    5. Seleccione Siguiente.
    6. En la página de Configuración de las opciones de pila, mantenga las opciones predeterminadas, desplácese hacia abajo y seleccione Siguiente.
    7. En la página de Revisión de BreakTheMonolith-Demo, desplácese hacia la parte inferior de la página, seleccione la casilla para aceptar la declaración de las Capacidades y seleccione Crear pila.

    Aparecerá la pila con el estado: CREATE_IN_PROGRESS. Puede seleccionar el botón de actualización en la esquina superior derecha de la pantalla para verificar el progreso. Este proceso por lo general tarda menos de 5 minutos.

    crear pila

    ⚐ NOTA: Si lo desea, puede utilizar la interfaz de línea de comandos de AWS (AWS CLI) para implementar pilas de AWS CloudFormation. Ejecute el siguiente código en la terminal de la carpeta amazon-ecs-nodejs-microservices/3-microservices y sustituya la [región] por su región de AWS.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • Paso 2. Compruebe si el clúster está en ejecución

    Verificar el clúster Amazon ECS
    • Seleccione el clúster BreakTheMonolith-Demo y, a continuación, seleccione la pestaña de Tareas para verificar que no hay tareas en ejecución.
    Tareas de clúster Amazon ECS
    • Seleccione la pestaña de Instancias ECS para comprobar que haya dos instancias de Amazon EC2 creadas por la plantilla de AWS CloudFormation.
      ⚐ Note: Si recibe un mensaje que indica que el agente de ECS es obsoleto, seleccione Más información para obtener instrucciones sobre cómo actualizar el agente de ECS.
    Instancias de Amazon ECS
  • Paso 3. Escriba una definición de tarea

    Las definiciones de tarea especifican cómo Amazon ECS implementa los contenedores de la aplicación en el clúster.

    • Seleccione Definiciones de tareas en el menú de navegación izquierdo de Amazon ECS.
    • Seleccione Crear nueva definición de tarea.
    • En la página de Selección de compatibilidad de tipo de lanzamiento, seleccione la opción EC2 y, a continuación, seleccione Siguiente paso.
    • En la página de Configuración de las definiciones de contenedores y tareas, realice las siguientes acciones:
      • En el campo de Nombre de definición de tarea, introduzca api.
      • Desplácese hacia abajo hasta las Definiciones de contenedor y seleccione Agregar contenedor.
      • En la ventana de Agregar contenedor:
        • Los parámetros sin definiciones se pueden dejar en blanco o con las configuraciones predeterminadas.
        • En el campo de Nombre de contenedor, introduzca api.
        • En el campo de la Imagen, introduzca [account-ID].dkr.ecr.[region].amazonaws.com/api:v1
          Sustituya [account-ID] y [region] con la información correspondiente. Asegúrese de que la etiqueta v1 coincida con el valor que utilizó en el módulo 1 para etiquetar y enviar la imagen. Se trata de la URL de la imagen de repositorio de ECR que se creó en el módulo anterior.
        • En el campo de Límites de memoria, verifique que la opción de Límite duro se haya seleccionado e introduzca 256 como valor.
        • Bajo Mapeos de puertos, el puerto del alojamiento = 0 y el puerto del contenedor = 3000.
        • Desplácese hacia ENTORNO, unidades de CPU = 256.
    • Seleccione Agregar.
      Regresará a la página de Configuración de definiciones de tareas y contenedores.
    • Desplácese hacia la parte inferior de la página y seleccione Crear.

    La definición de la tarea se lista en la consola.

    definición de la tarea
  • Paso 4. Configure el balanceador de carga de aplicaciones: grupo de destino

    El balanceador de carga de aplicaciones (ALB) permite que el servicio acepte el tráfico de entrada. El ALB direcciona el tráfico a las instancias de contenedores que se ejecutan en el clúster. Para ello, las utiliza como grupo de destino.

    Compruebe el nombre de la VPC: si no es la primera vez que utiliza la cuenta de AWS, es posible que tenga varias VPC. Es importante configurar el grupo de destino con la VPC correcta.

    • Vaya a la sección del balanceador de carga de la consola de EC2.
    • Ubique el balanceador de carga denominado demo.
    • Seleccione la casilla junto al demo para ver los detalles del balanceador de carga.
    • En la pestaña de Descripción, localice el atributo de la VPC (en este formato: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Nota: Necesitará el atributo de la VPC en el siguiente paso al configurar el grupo de destino ALB.
    atributo de la vpc

    Configure el grupo de destino ALB

    • Vaya a la sección de los grupos de destino en la consola de EC2.
    • Seleccione Crear grupo de destino.
    • Configure los siguientes parámetros de grupo de destino (mantenga los valores predeterminados para los parámetros que no aparecen a continuación):
      • Para el Nombre del grupo de destino, introduzca api.
      • Para el Protocolo, seleccione HTTP.
      • Para el Puerto, introduzca 80.
      • Para la VPC, seleccione el valor que coincida con el valor de la descripción del balanceador de carga. Lo más probable es que esta NO es la VPC predeterminada.
      • Ingrese a la Configuración de comprobación de estado avanzado y edite los siguientes parámetros según corresponda: 
        • Para el Umbral de buen estado, introduzca 2.
        • Para el Umbral de mal estado, introduzca 2.
        • Para el Tiempo de espera, introduzca 5.
        • Para el Intervalo, introduzca 6.
    • Seleccione Crear.
    crear grupos de destino
  • Paso 5. Configure el balanceador de carga de aplicaciones: agente de escucha

    El agente de escucha del balanceador de carga de aplicaciones comprueba las solicitudes de conexión entrantes al balanceador de carga de aplicaciones (ALB).

    Agregar un agente de escucha al balanceador de carga de aplicaciones (ALB)

    • Vaya a la sección del balanceador de carga de la consola de EC2.
    • Seleccione la casilla junto al demo para ver los detalles del balanceador de carga.
    • Seleccione la pestaña de los Agentes de escucha.
    • Seleccione Agregar agente de escucha y edite los siguientes parámetros según corresponda:
      • Para Protocol:port, seleccione HTTP e introduzca 80.
      • Para las Acciones predeterminadas, seleccione Reenviar a y en el campo del Grupo de destino, introduzca api.
    • Seleccione Guardar.
    agente de escucha al ALB
  • Paso 6. Implemente el monolito como servicio

    Implemente el monolito como servicio en el clúster.

    • Vaya a la consola de Amazon ECS y seleccione Clústeres en la barra del menú izquierdo.
    • Seleccione el clúster BreakTheMonolith-Demo, seleccione la pestaña de Servicios y, a continuación, seleccione Crear.
    • En la página de Configurar servicio, edite los siguientes parámetros (y mantenga los valores predeterminados para los parámetros que no aparecen a continuación): 
      • Para el Tipo de lanzamiento, seleccione EC2.
      • Para el Nombre del servicio, introduzca api
      • Para el Número de tareas, introduzca 1.
      • Seleccione Siguiente paso.
    • En la sección de Balanceador de carga de la página de Configuración de red, seleccione Balanceador de carga de aplicaciones.
      Aparecerán parámetros adicionales: Rol de IAM del servicio y Nombre del balanceador de carga.
      • Para el Rol del servicio de IAM, seleccione BreakTheMonolith-Demo-ECSServiceRole.
      • Para el Nombre del balanceador de carga, verifique que demo esté seleccionado.
    • En la sección de Contenedor a balanceador de carga, seleccione Agregar balanceador de carga.
      Aparece información adicional etiquetada como api:3000.
    • En la sección api:3000, realice las siguientes acciones:
      • Para el campo del Puerto del agente de escucha de producción, seleccione 80:HTTP.
      • Para el Nombre del grupo de destino, seleccione su grupo: api.
      • Seleccione Siguiente paso.
    • En la página de Configuración de Auto Scaling, mantenga la configuración predeterminada y seleccione Siguiente paso.
    • En la página de Revisión, revise la configuración y, a continuación, seleccione Crear servicio.
    • Tras crear el servicio, seleccione Ver servicio.
    API del servicio ECS de Amazon

    ¡Buen trabajo! Ahora tiene un servicio que funciona. Es posible que el contenedor tarde un minuto en aparecer en buen estado para comenzar a recibir tráfico.

  • Paso 7. Pruebe el monolito

    Compruebe si el servicio está disponible desde Internet y mediante un ping para validar la implementación.

    Para encontrar la URL del servicio:

    • Vaya a la sección de balanceadores de carga en la consola de EC2.
    • Seleccione su balanceador de carga demo.
    • En la pestaña de la Descripción, copie el nombre de DNS y páguelo en una nueva pestaña o ventana de navegador.
    • Debe aparecer el mensaje Listo para recibir solicitudes.


    Observe cada parte del servicio:
    la aplicación node.js direcciona el tráfico a cada trabajador en función de la URL. Para ver un trabajador, solo agregue el nombre del trabajador api/[worker-name] al final del nombre de DNS de la siguiente forma:

    • http://[nombre de DNS]/api/users
    • http://[nombre de DNS]/api/threads
    • http://[nombre de DNS]/api/posts

    También puede agregar un número de registro al final de la URL para examinar a fondo un registro específico. Por ejemplo: http://[DNS name]/api/posts/1 o http://[DNS name]/api/users/2

    demostración de usuario