En este módulo, creará la imagen del contenedor para su aplicación monolítica node.js y la enviará a Amazon Elastic Container Registry. Empezar a crear

Implementación en Amazon ECR

Los contenedores le permiten empaquetar con facilidad el código de una aplicación, sus configuraciones y sus dependencias en componentes esenciales de uso sencillo que aportan uniformidad de entorno, eficacia operativa, productividad para los desarrolladores y control de versiones. Los contenedores pueden ayudarlo a garantizar una implementación rápida, consistente y fiable de las aplicaciones independientemente del entorno.

información general de la arquitectura

Velocidad
El lanzamiento de un contenedor con una nueva versión de código se puede realizar sin una sobrecarga de implementación significativa. Se mejora la velocidad operativa, porque el código creado en un contenedor en la máquina local del desarrollador se puede trasladar con facilidad a un servidor de prueba simplemente moviendo el contenedor. En el momento de la compilación, este contenedor puede estar vinculado a otros contenedores solicitados para ejecutar una pila de aplicaciones.

Control de dependencia y canalización mejorada
Una imagen de un contenedor Docker es una captura de un punto en el tiempo de las dependencias del código de una aplicación. Esto permite que una organización de ingeniería cree una canalización estándar para el ciclo de vida de la aplicación. Por ejemplo:

  1. Los desarrolladores crean y ejecutan el contenedor de manera local.
  2. El servidor de integración continua ejecuta el mismo contenedor y las pruebas de integración para garantizar que cumpla con las expectativas.
  3. Se envía el mismo contenedor a un entorno de prueba donde el comportamiento del tiempo de ejecución se puede comprobar con pruebas de carga o control de calidad manual.
  4. Se envía el mismo contenedor a producción.

Poder crear, probar, enviar y ejecutar exactamente el mismo contenedor a través de todas las etapas de la canalización de integración e implementación facilita la entrega de una aplicación fiable y de alta calidad.

Eficiencia de los recursos y densidad
Los contenedores facilitan la eficiencia de los recursos mejorados al permitir la ejecución de múltiples procesos heterogéneos en sistema único. La eficiencia de los recursos es un resultado natural de las técnicas de asignación y aislamiento que utilizan los contenedores. Los contenedores se pueden restringir para que consuman cantidades específicas de memoria y CPU de un host. Al comprender qué recursos necesita un contenedor y qué recursos están disponibles desde un servidor host subyacente, puede ajustar el tamaño de los recursos informáticos que utiliza con hosts más pequeños o aumentar la densidad de procesos ejecutados en un host grande y único, lo que incrementa la disponibilidad y optimiza el consumo de recursos.

Flexibilidad
La flexibilidad de los contenedores Docker se basa en su portabilidad, facilidad de implementación y tamaño pequeño. A diferencia de la instalación y configuración requerida en una máquina virtual, empaquetar servicios dentro de los contenedores permite que se trasladen con facilidad entre hosts, aislados de las fallas de otros servicios adyacentes y protegidos de parches errantes o actualizaciones de software en el sistema de host. 

Tiempo de realización: 20 minutos

Servicios utilizados:


En la primera parte de este tutorial, creará la imagen del contenedor de Docker para su aplicación node.js monolítica y la enviará a Amazon Elastic Container Registry (Amazon ECR). Seleccione cada uno de los números de paso para ampliar la sección correspondiente.

break-the-monolith
  • Paso 1. Configuración

    En los siguientes pasos, va a utilizar Docker, Github,Amazon Elastic Container Service (Amazon ECS) y Amazon ECR para implementar código en contenedores. Para completar estos pasos, asegúrese de tener las siguientes herramientas.

    1. Tenga una cuenta de AWS: si aún no tiene una cuenta con AWS, puede inscribirse aquí. Todos los ejercicios en este tutorial se diseñan para estar cubiertos por la capa gratuita de AWS.
      ⚐ Nota: Algunos de los servicios que utilizará pueden solicitar que su cuenta esté activa por más de 12 horas. Si experimenta dificultades con algunos de los servicios y posee una cuenta recién creada, espere unas horas y vuelva a intentarlo.
    2. Instale Docker: utilizará Docker para crear los archivos de imágenes que se ejecutarán en sus contenedores. Docker es un proyecto de código abierto. Puede descargarlo para Mac o para Windows.
      Una vez que Docker se instaló, puede verificar si se está ejecutando ingresando Docker --version en el terminal. El número de la versión debe mostrar, por ejemplo: versión Docker 19.03.5, compilación 633a0ea.
    3. Instale la CLI de AWS:
      • Utilizará la interfaz de línea de comandos de AWS (AWS CLI) para enviar las imágenes a Amazon ECR. Puede obtener más información y descargar AWS CLI aquí.
      • Una vez que AWS CLI se instaló, verifique si se está ejecutando ingresando aws --version en el terminal. El número de la versión debe mostrar, por ejemplo: aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207.
      • Si ya instaló AWS CLI, ejecute el siguiente comando en el terminal para garantizar que está actualizado con la versión más reciente: pip install awscli --upgrade --user
      • Si nunca antes utilizó AWS CLI, puede que necesite configurar sus credenciales.
    4. Tenga un editor de texto: si aún no tiene un editor de texto para programar, instale uno en su entorno local. Atom es un editor de texto de código abierto y simple de GitHub que es popular entre los desarrolladores.
  • Paso 2. Descargar y abrir el proyecto

    Descargue el código de GitHub: navegue a https://github.com/awslabs/amazon-ecs-nodejs-microservices y seleccione Clonar o descargar para descargar el repositorio GitHub para su entorno local. También puede utilizar GitHub Desktop o Git para clonar el repositorio.

    Abra los archivos del proyecto:inicie Atom, seleccione Agregar carpeta de proyecto y seleccione la carpeta donde guardó el repositorio amazon-ecs-nodejs-microservices. Esto agregará todo el proyecto en Atom para que pueda trabajar con él fácilmente.

    En la carpeta de proyecto, debe ver las carpetas para infraestructura y servicios. La infraestructura posee el código de configuración de la infraestructura AWS CloudFormation que utilizará en el siguiente paso. Servicios contiene el código que forma la aplicación de node.js.

    Tómese unos minutos para revisar los archivos y familiarizarse con los diferentes aspectos de la aplicación, incluida la base de datos db.json, el servidor server.js, package,json y la aplicación Dockerfile.

    proyecto de microservicios
  • Paso 3. Aprovisionar un repositorio

    Cree el repositorio:

    • Desplácese hasta la consola de Amazon ECR.
    • En la página Repositorios, seleccione Crear repositorio.
    • En la página Crear repositorio, introduzca el siguiente nombre para su repositorio: api.
      ⚐ Nota: En Inmutabilidad de etiquetas, deje la configuración predeterminada.
    • Seleccione Crear repositorio.

    Después de crear el repositorio, recibe un mensaje de confirmación con la dirección del repositorio. La dirección del repositorio está en el siguiente formato: [ID-de-cuenta].dkr.ecr.[región].amazonaws.com/[nombre-del-repositorio]. El [ID-de-cuenta], la [región] y el [nombre-del-repositorio] se especificarán el la configuración.

    ⚐ Nota: Necesitará la dirección del repositorio durante este tutorial.

    Creación
  • Paso 4. Crear y enviar la imagen Docker

    Acceda a su terminal y vaya al siguiente directorio: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Utilice el terminal para autenticar el registro en Docker:

    1. Ejecute $(aws ecr get-login --no-include-email --region [su-región]). Reemplace [su-región], por ejemplo: $(aws ecr get-login --no-include-email --region us-west-2). Si es necesario, configure sus credenciales.
      Si la autenticación es exitosa, recibirá el mensaje de confirmación: Inicio de sesión exitoso.
    2. Para crear la imagen, ejecute el siguiente comando en el terminal: docker build -t api.
      ⚐ Nota: El punto (.) después de api es necesario.
    3. Después de que se complete la creación, etiquete la imagen para enviarla al repositorio: docker tag api:latest [ID-de-cuenta].dkr.ecr.[región].amazonaws.com/api:v1 
      ⚐ Nota: Reemplace los marcadores [ID-de-cuenta] y [región] con su información específica.
      ⚐ Consejo pro: El :v1 representa la versión de compilación de la imagen. Cada vez que cree una imagen, debe incrementar este número de versión. Si estuvo utilizando un script, podría usar un número automatizado, como una marca temporal para etiquetar la imagen. Esta es una práctica recomendada que le permite volver de manera fácil a una compilación de una imagen de contenedor anterior en el futuro.
    4. Envíe la imagen a Amazon ECR mediante la ejecución de: docker push [ID-de-cuenta].dkr.ecr.[región].amazonaws.com/api:v1
      ⚐ Nota: Reemplace los marcadores [ID-de-cuenta] y [región] con su información específica.

    Si va a su repositorio Amazon ECR, debe ver su imagen etiquetada v1.

    Etiqueta de imagen Amazon ECR