Amazon EC2 Container Service (ECS) es un servicio de administración de contenedores de alto desempeño y escalabilidad, compatible con los contenedores de Docker y que le permite ejecutar fácilmente aplicaciones distribuidas en un clúster administrado de instancias de Amazon EC2. Amazon ECS elimina la necesidad de instalar, operar y escalar su propia infraestructura de administración de clústeres.
https://aws.amazon.com/es/ecs/
2. Agenda
Beneficios de los contenedores y de Amazon ECS
Clústeres de ECS
Tareas (tasks) de ECS
Servicios de ECS
Soluciones basadas en Amazon ECS
6. Beneficios de Amazon ECS
Gestión sencilla de clústeres a cualquier escala
Colocación flexible de los contenedores
Diseñado para utilizarse con otros servicios de AWS
Extensibilidad
7. Clústeres
Regional
Grupo de recursos
Agrupación de instancias de contenedor
Vacíos al comienzo, escalabilidad dinámica
8. Tareas (Tasks)
Unidad de trabajo
Agrupación de contenedores relacionados
Ejecutar en instancias de contenedor
9. Servicios
Adecuados para aplicaciones de ejecución prolongada
Balance de carga del tráfico entre contenedores
Recuperación automática de contenedores que no
funcionan correctamente
Servicios de detección
11. Clústeres de ECS
Configuración
Roles de IAM
Monitoreo
Registro
Autoescalado
Amazon EC2 Simple Systems Manager (SSM)
Aprovisionamiento con CloudFormation
12. Configuración de clúster de ECS Auto Scaling
Creación de una configuración de lanzamiento
Elija el tipo de instancia en función de los requisitos de
recursos; por ejemplo, memoria o CPU.
Use la AMI optimizada para Amazon ECS más reciente para
Linux; hay otras distribuciones disponibles.
Cree un grupo de Auto Scaling y configúrelo con el
tamaño inicial del clúster.
13. Políticas y roles de IAM de ECS
El agente de ECS llama a las API de ECS en su lugar. Por
este motivo, las instancias de contenedor requieren una
política y un rol de IAM que permitan estas llamadas.
El programador del servicio de ECS llama a las API de
EC2 y ELB en su lugar, con el fin de registrar instancias de
contenedor en sus balanceadores de carga y cancelar el
registro de estas.
Use las políticas administradas
AmazonEC2ContainerServiceforEC2Role y
AmazonEC2ContainerServiceRole (respectivamente).
14. Monitorización con Amazon CloudWatch
Los datos de métricas se envían a CloudWatch en
periodos de un minuto y se graban durante un periodo de
dos semanas.
Métricas disponibles:
CPUReservation, MemoryReservation, CPUUtilization, MemoryUtilization
16. Monitorización con Amazon CloudWatch
Use los scripts de monitorización de Amazon CloudWatch
para monitorizar métricas adicionales, como el espacio en
disco:
# Editar crontab
> crontab -e
# Añadir comando para informar de la utilización del espacio en disco a CloudWatch cada cinco
minutos
*/5 * * * * <ruta_de>/mon-put-instance-data.pl --disk-space-util --disk-space-used --disk-
space-avail --disk-path=/ --from-cron
17. Registro de información con los registros de Amazon
CloudWatch
Contenedor Logging con
syslogd y el agente de
registros de CloudWatch.
Anexar el volumen
/var/log al contenedor
Logging.
Vinculación de otros
contenedores
syslogd
Agente de
registros de
CloudWatch
Registros de
CloudWatch
Instancia de
contenedor
Clúster de
ECS
Registros de
agentes de ECS
Registros
de Docker
18. Autoescalado de su clúster de Amazon ECS
Cree una alarma de
CloudWatch para una métrica,
como MemoryReservation, por
ejemplo.
Configure las políticas de
escalado para aumentar y
reducir el tamaño de su clúster.
19. Amazon EC2 Simple Systems Manager (SSM)
Use Amazon EC2 SSM para ejecutar comandos en las
instancias del contenedor; por ejemplo, yum update
Añada AmazonEC2RoleForSSM al rol de IAM de las
instancias para procesar los comandos Run.
Instale el agente de SSM.
Cree un documento de SSM.
20. Configuración de clúster con AWS
CloudFormation
CloudFormation admite los recursos de definición de
tareas, servicios y clústeres de ECS.
Use AWS::IAM::Role para crear el rol de servicio de
ECS y el rol de instancias de contenedor.
Lance las instancias de contenedor mediante
AWS:AutoScaling::LaunchConfiguration y
AWS:AutoScaling::AutoScalingGroup.
24. Tareas de ECS
Definición de tarea
Amazon EC2 Container Registry
25. Tareas de ECS
Agrupe los contenedores que use para una
misma finalidad en la misma definición de tarea.
Separe los distintos componentes en varias
definiciones de tareas.
Cree servicios a partir de definiciones de tareas,
para mantener la disponibilidad.
30. Configuración de Amazon ECR
Tiene acceso de lectura y escritura en los repositorios
que cree en el registro predeterminado, a saber,
<id_de_cuenta_de_aws>.dkr.ecr.us-east-
1.amazonaws.com.
Los nombres de repositorios admiten espacios de
nombres, por ejemplo, equipo-a/aplicacion-web.
Los repositorios se pueden controlar mediante políticas
tanto de acceso de usuarios de IAM como de
repositorio.
31. Configuración de Amazon ECR
# Autenticar Docker en el registro Amazon ECR
> aws ecr get-login
docker login -u AWS -p <contraseña> -e none
https://<identificador_de_cuenta_de_aws>.dkr.ecr.us-east-1.amazonaws.com
> docker login -u AWS -p <contraseña> -e none
https://<identificador_de_cuenta_de_aws>.dkr.ecr.us-east-1.amazonaws.com
# Crear un repositorio denominado ecr-demo
> aws ecr create-repository --repository-name ecr-demo
# Crear o etiquetar una imagen
# Insertar una imagen en el repositorio
> docker push <identificador_de_cuenta_de_aws>.dkr.ecr.us-east-1.amazonaws.com/ecr-
demo:v1
32. Políticas y roles de IAM de ECR
ECR utiliza permisos basados en recursos para controlar el
acceso.
De forma predeterminada, solo el propietario del repositorio
tiene acceso a él.
Puede aplicar un documento de política que permita a otros
el acceso a su repositorio.
Para los roles o usuarios de IAM, use políticas administradas
que admitan distintos niveles de control:
AmazonEC2ContainerRegistryFullAccess,
AmazonEC2ContainerRegistryPowerUser o
AmazonEC2ContainerRegistryReadOnly
34. Servicios de ECS
Monitoreo
Registro
Escalamiento
Detección de servicios
Implementación
35. Monitoreo con Amazon CloudWatch
Los datos de métricas se envían a CloudWatch en
periodos de un minuto y se graban durante un periodo de
dos semanas.
Métricas disponibles:
CPUReservation, MemoryReservation, CPUUtilization, MemoryUtilization
37. Configuración del registro en la definición de
tareas
Parámetro logConfiguration de definición de tarea
Requiere la versión 1.18 o superior de Docker Remote
API Maps para la opción docker run --log-driver.
Controladores de registros: json-file, syslog, journald,
gelf, fluentd
39. Detección de servicios con servicios y Route 53
Tarea
Tarea TareaTarea
Servicio
de ECS
Enrutador de
aplicaciones;
p. ej., nginx
ELB interno con
CNAME; p. ej.,
api.ejemplo.com
Zona privada
Route 53; p. ej.,
ejemplo.com
40. Implementación de los servicios de ECS
Opcionalmente, puede ejecutar el servicio tras un
balanceador de carga.
Un balanceador de carga por servicio.
Actualmente, ELB admite una relación fija entre el
puerto del balanceador de carga y el puerto de la
instancia de contenedor.
Si una tarea no supera la comprobación de estado de
ELB, la tarea se cancela y reinicia (hasta que el servicio
alcance la capacidad deseada).
41. Implementación de los servicios de ECS
Actualice la definición de la tarea del servicio (actualización
acumulativa)
Especifique una configuración de implementación del servicio:
minimumHealthyPercent: límite inferior (como porcentaje del
valor de desiredCount del servicio) del número de tareas en
ejecución que deben permanecer en ejecución en un servicio
durante una implementación.
maximumPercent: límite superior (como porcentaje del valor de
desiredCount del servicio) del número de tareas en ejecución
que pueden ejecutarse en un servicio durante una
implementación.
42. Implementación de los servicios de ECS
Implementación usando el mínimo espacio:
minimumHealthyPercent = 50%, maximumPercent = 100%
43. Implementación de los servicios de ECS
Implementación rápida sin reducir la capacidad del servicio:
minimumHealthyPercent = 100%, maximumPercent = 200%
44. Implementación de los servicios de ECS
Implementaciones Blue-Green (azul-verde):
Defina dos servicios ECS (azul y verde).
Cada servicio se asocia con un ELB.
Los dos ELB del registro de Route 53 se configuran con
una política de enrutamiento ponderada; 100% principal,
0% secundaria.
Realice la implementación en el servicio azul o verde y
cambie los valores ponderados.
45. Implementación de los servicios de ECS
Registro de Route
53 configurado con
política de
enrutamiento
ponderada
TareaTarea
0%
100%
50. AWS Elastic Beanstalk
Usa Amazon ECS para coordinar las implementaciones
en los entornos de varios contenedores Docker.
Se encarga tareas como la creación de clústeres o la
definición y ejecución de tareas.
51. AWS Elastic Beanstalk
Elastic Beanstalk usa un archivo Dockerrun.aws.json que
describe cómo implementar los contenedores.
El archivo Dockerrun.aws.json incluye tres secciones:
AWSEBDockerrunVersion: se establece en “2” para los
entornos de varios contenedores Docker.
containerDefinitions: matriz de definiciones de contenedores.
volumes: crea puntos de montaje que un contenedor puede
usar en la instancia de contenedor.
53. Convox
# Inicializar la aplicación y crear un manifiesto predeterminado
> convox init
# Crear y ejecutar localmente su aplicación tal y como se ha declarado en el manifiesto
> convox start
# Crear una aplicación
> convox apps create my_app
# Implementar la aplicación, facilitar el nombre de DNS de ELB
> convox deploy
[...]
web: http://my_app-1234567890.us-east-1.elb.amazonaws.com
54. Remind Empire
Capa de control sobre Amazon ECS que proporciona un
flujo de PaaS conocido.
Todas las imágenes de Docker etiquetadas pueden
implementarse en Empire como aplicaciones.
Cuando se implementa una imagen de Docker en Empire,
este extrae un archivo Procfile de WORKDIR.
Cada tipo de proceso del archivo Procfile se asigna
directamente a un servicio de ECS.
55. Remind Empire
Capa de enrutamiento respaldada por ELB internos
Una aplicación que especifica un proceso web lleva un ELB
interno anexado a su servicio de ECS.
Cuando se crea un nuevo ELB interno, se crea un registro
CNAME asociado en Route53 bajo el TLD interno. Esto
permite la detección de servicios mediante DNS.