Implementar una aplicación agrupada en Amazon ECS con AWS Copilot - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implementar una aplicación agrupada en Amazon ECS con AWS Copilot

Creado por Jean-Baptiste Guillois (AWS), Mathew George (AWS) y Thomas Scott (AWS)

Resumen

Este patrón muestra cómo implementar contenedores en un clúster de Amazon Elastic Container Service (Amazon ECS) de dos maneras: mediante la consola de administración de Amazon Web Services (AWS) y mediante AWS Copilot, para demostrar cómo AWS Copilot simplifica las tareas de implementación.

Amazon ECS es un servicio de administración de contenedores altamente escalable y rápido que facilita la tarea de ejecutar, detener y administrar contenedores en un clúster. Los contenedores se definen en una definición de tareas que se utiliza para ejecutar tareas individuales o tareas dentro de un servicio. Las tareas y los servicios se pueden ejecutar en una infraestructura sin servidor administrada por AWS Fargate. Como alternativa, para tener más control sobre su infraestructura, puede ejecutar sus tareas y servicios en un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que administre.

Los comandos de la interfaz de la línea de comandos (CLI) de AWS Copilot simplifican la creación, el lanzamiento y el uso de aplicaciones en contenedores listas para producción en Amazon ECS desde un entorno de desarrollo local. La CLI de AWS Copilot se alinea con los flujos de trabajo de los desarrolladores que admiten prácticas recomendadas de aplicaciones modernas: desde la utilización de infraestructura como código hasta la creación de una canalización de integración y entrega continuas (CI/CD) aprovisionada en nombre de un usuario. Puede utilizar la CLI de AWS Copilot como parte de su ciclo cotidiano de desarrollo y prueba o como alternativa a la Consola de administración de AWS.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • En el plan gratuito, Docker impone un límite de extracción de 100 imágenes de contenedor por cada 6 horas por dirección IP.

Arquitectura

Pila de tecnología de destino

  • Entorno de AWS configurado con una nube privada virtual (VPC), subredes públicas y privadas y grupos de seguridad

  • Clúster de Amazon ECS

  • Definición de tareas y servicios de Amazon ECS

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon DynamoDB

  • Equilibrador de carga de aplicación

  • AWS Fargate

  • Amazon Identity and Access Management (IAM)

  • Amazon CloudWatch

  • AWS CloudTrail

Arquitectura de destino

Al implementar la aplicación de muestra para este patrón, se crean e implementan varias tareas en zonas de disponibilidad independientes. Cada tarea almacena datos en Amazon DynamoDB. Al acceder a la página web de una tarea, puede ver los datos de todas las demás tareas.

Arquitectura para implementar contenedores con AWS Copilot

Herramientas

Servicios de AWS

  • Amazon ECR :  Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado por AWS que es seguro, escalable y fiable. Amazon ECR admite repositorios privados con permisos basados en recursos mediante IAM.

  • Amazon ECS: Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores altamente escalable y rápido que permite ejecutar, detener y administrar contenedores en un clúster. Las tareas y los servicios se pueden ejecutar en una infraestructura sin servidor administrada por AWS Fargate. Como alternativa, para tener más control sobre su infraestructura, puede ejecutar sus tareas y servicios en un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que administre.

  • AWS Copilot: AWS Copilot proporciona una interfaz de la línea de comandos que le ayuda a lanzar y administrar aplicaciones en contenedores en AWS, incluyendo su envío a un registro, la creación de una definición de tarea y la creación de un clúster.

  • AWS Fargate: AWS Fargate es un motor de pay-as-you-go cómputo sin servidor que le permite centrarse en crear aplicaciones sin tener que administrar servidores. AWS Fargate es compatible tanto con Amazon ECS como con Amazon Elastic Kubernetes Service (Amazon EKS). Al ejecutar las tareas y los servicios de Amazon ECS con el tipo de lanzamiento de Fargate o un proveedor de capacidad de Fargate, la aplicación se empaqueta en contenedores, se especifican los requisitos de CPU y de memoria, se definen las políticas de IAM y las redes, y se lanza la aplicación. Cada tarea de Fargate tiene su propio límite de aislamiento y no comparte el kernel subyacente, los recursos de CPU, los recursos de memoria ni la interfaz de red elástica con otra tarea.

  • Amazon DynamoDB: Amazon DynamoDB es un servicio de base de datos NoSQL totalmente administrado que ofrece un rendimiento rápido y predecible, así como una perfecta escalabilidad.

  • Elastic Load Balancing (ELB): Elastic Load Balancing distribuye automáticamente el tráfico entrante entre varios destinos, como EC2 instancias, contenedores y direcciones IP, en una o más zonas de disponibilidad. Monitorea el estado de los destinos registrados y enruta el tráfico solamente a destinos en buen estado. Elastic Load Balancing escala el equilibrador de carga a medida que el tráfico entrante va cambiando con el tiempo. Puede escalarse automáticamente para adaptarse a la mayoría de las cargas de trabajo.

Herramientas

Código

El código de la aplicación de muestra utilizada en este patrón está disponible en el repositorio GitHub de aplicaciones de muestra de clúster. Siga las instrucciones de la siguiente sección para utilizar los archivos de muestra.

Epics

TareaDescripciónHabilidades requeridas
Clona el GitHub repositorio.

Clone el repositorio de código de muestra mediante el comando:

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
Desarrollador de aplicaciones, AWS DevOps
Crear su repositorio de Amazon ECR.
  1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon ECR en los https://console.aws.amazon.com/ecr/repositorios.

  2. Elija Create repository.

  3. Para el nombre del repositorio, introduzca. cluster-sample-app

  4. Mantenga los valores predeterminados para el resto de ajustes.

  5. Elija Create repository.

Para obtener más información, consulte Creación de un repositorio privado en la documentación de Amazon ECR.

Desarrollador de aplicaciones, AWS DevOps
Crear, etiquetar y enviar una imagen de Docker a su repositorio de Amazon ECR.
  1. Seleccione el repositorio que acaba de crear y seleccione Ver comandos push.

  2. Copie los comandos que se muestran y ejecútelos localmente para crear, etiquetar y enviar su imagen de Docker. Estos comandos serán similares a lo siguiente.

Para autenticar su cliente de Docker en el registro:

aws ecr get-login-password --region <YOUR_AWS_REGION> | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com

Para compilar su imagen de Docker:

docker build -t cluster-sample-app .

Para etiquetar su imagen de Docker:

docker tag cluster-sample-app:latest <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest

Para enviar su imagen de Docker a su repositorio:

docker push <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest
Desarrollador de aplicaciones, AWS DevOps
Implementar la pila de aplicaciones.
  1. Abra la CloudFormation consola de AWS en https://console.aws.amazon.com/cloudformation/.

  2. Seleccione Creación de pila.

  3. En la sección Preparación de la plantilla, seleccione La plantilla está lista.

  4. En la sección Especificar plantilla, elija Cargar un archivo de plantilla.

  5. Elija el archivo local cluster-sample-app-stack.yml que ha clonado del GitHub repositorio como CloudFormation plantilla y, a continuación, elija Siguiente.

  6. Escriba un nombre para la pila y después elija Next (Siguiente).

  7. Mantenga todas las opciones predeterminadas y, a continuación, seleccione Siguiente.

  8. Revise todas las opciones, confirme la creación de los recursos de IAM y, a continuación, seleccione Crear pila.

  9. Cuando la pila de aplicaciones se haya implementado, seleccione la pestaña Salida, copie la URL y ábrala en su navegador para acceder a la aplicación.

Para obtener más información sobre la implementación de CloudFormation plantillas, consulte Crear una pila en la CloudFormation documentación de AWS.

AWS DevOps, desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas
Clona el GitHub repositorio.

Clone el repositorio de código de muestra mediante el comando:

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
Desarrollador de aplicaciones, AWS DevOps
Implementar la imagen de contenedor en AWS mediante la CLI de AWS Copilot.

Implemente la aplicación en un solo paso mediante el siguiente comando en el directorio raíz de su proyecto:

copilot init --app cluster-sample-app --name demo --type "Load Balanced Web Service" --dockerfile ./Dockerfile --port 8080 --deploy

A continuación, debería poder acceder a la aplicación mediante el nombre de DNS obtenido como resultado.

Desarrollador de aplicaciones, AWS DevOps
TareaDescripciónHabilidades requeridas
Eliminar los recursos creados a través de la consola de administración de AWS.

Si utilizó la opción 1 (la consola de administración de AWS) para implementar la pila de aplicaciones, siga estos pasos cuando esté listo para eliminar los recursos que creó:

  1. Abra la CloudFormation consola en https://console.aws.amazon.com/cloudformation/.

  2. Seleccione la pila que creó y, a continuación, seleccione Eliminar.

  3. Abra la consola Amazon ECR en los https://console.aws.amazon.com/ecr/repositorios.

  4. Seleccione el repositorio que creó y, a continuación, seleccione Eliminar.

Desarrollador de aplicaciones, AWS DevOps
Eliminar los recursos creados por AWS Copilot.

Si utilizó la opción 2 (la CLI de AWS Copilot) para implementar la pila de aplicaciones, ejecute el siguiente comando desde el directorio raíz de su proyecto cuando esté listo para eliminar los recursos que creó:

copilot app delete
Desarrollador de aplicaciones, AWS DevOps

Recursos relacionados